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

# Native token holders

> Native owner bank with immutable cursor-bound pages. LP/system owners excluded by default. Page size does not imply full population coverage. Reuse all original parameters with nextCursor; restart on 409. Identity/PnL enrichment remains additive.



## OpenAPI

````yaml https://www.oceanx.trade/api/v1/openapi.json get /api/v1/tokens/{chain}/{address}/holders
openapi: 3.1.0
info:
  title: OceanX Developer API
  version: 1.0.0
  description: >-
    Public API for the OceanX trading platform. Currently in beta and free to
    use while in beta.


    This spec covers the **spot quote** domain. The wallet **tracker** and
    **perps** domains are documented at https://docs.oceanx.trade/api/overview
    and are not yet described here.
  contact:
    url: https://docs.oceanx.trade
  termsOfService: https://www.oceanx.trade/legal/terms
  license:
    name: Proprietary
    url: https://www.oceanx.trade/legal/terms
servers:
  - url: https://www.oceanx.trade
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Router
    description: >-
      Read-only Raptor route quotes and public Solana transaction status. Build
      and execution remain separately gated.
  - name: Market Data
    description: Read-only OceanX market context sourced and cached by VM producers.
  - name: Spot
    description: >-
      Executable Solana swap quotes off OceanX's own router, and the exit
      checker that reports whether a whole position can be sold.
  - name: Callouts
    description: >-
      Public token callouts — user-posted token calls with live click/volume
      attribution stats. Read-only.
  - name: Copy Trading
    description: Key-owner follow, fill and PnL reads; no execution authority.
  - name: Price Alerts
    description: Key-owner alert management through the existing evaluator; no webhooks.
paths:
  /api/v1/tokens/{chain}/{address}/holders:
    get:
      tags:
        - Tokens
      summary: Native token holders
      description: >-
        Native owner bank with immutable cursor-bound pages. LP/system owners
        excluded by default. Page size does not imply full population coverage.
        Reuse all original parameters with nextCursor; restart on 409.
        Identity/PnL enrichment remains additive.
      operationId: getTokenHolders
      parameters:
        - name: chain
          in: path
          required: true
          schema:
            type: string
            enum:
              - solana
        - name: address
          in: path
          required: true
          schema:
            type: string
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 5000
            default: 100
        - name: cursor
          in: query
          schema:
            type: string
            maxLength: 4096
        - name: includePool
          in: query
          schema:
            type: boolean
            default: false
          description: >-
            Include known pool and system owners. Exclusion does not certify all
            LP vaults are known.
      responses:
        '200':
          description: Owned observation. Coverage and nulls must be respected.
          content:
            application/json:
              schema:
                type: object
                required:
                  - source
                  - generated_at_ms
                  - data
                properties:
                  source:
                    const: local
                  generated_at_ms:
                    type: integer
                  data:
                    type: object
                    description: >-
                      Compact native holder export. Exact balances, identity
                      flags, labels, snapshot and coverage are included once per
                      row. The internal full holder table is unchanged. Unknown
                      totals remain null; partial indexes are not a complete
                      population.
                    properties:
                      rows:
                        type: array
                        maxItems: 5000
                        items:
                          type: object
                          properties:
                            ownerAddress:
                              type: string
                            balanceRaw:
                              type: string
                            balance:
                              type: string
                            sharePct:
                              type:
                                - string
                                - 'null'
                              description: >-
                                Exact decimal; null means unobserved or
                                incomplete.
                            isPool:
                              type: boolean
                            isSystem:
                              type: boolean
                            rank:
                              type: integer
                            valueUsd:
                              type: object
                              description: Native evidence envelope; value may be null.
                            labels:
                              type: array
                              items:
                                type: object
                                properties:
                                  label:
                                    type: string
                                  kind:
                                    type: string
                                  source:
                                    type: string
                                  confidence:
                                    type:
                                      - integer
                                      - 'null'
                                    minimum: 0
                                  observedMs:
                                    type: integer
                                  rule:
                                    type: string
                                  ruleVersion:
                                    type: integer
                            labelsStatus:
                              type: string
                            identity:
                              type: object
                              description: >-
                                Observed native actor flags; no wallet
                                enrichment implied.
                            walletPnl:
                              type: 'null'
                      totalHolders:
                        type:
                          - integer
                          - 'null'
                        minimum: 0
                      nextCursor:
                        type:
                          - string
                          - 'null'
                      snapshotTs:
                        type:
                          - integer
                          - 'null'
                        minimum: 0
                      coverage:
                        type: object
                      enrich:
                        type:
                          - object
                          - 'null'
        '400':
          description: Invalid or duplicate query parameter.
        '401':
          description: API key required.
        '403':
          description: md.read scope required.
        '409':
          description: Cursor expired or changed; restart pagination.
        '422':
          description: Unsupported chain or filter.
        '429':
          description: Rate or concurrency limit exceeded.
        '503':
          description: Native source unavailable or response budget exceeded.
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        An OceanX API key, created in the app under Settings → Developer API.
        Send it as `Authorization: Bearer ox_live_…`. Required scopes are
        operation-specific: market reads use md.read, tracker uses tracker.read,
        copy reads use copy.read, and alert operations use alerts.read or
        alerts.write. New scopes require explicit selection and grant no trading
        authority. Existing perps operations retain their documented scopes.

````

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