> ## Documentation Index
> Fetch the complete documentation index at: https://docs.codex.io/llms.txt
> Use this file to discover all available pages before exploring further.

# onLaunchpadTokenEventBatch

> Live-streamed launchpad token events batched (more efficient). onLaunchpadTokenEventBatch subscription reference: arguments and payload fields.

## GraphQL

```
type Subscription {
  # Requires a Growth or Enterprise plan.
  onLaunchpadTokenEventBatch(
    input: OnLaunchpadTokenEventBatchInput
  ): [LaunchpadTokenEventOutput!]!
}

type SocialLinks {
  bitcointalk: String
  blog: String
  coingecko: String
  coinmarketcap: String
  discord: String
  email: String
  facebook: String
  github: String
  instagram: String
  linkedin: String
  reddit: String
  slack: String
  telegram: String
  twitch: String
  twitter: String
  website: String
  wechat: String
  whitepaper: String
  youtube: String
  tiktok: String
}

type TokenInfo {
  id: String!
  address: String!
  circulatingSupply: String
  cmcId: Int
  gridAssetId: String
  bluechipRating: String
  isScam: Boolean
  name: String
  networkId: Int!
  symbol: String!
  totalSupply: String
  imageThumbHash: String
  imageThumbUrl: String
  imageSmallUrl: String
  imageLargeUrl: String
  imageBannerUrl: String
  videoExternalUrl: String
  description: String
}

type OrganizationUrl {
  url: String!
  type: String
}

type OrganizationSocial {
  url: String!
  type: String
}

type AssetDeployment {
  id: String!
  networkId: Int!
  address: String!
  standard: String
  assetId: String!
  rootId: String!
  token: EnhancedToken
}

type Asset {
  id: String!
  name: String
  description: String
  ticker: String
  type: String
  status: String
  icon: String
  rootId: String!
  assetDeployments: [AssetDeployment!]!
}

type Organization {
  name: String!
  foundingDate: String
  descriptionShort: String
  descriptionLong: String
  tagLine: String
  type: String
  sector: String
  urls: [OrganizationUrl!]!
  socials: [OrganizationSocial!]!
  logo: String
  icon: String
  header: String
  rootId: String!
  assets: [Asset!]!
}

type ExplorerTokenData {
  id: String!
  blueCheckmark: Boolean
  description: String
  divisor: String
  tokenPriceUSD: String
  tokenType: String
}

type Exchange {
  id: String!
  address: String!
  color: String
  name: String
  exchangeVersion: String
  iconUrl: String
  networkId: Int!
  tradeUrl: String
}

enum WalletCategory {
  NORMIE
  TOKEN_CREATOR
  EXCHANGE
  DEFI_EXCHANGE
  PAIR
  PAIR_TOKEN_HOLDER
  POOL_AUTHORITY
  STAKING_VAULT
  NOTORIOUS
  BURN
  LOCKER
}

type WalletFunding {
  fundedByAddress: String!
  fundedByLabel: String
  fundedAt: Int!
  tokenAddress: String!
  networkId: Int!
  amount: String!
  transactionHash: String!
}

type WalletPolymarketProfile {
  proxyWallet: String!
  xUsername: String
  displayName: String
  pseudonym: String
  profileImageUrl: String
  verifiedBadge: Boolean
  displayUsernamePublic: Boolean
  fetchedAt: Int!
}

type Wallet {
  address: String!
  category: WalletCategory
  firstSeenTimestamp: Int
  firstFunding: WalletFunding
  identityLabels: [String!]
  avatarUrl: String
  displayName: String
  twitterId: String
  twitterUsername: String
  telegramId: String
  telegramUsername: String
  website: String
  discordId: String
  discordUsername: String
  githubId: String
  githubUsername: String
  farcasterId: String
  farcasterUsername: String
  description: String
  ethosScore: Int
  ethosLevel: String
  ethosVerified: Boolean
  tradeSourceIds: [String!]
  identitySource: String
  identityUpdatedAt: Int
  polymarket: WalletPolymarketProfile
  tokensCreatedCount: Int
  tokensMigratedCount: Int
}

enum FeeMode {
  CREATOR_FEE
  CASHBACK
  HOLDER_REWARDS
}

type LaunchpadData {
  launchpadName: String
  graduationPercent: Float
  poolAddress: String
  completedAt: Int
  completed: Boolean
  completedSlot: Int
  migratedSlot: Int
  migratedAt: Int
  migrated: Boolean
  migratedPoolAddress: String
  launchpadProtocol: String
  launchpadIconUrl: String
  feeModes: [FeeMode!]
  holderRewardFeeBps: Int
  holderRewardQuoteMint: String
  category: String
}

type TokenExtrema {
  id: String!
  address: String!
  networkId: Int!
  athPrice: String!
  athPriceTimestamp: Int!
  atlPrice: String!
  atlPriceTimestamp: Int!
  athFdv: String!
  athFdvTimestamp: Int!
  atlFdv: String!
  atlFdvTimestamp: Int!
  athCircMc: String!
  athCircMcTimestamp: Int!
  atlCircMc: String!
  atlCircMcTimestamp: Int!
}

type CoinCommunity {
  id: String!
  createdAt: Int!
  postCount: Int!
  memberCount: Int!
  likeCount: Int!
  lastPostAt: Int
}

type Token2022ScaledUiAmountConfig {
  authority: String
  multiplier: Float!
  newMultiplierEffectiveTimestamp: String
  newMultiplier: Float
}

type Token2022TransferFee {
  epoch: String!
  transferFeeBasisPoints: Int!
  maximumFee: String!
}

type Token2022TransferFeeConfig {
  transferFeeConfigAuthority: String
  olderTransferFee: Token2022TransferFee!
  newerTransferFee: Token2022TransferFee!
}

type Token2022Extensions {
  scaledUiAmountConfig: Token2022ScaledUiAmountConfig
  transferFeeConfig: Token2022TransferFeeConfig
}

type B20Extensions {
  multiplier: String
  multiplierObservedAt: String
  pausedTransfer: Boolean
  pausedMint: Boolean
  pausedBurn: Boolean
  supplyCap: String
}

type RobinhoodStockTokenExtensions {
  uid: String!
  multiplier: String
  multiplierObservedAt: String
  newMultiplier: String
  newMultiplierEffectiveAt: String
  oraclePaused: Boolean
}

type XStockTokenExtensions {
  multiplier: String
  multiplierObservedAt: String
  newMultiplier: String
  newMultiplierEffectiveAt: String
}

type TokenExtensions {
  token2022: Token2022Extensions
  b20: B20Extensions
  robinhoodStockToken: RobinhoodStockTokenExtensions
  xStock: XStockTokenExtensions
}

type Erc7572CustomInfo {
  type: String!
  featuredImage: String
  collaborators: [String!]
}

enum CategoryType {
  CANONICAL
  NARRATIVE
}

enum CategoryStatus {
  DRAFT
  ACTIVE
  ARCHIVED
}

type Category {
  id: String!
  name: String!
  shortName: String
  slug: String!
  description: String
  type: CategoryType!
  status: CategoryStatus!
  parentId: String
  memberCount: Int
}

enum RiskVerdict {
  SCAM
  HIGH_RISK
  CAUTION
  NEUTRAL
  VERIFIED
  VERIFIED_CONTESTED
}

enum RiskAnalysisCoverage {
  NOT_ANALYZED
  INCONCLUSIVE
  ANALYZED
  STALE
}

enum RiskReasonCode {
  PROOF_HONEYPOT_SIM
  PROOF_NON_TRANSFERABLE
  PROOF_TRANSFER_FEE_100
  PROOF_DEFAULT_FROZEN
  PROOF_POOL_TRAP_SIM
  AUTH_MINT
  AUTH_FREEZE
  AUTH_PERMANENT_DELEGATE
  AUTH_TRANSFER_HOOK
  AUTH_PAUSABLE
  AUTH_OWNER_NOT_RENOUNCED
  AUTH_CAN_TRANSFER_OWNERSHIP
  TAX_BUY_HIGH
  TAX_SELL_HIGH
  TAX_HONEYPOT_UNCONFIRMED
  TAX_PAUSED
  TAX_POOL_TRAP
  TAX_POOL_TRAP_HOOK_SHARED
  LIQ_MINIMAL
  LIQ_UNKNOWN
  LIQ_RUG_CLIFF
  LIQ_UNLOCKED
  LIQ_DRAINING
  HOLD_TOP10_CONCENTRATED
  HOLD_DEV_HEAVY
  HOLD_SNIPER_HEAVY
  HOLD_BUNDLER_HEAVY
  HOLD_INSIDER_HEAVY
  HOLD_INSIDER_DUMPED
  FLOW_ONE_WAY
  FLOW_WALLET_FARM
  FLOW_WASH_DOMINATED
  FLOW_BUNDLED_LAUNCH
  FLOW_MECHANICAL_TRADING
  FLOW_RING_DOMINATED
  REP_SERIAL_RUGGER
  REP_RISKY_CREATOR
  REP_SCAMMER_FUNDED
  REP_IMITATOR_SYMBOL
  REP_IMITATOR_NAME
  REP_IMITATOR_IMAGE
  LABEL_MANUAL_SCAM
  LABEL_VERIFIED
}

type TokenRisk {
  verdict: RiskVerdict
  score: Float
  flaggedAt: Int
  analyzedAt: Int
  coverage: RiskAnalysisCoverage
  reasons: [RiskReasonCode!]
  buyTax: Float
  sellTax: Float
}

type TokenIssuer {
  id: String!
  displayName: String
}

type EnhancedToken {
  id: String!
  address: String!
  cmcId: Int
  decimals: Int!
  isScam: Boolean
  name: String
  networkId: Int!
  symbol: String
  socialLinks: SocialLinks
  info: TokenInfo
  gridAssetId: String
  bluechipRating: String
  organization: Organization
  asset: Asset
  exchanges: [Exchange!]
  creatorAddress: String
  creator: Wallet
  creatorBalanceNBT: String
  createBlockNumber: Int
  createTransactionHash: String
  createdAt: Int
  mintable: String
  freezable: String
  isFreezableValid: Boolean
  isMintableValid: Boolean
  launchpad: LaunchpadData
  top10HoldersPercent: Float
  profanity: Boolean
  extrema: TokenExtrema
  coinCommunity: CoinCommunity
  extensions: TokenExtensions
  tokenStandardCustomData: Erc7572CustomInfo
  categories: [Category!]
  risk: TokenRisk
  issuer: TokenIssuer
}

enum LaunchpadTokenEventType {
  Deployed
  Created
  Updated
  Completed
  Migrated
  UnconfirmedDeployed
  UnconfirmedMetadata
  UnconfirmedCompleted
}

type LaunchpadTokenEventOutput {
  address: String!
  networkId: Int!
  protocol: String!
  launchpadName: String!
  token: EnhancedToken!
  buyCount1: Int
  eventType: LaunchpadTokenEventType!
  holders: Int
  marketCap: String
  price: Float
  sellCount1: Int
  volume1: Int
  transactions1: Int
  liquidity: String
  poolFees1: String
  baseFees1: String
  priorityFees1: String
  builderTips1: String
  l1DataFees1: String
  totalFees1: String
  feeToVolumeRatio1: Float
  sniperCount: Float
  sniperHeldPercentage: Float
  bundlerCount: Float
  bundlerHeldPercentage: Float
  insiderCount: Float
  insiderHeldPercentage: Float
  suspiciousCount: Float
  suspiciousHeldPercentage: Float
  devHeldPercentage: Float
  top10HoldersPercent: Float
  devWallet: Wallet
}

enum LaunchpadTokenProtocol {
  Pump
  PumpMayhem
  FourMeme
  RaydiumLaunchpad
  BoopFun
  Vertigo
  Rainbow
  EgoTech
  ArenaTrade
  Moonit
  MeteoraDBC
  Baseapp
  BaseappCreator
  ZoraV4
  ZoraCreatorV4
  Virtuals
  Clanker
  HeavenAMM
  TokenMillV2
  TokenMillEVM
  ClankerV4
  Printr
  BonadFun
  NadFun
  Kumbaya
  Doppler
  Flaunch
  Liquid
}

input OnLaunchpadTokenEventBatchInput {
  protocol: LaunchpadTokenProtocol
  protocols: [LaunchpadTokenProtocol!]
  networkId: Int
  launchpadName: String
  launchpadNames: [String!]
  eventType: LaunchpadTokenEventType
}
```

> [!WARNING]
>
> Launchpad events are extremely high-frequency and will send a large number of requests. We offer a monthly flat-rate option with unlimited requests for this subscription. [Contact us](mailto:hello@codex.io?subject=Launchpad%20Events%20Subscription) for more information.

> [!NOTE]
>
> For monitoring pool graduations, use `Migrated` events instead of `Completed` events. While both event types are currently saved to our database, only `Migrated` events are actively emitted via subscriptions. The `Completed` event is a legacy state and will be deprecated in a future release.

You can find a complete list of supported launchpad protocols [here](https://docs.codex.io/api-reference/enums/launchpadtokenprotocol.md), and a list of filterable launchpad names [here](https://docs.codex.io/api-reference/input-objects/onlaunchpadtokeneventbatchinput.md). For more information on our Launchpad event subscriptions, see our [Launchpads recipe](https://docs.codex.io/recipes/launchpads.md) page.

### Example

[Test this query in the Explorer →](https://docs.codex.io/explore.md)

```graphql theme={null}
subscription {
  onLaunchpadTokenEventBatch(
    input: {
      protocol: Pump
      eventType: Created
    }
  ) {
    address
    networkId
    eventType
    launchpadName
    marketCap
    price
    liquidity
    holders
    volume1
    transactions1
    buyCount1
    sellCount1
    sniperCount
    sniperHeldPercentage
    devHeldPercentage
    token {
      name
      symbol
      info {
        imageThumbUrl
      }
    }
  }
}
```

```json Example Response theme={null}
{
  "data": {
    "onLaunchpadTokenEventBatch": [
      {
        "address": "AiXmBp6aV8RNpump1XnR2oPpdjHhfNcYRpump6gT2pump",
        "networkId": 1399811149,
        "eventType": "Created",
        "launchpadName": "Pump.fun",
        "marketCap": "6823.45",
        "price": 0.000006823,
        "liquidity": "4521.12",
        "holders": 42,
        "volume1": 1250,
        "transactions1": 18,
        "buyCount1": 12,
        "sellCount1": 6,
        "sniperCount": 2,
        "sniperHeldPercentage": 0.05,
        "devHeldPercentage": 0.02,
        "token": {
          "name": "Example Token",
          "symbol": "EXAMPLE",
          "info": {
            "imageThumbUrl": "https://example.com/image.png"
          }
        }
      }
    ]
  }
}
```

### Usage Guidelines

* This subscription is scoped to the launch lifecycle: events stream from token creation through the bonding curve, then for 6 hours post-migration (graduation). After that window, tokens age out of the stream — for continued coverage, hand off to the standard subscriptions (see below)
* Filter by `protocol` (e.g., `Pump`, `Clanker`, `Virtuals`) or `launchpadName` for more specific filtering
* Use `eventType` to subscribe to specific lifecycle events: `Created`, `Updated`, `Migrated`
* Events are batched for efficiency - each message may contain multiple token events
* Use `networkId` to filter by specific chain (e.g., 1399811149 for Solana, 8453 for Base)
* Monitor `sniperCount`, `bundlerCount`, `insiderCount`, and `suspiciousCount` to assess token quality. These count wallets still holding, so they fall as those wallets sell
* Use `devHeldPercentage` to check developer token holdings

### Troubleshooting Tips

> [accordion] What's the difference between eventType options?
>
> * `Deployed`: Token contract discovered on-chain
> * `Created`: Token has metadata populated
> * `Updated`: Token stats updated (price, volume, holders)
> * `Migrated`: Token graduated from bonding curve to DEX
> * `UnconfirmedDeployed`/`UnconfirmedMetadata`: Early events before finalization

> [accordion] Why use this instead of onLaunchpadTokenEvent?
>
> `onLaunchpadTokenEventBatch` batches multiple events per message, reducing WebSocket overhead. Use this for high-throughput applications monitoring many tokens.

> [accordion] Why do events stop 6 hours after a token migrates?
>
> The 6-hour window is by design. This subscription covers the launch lifecycle — creation, bonding curve progress, and graduation/migration. Once a token migrates there are no further launchpad lifecycle events for it, and keeping every graduated token in this high-volume stream would only duplicate data available from the standard subscriptions. In practice, most launchpad tokens see their activity die off within a few hours of migration, so 6 hours captures the volatile post-graduation period for nearly every token.
>
> For tokens that keep trading past that window, switch to the standard subscriptions: when you receive a `Migrated` event, subscribe to the token with [`onTokenEventsCreated`](https://docs.codex.io/api-reference/subscriptions/ontokeneventscreated) or [`onPriceUpdated`](https://docs.codex.io/api-reference/subscriptions/onpriceupdated) for continuous coverage with no gap.
>
> `onTokenEventsCreated` and `onPriceUpdated` do not carry `top10HoldersPercent` or `devHeldPercentage`. Read those from [`filterTokens`](https://docs.codex.io/api-reference/queries/filtertokens) or [`onFilterTokensUpdated`](https://docs.codex.io/api-reference/subscriptions/onfiltertokensupdated).

> [accordion] How do I monitor token graduations?
>
> Subscribe to `eventType: Migrated` to receive events when tokens graduate from bonding curves to DEX pools. This is the recommended approach over `Completed` events.

> [accordion] What do sniperCount, bundlerCount, and insiderCount indicate?
>
> All three are labels applied per token to wallets that bought or received it around launch, and each count is the number of labelled wallets that still hold the token. `sniperCount` is wallets that bought within the first 5 seconds of trading. `bundlerCount` is wallets that were part of a group of 4 or more buying in the same block on the launchpad pool before graduation. `insiderCount` is wallets with a provable link to the creator, such as being funded by or receiving tokens directly from the creator wallet. `suspiciousCount` is the deduplicated union of the three. The matching `*HeldPercentage` fields report the share of total supply those wallets hold now, so all of these numbers fall as the wallets sell. The full rules are in [Discover tokens](https://docs.codex.io/recipes/discover-tokens.md#snipers-bundlers-and-insiders).

> [accordion] `Created` events have a 3-4s delay. Is there a faster way to see newly launched tokens?
>
> Use `eventType: Deployed` instead for faster updates. The two events are:
>
> * **`Deployed`** — sent immediately when the token contract is discovered (minimal latency). Includes fundamentals but may lack metadata like images.
> * **`Created`** — sent after metadata is fetched (3-4s latency). Includes complete token information.
>
> For the fastest results, subscribe to both and resolve the models on the frontend: use `Deployed` for immediate notification and `Created` to fill in metadata when it arrives. We have plans to reduce `Created` latency further (especially on Solana) while keeping the same `Deployed` → `Created` flow.

### Related Recipes

* [Launchpads](https://docs.codex.io/recipes/launchpads.md): Build a launchpad discovery view with real-time token lifecycle updates
* [Launchpad Lifecycle](https://docs.codex.io/recipes/launchpad-lifecycle.md): Understand how tokens progress through launchpad stages from bonding curve to graduation


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.