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

# Discovery boards

> Rank launchpad tokens by launch stage, across one or more chains, in a single request.

One request names the chains and the columns it wants. Each column is ranked and filtered on its own, and answers with its whole ranked set.

## Columns

Each column is one stage of a token's launchpad life; see [launchpad terms](/resources/glossary#launchpad-terms).

| Column | Holds | Default ranking |
| - | - | - |
| `newPairs` | Launchpad tokens below 40% of their bonding curve | `createdAt`, newest first |
| `graduating` | Launchpad tokens at 40% of their curve or more, not yet graduated | `bondingCurveActivity`, highest first |
| `graduated` | Launchpad tokens that have graduated, or that have no curve reading | `graduatedAt`, newest first |

## Body

Name at least one chain and at least one column. A repeated chain slug is read once, and every column ranks tokens from all the named chains as one set.

Leave a column out to skip it, and send `{}` to take its defaults. Inside a column, `sortBy` names the [field to rank on](#sort-fields), `order` is `desc` or `asc`, a `limit` outside 1 to 100 is moved into that range rather than refused, and `filters` adds conditions on top of the [column defaults](#column-defaults).

## Column defaults

Every column applies conditions of its own, on top of your filters:

* **Every column** leaves out tokens with no update in the last 24 hours.
* **`graduating` and `graduated`** keep only tokens with at least 10 holders, $1,000 of liquidity and a $5,000 market cap.
* **`graduating`** also leaves out tokens with no update in the last 60 minutes, unless they are at 99.5% of their curve or more.

Your filters can tighten these conditions but not loosen them. A `holderCount` minimum below 10 on `graduated`, for example, is raised to 10, and a `maxGraduationStaleMinutes` above 60 on `graduating` is lowered to 60.

## Sort fields

| `sortBy` | Ranks on |
| - | - |
| `createdAt` | Token creation time |
| `volume24hUsd` | USD volume over the last 24 hours |
| `marketCapUsd` | USD market cap |
| `liquidityUsd` | USD liquidity |
| `holdersCount` | Current holders |
| `tradeCount24h` | Buys plus sells over the last 24 hours |
| `bondingCurvePct` | Bonding-curve completion. On `graduating`, this ranks on `bondingCurveActivity` instead. |
| `bondingCurveActivity` | Curve completion weighted by the last hour's volume: `bondingCurvePct` multiplied by `ln(1 + stats["1h"].volume.usd)` |
| `graduatedAt` | Graduation time |

Tokens with equal values keep a fixed order.

## Filters

A token must meet every filter you send, as well as the [column defaults](#column-defaults). The schema below names each filter; these rules hold across all of them.

<Warning>
  The API ignores a filter name it does not know, rather than refusing it. Check spellings: the sort field is `holdersCount`, but the filter is `holderCount`.
</Warning>

* **Ranges** are `{ "min": …, "max": … }`. Both bounds are inclusive, and either can be left out. A `min` above `max` returns `400 VALIDATION_ERROR`. Each bound takes the type of the field it bounds: decimal strings for USD values, numbers for counts and percentages.
* **Lists** are unions: a token passes when it matches any entry. `symbolOrName` and `excludeSymbolOrName` match the symbol or the name, ignoring case, and a word that looks like an address matches the token's address exactly instead.
* **`withAtLeastOneSocial`** keeps tokens that carry at least one social link. It is the only switch, and `false` applies no condition.
* **Time limits** are `lastActivityMinutes`, which keeps tokens updated within that many minutes, and `maxGraduationStaleMinutes`, which drops tokens with no update within that many minutes unless they are at 99.5% of their curve or more. `maxGraduationStaleMinutes` applies on any column, and `graduating` caps it at 60. An update is any change to a token's record, such as a trade, not only curve progress.

<Note>
  `twitterReuseCount` is accepted but not yet applied: every token passes it.
</Note>

## Response

`columns` holds one entry per requested column, in the order `newPairs`, `graduating`, `graduated`. Each entry's `deltas` is the whole ranked column, one item per rank from 1, and each item's `data` is the same token object [Token details](/reference/rest/token-details) returns.

## Errors

| Code | When |
| - | - |
| `UNSUPPORTED_CHAIN` | A slug in `chains` is not supported |
| `VALIDATION_ERROR` | No chain or no column requested, a range whose `min` is above its `max`, or a malformed body |

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.metastreams.io/v1/discovery" \
    -H "Authorization: Bearer $API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "chains": ["solana", "base"],
      "graduating": {
        "sortBy": "volume24hUsd",
        "limit": 20,
        "filters": { "liquidityUsd": { "min": "20000" }, "holderCount": { "min": 500 } }
      }
    }'
  ```

  ```typescript TypeScript theme={null}
  const response = await fetch("https://api.metastreams.io/v1/discovery", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      chains: ["solana", "base"],
      graduating: { sortBy: "volume24hUsd", limit: 20 },
    }),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
  const { columns } = await response.json();
  ```
</RequestExample>

<ResponseExample>
  ```json Shortened theme={null}
  {
    "columns": [
      {
        "column": "graduating",
        "deltas": [
          {
            "chain": "solana",
            "address": "TokenMint1111111111111111111111111111111pump",
            "rank": 1,
            "data": {
              "chain": "solana",
              "address": "TokenMint1111111111111111111111111111111pump",
              "name": "Example",
              "symbol": "EXAMPLE",
              "decimals": 6,
              "price": { "native": "0.00000042", "usd": "0.000075" },
              "marketCap": { "native": "420.5", "usd": "75000" },
              "liquidity": { "native": "128.4", "usd": "22900" },
              "bondingCurvePct": "91.4",
              "updatedAt": 1789632012345
            }
          }
        ]
      }
    ]
  }
  ```
</ResponseExample>


## OpenAPI

````yaml specs/openapi.json POST /v1/discovery
openapi: 3.1.0
info:
  title: Metastreams API
  description: >-
    Click's B2B market-data API. Amounts are decimal strings, timestamps are
    Unix milliseconds, and every field name is camelCase.
  license:
    name: Proprietary
    identifier: Proprietary
  version: 1.0.0
servers:
  - url: https://{host}
    variables:
      host:
        default: api.metastreams.io
        description: API host.
security:
  - bearerKey: []
paths:
  /v1/discovery:
    post:
      tags:
        - discovery
      summary: The discovery boards.
      description: |-
        One request names the chains and the columns it wants. Each column is
        ranked and filtered on its own, and answers with its whole ranked set.
      operationId: discovery_board
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SpotPulseSubscriptionConfig'
        required: true
      responses:
        '200':
          description: One snapshot per requested column, in page order.
          headers:
            X-Credits-Cost:
              schema:
                type: integer
              description: >-
                Credits charged for this request. Zero on any non-2xx. Sent on a
                metered tier only.
            X-Credits-Remaining:
              schema:
                type: integer
              description: Credit balance after this request. Sent on a metered tier only.
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current rate-limit window.
            X-Request-ID:
              schema:
                type: string
              description: >-
                This request's trace ID. Echoed from the request, or generated
                when it sent none.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UiSpotPulseResponse'
        '400':
          description: >-
            Unsupported chain, no chain or column requested, or a malformed
            body.
          headers:
            X-Credits-Cost:
              schema:
                type: integer
              description: >-
                Credits charged for this request. Zero on any non-2xx. Sent on a
                metered tier only.
            X-Credits-Remaining:
              schema:
                type: integer
              description: Credit balance after this request. Sent on a metered tier only.
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current rate-limit window.
            X-Request-ID:
              schema:
                type: string
              description: >-
                This request's trace ID. Echoed from the request, or generated
                when it sent none.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Missing or invalid API key.
          headers:
            X-Credits-Cost:
              schema:
                type: integer
              description: >-
                Credits charged for this request. Zero on any non-2xx. Sent on a
                metered tier only.
            X-Credits-Remaining:
              schema:
                type: integer
              description: Credit balance after this request. Sent on a metered tier only.
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current rate-limit window.
            X-Request-ID:
              schema:
                type: string
              description: >-
                This request's trace ID. Echoed from the request, or generated
                when it sent none.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limit exceeded.
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds to wait before retrying.
            X-Credits-Cost:
              schema:
                type: integer
              description: >-
                Credits charged for this request. Zero on any non-2xx. Sent on a
                metered tier only.
            X-Credits-Remaining:
              schema:
                type: integer
              description: Credit balance after this request. Sent on a metered tier only.
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current rate-limit window.
            X-Request-ID:
              schema:
                type: string
              description: >-
                This request's trace ID. Echoed from the request, or generated
                when it sent none.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Unexpected server failure.
          headers:
            X-Credits-Cost:
              schema:
                type: integer
              description: >-
                Credits charged for this request. Zero on any non-2xx. Sent on a
                metered tier only.
            X-Credits-Remaining:
              schema:
                type: integer
              description: Credit balance after this request. Sent on a metered tier only.
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current rate-limit window.
            X-Request-ID:
              schema:
                type: string
              description: >-
                This request's trace ID. Echoed from the request, or generated
                when it sent none.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '503':
          description: Dependency down or maintenance.
          headers:
            X-Credits-Cost:
              schema:
                type: integer
              description: >-
                Credits charged for this request. Zero on any non-2xx. Sent on a
                metered tier only.
            X-Credits-Remaining:
              schema:
                type: integer
              description: Credit balance after this request. Sent on a metered tier only.
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current rate-limit window.
            X-Request-ID:
              schema:
                type: string
              description: >-
                This request's trace ID. Echoed from the request, or generated
                when it sent none.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
components:
  schemas:
    SpotPulseSubscriptionConfig:
      type: object
      description: 'A discovery request: one or more chains, up to three columns.'
      required:
        - chains
      properties:
        chains:
          type: array
          items:
            $ref: '#/components/schemas/SpotChain'
          description: Chains every column ranks over, as one mixed set.
        graduated:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SpotPulseColumnConfig'
              description: Graduated column; omitted means not requested.
          description: Graduated column; omitted means not requested.
        graduating:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SpotPulseColumnConfig'
              description: Graduating column; omitted means not requested.
          description: Graduating column; omitted means not requested.
        newPairs:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SpotPulseColumnConfig'
              description: New-pairs column; omitted means not requested.
          description: New-pairs column; omitted means not requested.
    UiSpotPulseResponse:
      type: object
      description: >-
        `POST /v1/discovery` response: one snapshot per requested column, in
        page order.
      required:
        - columns
      properties:
        columns:
          type: array
          items:
            $ref: '#/components/schemas/UiSpotPulseUpdate'
          description: The requested columns' snapshots.
    ErrorEnvelope:
      type: object
      description: The complete error response body — every error is exactly this.
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
          description: The error.
    SpotChain:
      type: string
      description: >-
        Chain slug. One spelling per chain, in paths and bodies alike. Only a
        chain with spot data is published.
      enum:
        - solana
        - base
        - bsc
        - robinhood
        - arc
    SpotPulseColumnConfig:
      type: object
      description: How one discovery column is ranked and filtered.
      properties:
        filters:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DiscoveryTokenFilters'
              description: Filters over the column, before the stage floors merge in.
          description: Filters over the column, before the stage floors merge in.
        limit:
          type:
            - integer
            - 'null'
          format: int32
          description: Ranked-set size, clamped to 1-100; 20 when absent.
          minimum: 0
        order:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SortOrder'
              description: Rank direction; descending when absent.
          description: Rank direction; descending when absent.
        sortBy:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DiscoverySortField'
              description: Field to rank on; the column's default when absent.
          description: Field to rank on; the column's default when absent.
    UiSpotPulseUpdate:
      type: object
      description: One column's ranked tokens.
      required:
        - column
        - deltas
      properties:
        column:
          $ref: '#/components/schemas/PulseColumn'
          description: Column these deltas apply to.
        deltas:
          type: array
          items:
            $ref: '#/components/schemas/UiSpotPulseDelta'
          description: The whole column, one entry per rank.
    ErrorDetail:
      type: object
      description: The `error` object inside the envelope.
      required:
        - code
        - message
      properties:
        code:
          $ref: '#/components/schemas/ErrorCode'
          description: >-
            Stable, machine-readable. Clients switch on this, never on
            `message`.
        details:
          description: Optional; shape is fixed per code.
        message:
          type: string
          description: |-
            Human-readable, written for the integrating developer:
            `[What happened]. [What to do next — if actionable].`
    DiscoveryTokenFilters:
      type: object
      description: >-
        Filters over a discovery column. Every range is inclusive on both ends,
        and an absent bound is unbounded.
      properties:
        ageMinutes:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_u64'
              description: Minutes since the token was created.
          description: Minutes since the token was created.
        anchorSymbols:
          type:
            - array
            - 'null'
          items:
            type: string
          description: >-
            Keep tokens whose deepest pool prices against any of these quote
            assets, such as `WSOL`, `USDC` or `WBNB`.
        bondingCurvePercent:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_f64'
              description: Bonding-curve completion, 0-100.
          description: Bonding-curve completion, 0-100.
        buys:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_u64'
              description: Buys over the last 24 hours.
          description: Buys over the last 24 hours.
        devHoldingPercent:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_f64'
              description: Share of supply the creator holds, 0-100.
          description: Share of supply the creator holds, 0-100.
        excludeDevAddresses:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Drop tokens created by any of these wallets.
        excludeFundingAddresses:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Drop tokens whose creator was funded by any of these wallets.
        excludeSymbolOrName:
          type:
            - array
            - 'null'
          items:
            type: string
          description: >-
            Drop tokens whose symbol or name contains any of these words,
            ignoring case.
        excludeTwitter:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Drop tokens whose X handle matches any entry, as a handle or a URL.
        excludeWebsites:
          type:
            - array
            - 'null'
          items:
            type: string
          description: >-
            Drop tokens whose website host matches any entry, as a URL or a bare
            domain.
        globalFeesPaidUsd:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_Decimal'
              description: All-time USD fees traders paid to pools and launchpads.
          description: All-time USD fees traders paid to pools and launchpads.
        holderCount:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_u64'
              description: Current holders.
          description: Current holders.
        lastActivityMinutes:
          type:
            - integer
            - 'null'
          format: int64
          description: Keep tokens updated within this many minutes.
          minimum: 0
        liquidityUsd:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_Decimal'
              description: USD liquidity.
          description: USD liquidity.
        marketCapUsd:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_Decimal'
              description: USD market cap.
          description: USD market cap.
        maxGraduationStaleMinutes:
          type:
            - integer
            - 'null'
          format: int32
          description: >-
            Drop tokens with no update within this many minutes, unless they are
            at 99.5% of their curve or more.
          minimum: 0
        protocols:
          type:
            - array
            - 'null'
          items:
            type: string
          description: >-
            Keep tokens from any of these launchpads, such as `pumpfun`. The
            value `mayhem_mode` keeps Pump.fun Mayhem Mode tokens.
        sells:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_u64'
              description: Sells over the last 24 hours.
          description: Sells over the last 24 hours.
        snipersSupplyPercent:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_f64'
              description: Share of supply sniper wallets hold, 0-100.
          description: Share of supply sniper wallets hold, 0-100.
        symbolOrName:
          type:
            - array
            - 'null'
          items:
            type: string
          description: >-
            Keep tokens whose symbol or name contains any of these words,
            ignoring case. A word shaped like an address matches the token's
            address exactly instead.
        top10HoldersPercent:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_f64'
              description: Share of supply the 10 largest holders hold, 0-100.
          description: Share of supply the 10 largest holders hold, 0-100.
        twitterReuseCount:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_u64'
              description: >-
                Filter by how many times the Twitter account has been reused.
                Not yet counted, so every token passes.
          description: >-
            Filter by how many times the Twitter account has been reused. Not
            yet counted, so every token passes.
        txns:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_u64'
              description: Buys plus sells over the last 24 hours.
          description: Buys plus sells over the last 24 hours.
        volumeUsd:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FilterRange_Decimal'
              description: USD volume over the last 24 hours.
          description: USD volume over the last 24 hours.
        withAtLeastOneSocial:
          type:
            - boolean
            - 'null'
          description: '`true` keeps tokens with at least one social link.'
    SortOrder:
      type: string
      description: Rank direction; descending when absent.
      enum:
        - asc
        - desc
    DiscoverySortField:
      type: string
      description: The field a discovery column ranks on.
      enum:
        - createdAt
        - volume24hUsd
        - marketCapUsd
        - liquidityUsd
        - holdersCount
        - tradeCount24h
        - bondingCurvePct
        - bondingCurveActivity
        - graduatedAt
    PulseColumn:
      type: string
      description: One of the three discovery columns.
      enum:
        - newPairs
        - graduating
        - graduated
    UiSpotPulseDelta:
      type: object
      description: One token's place within a column.
      required:
        - chain
        - address
      properties:
        address:
          type: string
          description: Token address.
        chain:
          $ref: '#/components/schemas/SpotChain'
          description: Chain the token trades on; with `address` it keys the row.
        data:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/UiSpotToken'
              description: Token state; absent on eviction.
          description: Token state; absent on eviction.
        rank:
          type:
            - integer
            - 'null'
          format: int32
          description: 1-indexed rank; `null` drops the token out of the column.
          minimum: 0
    ErrorCode:
      type: string
      description: |-
        Every wire error code the API can return.

        Append-only: a new code is non-breaking, since clients fall back on the
        HTTP status for one they do not recognize, and a published code is never
        renamed or removed.
      enum:
        - UNAUTHORIZED
        - FORBIDDEN
        - VALIDATION_ERROR
        - UNSUPPORTED_CHAIN
        - NOT_FOUND
        - RATE_LIMITED
        - CREDITS_EXHAUSTED
        - INTERNAL_ERROR
        - SERVICE_UNAVAILABLE
    FilterRange_u64:
      type: object
      description: An inclusive range of counts; an absent bound is unbounded.
      properties:
        max:
          type: integer
          format: int64
          description: Largest value kept, inclusive; absent means unbounded.
          minimum: 0
        min:
          type: integer
          format: int64
          description: Smallest value kept, inclusive; absent means unbounded.
          minimum: 0
    FilterRange_f64:
      type: object
      description: An inclusive range of numbers; an absent bound is unbounded.
      properties:
        max:
          type: number
          format: double
          description: Largest value kept, inclusive; absent means unbounded.
        min:
          type: number
          format: double
          description: Smallest value kept, inclusive; absent means unbounded.
    FilterRange_Decimal:
      type: object
      description: An inclusive range of decimal strings; an absent bound is unbounded.
      properties:
        max:
          type: string
          format: decimal
          description: Largest value kept, inclusive; absent means unbounded.
          example: '123.456789'
        min:
          type: string
          format: decimal
          description: Smallest value kept, inclusive; absent means unbounded.
          example: '123.456789'
    UiSpotToken:
      type: object
      description: '`GET /v1/tokens/{chain}/{address}` response.'
      required:
        - chain
        - address
        - name
        - symbol
        - decimals
        - supply
        - creator
        - devFunding
        - createdAt
        - dexes
        - price
        - marketCap
        - liquidity
        - ath
        - stats
        - totals
        - holders
        - security
        - metadata
        - updatedAt
      properties:
        address:
          type: string
          description: Token address.
        anchorAddress:
          type:
            - string
            - 'null'
          description: >-
            Address of the quote asset in the token's deepest pool; `null` where
            it is not known.
        anchorSymbol:
          type:
            - string
            - 'null'
          description: Display symbol of that quote asset, on `anchorAddress`'s terms.
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/TokenAnnotation'
          description: Platform-scoped quirk flags the launch carried.
          example:
            - kind: mayhem_mode
        ath:
          $ref: '#/components/schemas/UiTokenAth'
          description: All-time-high price and market cap.
        bondingCurvePct:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/Decimal'
              description: Bonding-curve completion, 0-100; `null` off launchpad curves.
          description: Bonding-curve completion, 0-100; `null` off launchpad curves.
        chain:
          $ref: '#/components/schemas/SpotChain'
          description: Chain the token trades on.
        createdAt:
          $ref: '#/components/schemas/UnixMilliseconds'
          description: Creation timestamp.
        creator:
          type: string
          description: Creator address.
        decimals:
          type: integer
          format: int32
          description: Token decimals.
          minimum: 0
        devFunding:
          $ref: '#/components/schemas/UiDevFunding'
          description: >-
            The creator wallet's first inbound funding. Always present; its
            status says whether the

            lookup has settled.
        dexes:
          type: array
          items:
            type: string
          description: Venues the token's top pools trade on, deepest first.
          example:
            - pumpswap
            - raydium
        graduatedAt:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/UnixMilliseconds'
              description: >-
                When the token graduated off its launchpad; `null` until
                graduation.
          description: When the token graduated off its launchpad; `null` until graduation.
        graduatedToDex:
          type:
            - string
            - 'null'
          description: Venue the graduation pool trades on; `null` until graduation.
        graduatedToPool:
          type:
            - string
            - 'null'
          description: Pool the launchpad pool migrated into; `null` until graduation.
        holders:
          $ref: '#/components/schemas/UiTokenHolders'
          description: Holder-risk breakdown.
        launchpad:
          type:
            - string
            - 'null'
          description: >-
            Launchpad the token launched through; `null` for non-launchpad
            tokens.
        liquidity:
          $ref: '#/components/schemas/UiMoney'
          description: Current liquidity.
        marketCap:
          $ref: '#/components/schemas/UiMoney'
          description: Current market cap.
        metadata:
          $ref: '#/components/schemas/UiTokenMetadata'
          description: Off-chain project metadata.
        name:
          type: string
          description: Token name.
        platforms:
          type: array
          items:
            $ref: '#/components/schemas/UiPlatform'
          description: The token's external-platform listings.
        price:
          $ref: '#/components/schemas/UiMoney'
          description: Current price.
        security:
          $ref: '#/components/schemas/UiTokenSecurity'
          description: On-chain security flags.
        stats:
          $ref: '#/components/schemas/UiTokenStats'
          description: Trailing-window stats, one key per rolling window.
        supply:
          $ref: '#/components/schemas/Decimal'
          description: Total supply.
        symbol:
          type: string
          description: Token symbol.
        totals:
          $ref: '#/components/schemas/UiTokenTotals'
          description: All-time volume and fee totals.
        updatedAt:
          $ref: '#/components/schemas/UnixMilliseconds'
          description: Last update timestamp.
    TokenAnnotation:
      oneOf:
        - type: object
          required:
            - kind
          properties:
            kind:
              type: string
              enum:
                - mayhem_mode
        - type: object
          required:
            - kind
          properties:
            kind:
              type: string
              enum:
                - cashback_coin
        - type: object
          required:
            - kind
          properties:
            kind:
              type: string
              enum:
                - anchor
        - type: object
          required:
            - kind
          properties:
            kind:
              type: string
              enum:
                - x_mode
      description: A platform-scoped flag the launch carried, tagged by `kind`.
    UiTokenAth:
      type: object
      description: All-time-high price and market cap, each with the timestamp it was set.
      required:
        - price
        - priceAt
        - marketCap
        - marketCapAt
      properties:
        marketCap:
          $ref: '#/components/schemas/UiMoney'
          description: All-time-high market cap.
        marketCapAt:
          $ref: '#/components/schemas/UnixMilliseconds'
          description: When the all-time-high market cap was set.
        price:
          $ref: '#/components/schemas/UiMoney'
          description: All-time-high price.
        priceAt:
          $ref: '#/components/schemas/UnixMilliseconds'
          description: When the all-time-high price was set.
    Decimal:
      type: string
      format: decimal
      description: An exact decimal, as a string.
      example: '123.456789'
    UnixMilliseconds:
      type: integer
      format: int64
      description: An instant, as milliseconds since the Unix epoch.
    UiDevFunding:
      type: object
      description: >-
        The creator wallet's first inbound funding.


        `status` separates a lookup still in flight from one that settled on a
        wallet with no

        funder to name. Every other field is `null` in both cases.
      required:
        - status
      properties:
        address:
          type:
            - string
            - 'null'
          description: Funder wallet or exchange address.
        sourceKind:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FundingSourceKind'
              description: What the funder is (exchange, bridge, wallet, …).
          description: What the funder is (exchange, bridge, wallet, …).
        sourceLabel:
          type:
            - string
            - 'null'
          description: Display label for the funder, e.g. an exchange name.
        status:
          $ref: '#/components/schemas/FundingStatus'
          description: Whether the lookup has settled.
    UiTokenHolders:
      type: object
      description: Holder-risk breakdown. Every `*Pct` field is a percent.
      required:
        - count
        - top10Pct
        - devPct
        - sniperPct
        - sniperCount
        - bundlerPct
        - bundlerCount
        - insiderPct
        - insiderCount
        - phishingPct
        - phishingCount
        - freshWalletPct
        - freshWalletCount
        - fomoPct
        - fomoCount
        - proTraderPct
        - proTraderCount
        - fundedByCexPct
      properties:
        bundlerCount:
          type: integer
          format: int64
          description: Bundler wallet count.
          minimum: 0
        bundlerPct:
          $ref: '#/components/schemas/Decimal'
          description: Bundler wallets' share of supply.
        count:
          type: integer
          format: int64
          description: Current holder count.
          minimum: 0
        devPct:
          $ref: '#/components/schemas/Decimal'
          description: Dev wallet's share of supply.
        fomoCount:
          type: integer
          format: int64
          description: fomo.family wallet count.
          minimum: 0
        fomoPct:
          $ref: '#/components/schemas/Decimal'
          description: fomo.family wallets' share of supply.
        freshWalletCount:
          type: integer
          format: int64
          description: Fresh wallet count.
          minimum: 0
        freshWalletPct:
          $ref: '#/components/schemas/Decimal'
          description: Fresh-wallet share of supply.
        fundedByCexPct:
          $ref: '#/components/schemas/Decimal'
          description: >-
            Share of current holders a known exchange funded, 0-100. Counted
            against every holder,

            so a token with funding lookups still in flight reads low rather
            than absent.
        insiderCount:
          type: integer
          format: int64
          description: Insider wallet count.
          minimum: 0
        insiderPct:
          $ref: '#/components/schemas/Decimal'
          description: Insider wallets' share of supply.
        phishingCount:
          type: integer
          format: int64
          description: >-
            Wallets that ever traded this token while carrying a malicious-actor
            label. The count

            never falls, unlike `phishingPct`.
          minimum: 0
        phishingPct:
          $ref: '#/components/schemas/Decimal'
          description: Phishing wallets' share of supply.
        proTraderCount:
          type: integer
          format: int64
          description: Pro-trader wallet count.
          minimum: 0
        proTraderPct:
          $ref: '#/components/schemas/Decimal'
          description: Pro-trader wallets' share of supply.
        sniperCount:
          type: integer
          format: int64
          description: Sniper wallet count.
          minimum: 0
        sniperPct:
          $ref: '#/components/schemas/Decimal'
          description: Sniper wallets' share of supply.
        top10Pct:
          $ref: '#/components/schemas/Decimal'
          description: Share of supply held by the top 10 current holders.
    UiMoney:
      type: object
      description: >-
        A chain-denominated value with its USD equivalent. The enclosing object
        carries the

        `chain` that names `native`'s unit.
      required:
        - native
      properties:
        native:
          $ref: '#/components/schemas/Decimal'
          description: Value in the owning chain's gas asset.
        usd:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/Decimal'
              description: Value in USD; `null` when the native asset is unpriced.
          description: Value in USD; `null` when the native asset is unpriced.
    UiTokenMetadata:
      type: object
      description: Off-chain project metadata; every field nullable.
      required:
        - twitterReuseCount
      properties:
        description:
          type:
            - string
            - 'null'
          description: Project description.
        discord:
          type:
            - string
            - 'null'
          description: Project Discord invite URL.
        telegram:
          type:
            - string
            - 'null'
          description: Project Telegram handle or URL.
        twitter:
          type:
            - string
            - 'null'
          description: Project Twitter/X handle or URL.
        twitterReuseCount:
          type: integer
          format: int64
          description: >-
            How many other tokens have claimed the same Twitter/X account. Above
            zero, the handle

            is recycled, which is the scam signal it exists to carry.
          minimum: 0
        website:
          type:
            - string
            - 'null'
          description: Project website.
    UiPlatform:
      oneOf:
        - type: object
          description: >-
            fomo.family, the terminal that routed the trade. The trader's
            profile is the `fomoscan`

            element of `identities`.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - fomo
        - type: object
          description: >-
            A token's DexScreener listing; present only while its profile is
            paid.
          required:
            - isPaid
            - platform
          properties:
            isPaid:
              type: boolean
              description: Whether the token's DexScreener profile is paid.
            paidAt:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/UnixMilliseconds'
                  description: Earliest profile payment time.
            platform:
              type: string
              enum:
                - dexScreener
        - type: object
          description: Axiom.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - axiom
        - type: object
          description: '"Banana Gun".'
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - bananaGun
        - type: object
          description: Bloom.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - bloom
        - type: object
          description: '"BONKbot".'
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - bonkbot
        - type: object
          description: BtcTurk.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - btcTurk
        - type: object
          description: BullX.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - bullX
        - type: object
          description: Click's own router, identified by its fee vault.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - click
        - type: object
          description: '"GMGN".'
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - gmgn
        - type: object
          description: '"Lucky Block".'
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - luckyBlock
        - type: object
          description: Maestro.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - maestro
        - type: object
          description: '"Manifold Trading".'
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - manifoldTrading
        - type: object
          description: '"MEVX".'
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - mevx
        - type: object
          description: Mintech.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - mintech
        - type: object
          description: Nighthawk.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - nighthawk
        - type: object
          description: Nova.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - nova
        - type: object
          description: '"OX.FUN".'
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - oxFun
        - type: object
          description: Padre.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - padre
        - type: object
          description: PepeBoost.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - pepeBoost
        - type: object
          description: Phantom.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - phantom
        - type: object
          description: Photon.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - photon
        - type: object
          description: SexBotSolana.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - sexBotSolana
        - type: object
          description: Shuriken.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - shuriken
        - type: object
          description: '"SOL Sniper Bot".'
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - solSniperBot
        - type: object
          description: '"Sol Trading Bot".'
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - solTradingBot
        - type: object
          description: Trojan.
          required:
            - platform
          properties:
            platform:
              type: string
              enum:
                - trojan
      description: >-
        A platform attached to a token, a wallet, or a trade.


        The fieldless variants are trading terminals. Each doc gives the
        producer string its

        variant maps from.
    UiTokenSecurity:
      type: object
      description: >-
        Contract-security flags. Solana reads them on-chain; a contract scan
        reads them on the EVM

        chains.
      required:
        - mintDisabled
        - transferBlockable
        - rugPct
      properties:
        lpBurntPct:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/Decimal'
              description: LP permanently unavailable (burnt + locked), 0-100.
          description: LP permanently unavailable (burnt + locked), 0-100.
        mintDisabled:
          type: boolean
          description: Mint authority revoked.
        rugPct:
          $ref: '#/components/schemas/Decimal'
          description: Share of supply held by wallets scored as rug risks, 0-100.
        transferBlockable:
          type: boolean
          description: Freeze authority present.
        transferFeeBps:
          type:
            - integer
            - 'null'
          format: int32
          description: >-
            Transfer fee the token's own contract charges, in basis points —
            `250` is 2.50%.

            `null` when no source has scored the contract.
          example: 250
          minimum: 0
    UiTokenStats:
      type: object
      description: Trade stats over a trailing window that ends now, not a calendar bucket.
      required:
        - 5m
        - 30m
        - 1h
        - 6h
        - 24h
      properties:
        1h:
          $ref: '#/components/schemas/UiTokenWindowStats'
          description: Trailing 1 hour.
        24h:
          $ref: '#/components/schemas/UiTokenWindowStats'
          description: Trailing 24 hours.
        30m:
          $ref: '#/components/schemas/UiTokenWindowStats'
          description: Trailing 30 minutes.
        5m:
          $ref: '#/components/schemas/UiTokenWindowStats'
          description: Trailing 5 minutes.
        6h:
          $ref: '#/components/schemas/UiTokenWindowStats'
          description: Trailing 6 hours.
    UiTokenTotals:
      type: object
      description: All-time trade volume and fee totals.
      required:
        - volume
        - fees
      properties:
        fees:
          $ref: '#/components/schemas/UiTokenFees'
          description: All-time fee totals by kind.
        volume:
          $ref: '#/components/schemas/UiMoney'
          description: All-time trade volume.
    FundingSourceKind:
      type: string
      description: Whether a known exchange or another wallet funded the creator.
      enum:
        - cex
        - wallet
    FundingStatus:
      type: string
      description: Whether the creator wallet's funding lookup has settled.
      enum:
        - unresolved
        - resolved
    UiTokenWindowStats:
      type: object
      description: Trade activity over one trailing window.
      required:
        - priceChangePct
        - volume
        - buyCount
        - sellCount
        - buyVolume
        - sellVolume
      properties:
        buyCount:
          type: integer
          format: int64
          description: Buy-side trade count.
          minimum: 0
        buyVolume:
          $ref: '#/components/schemas/UiMoney'
          description: Buy-side volume.
        priceChangePct:
          $ref: '#/components/schemas/Decimal'
          description: Price change over the window, percent.
        sellCount:
          type: integer
          format: int64
          description: Sell-side trade count.
          minimum: 0
        sellVolume:
          $ref: '#/components/schemas/UiMoney'
          description: Sell-side volume.
        volume:
          $ref: '#/components/schemas/UiMoney'
          description: Trade volume over the window.
    UiTokenFees:
      type: object
      description: All-time fee totals by kind.
      required:
        - transaction
        - validator
        - platform
      properties:
        dex:
          $ref: '#/components/schemas/UiMoney'
          description: 'Venue fees: what traders paid the pools and launchpads.'
        platform:
          $ref: '#/components/schemas/UiMoney'
          description: Platform fees.
        transaction:
          $ref: '#/components/schemas/UiMoney'
          description: >-
            Transaction fees. On Solana this leg also holds the venue fee for
            trades predating the

            split, so the legs are a mixed basis and must not be summed.
        validator:
          $ref: '#/components/schemas/UiMoney'
          description: Validator fees.
  securitySchemes:
    bearerKey:
      type: http
      scheme: bearer
      description: 'Send the API key as `Authorization: Bearer <key>`.'

````

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