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

# Get Token Holders

> Returns a paginated list of all addresses holding a specific token, along with their balances.



## OpenAPI

````yaml /open-api/0xapi.yaml get /v2/{chain_name}/tokens/{token_address}/holders
openapi: 3.0.0
info:
  description: >-
    API for accessing blockchain data including tokens, NFTs, transactions,
    events, ENS, and blocks. Authentication is optional; providing an API key
    via Bearer token may grant higher rate limits or access to additional
    features.
  title: Ormi Data API
  version: v2
servers:
  - url: https://api.data.ormilabs.com
security:
  - OrmiApiKey: []
tags:
  - description: Operations related to fungible tokens and wallet balances.
    name: Tokens
  - description: Operations related to Non-Fungible Tokens (NFTs).
    name: NFTs
  - description: Operations related to blockchain transactions.
    name: Transactions
  - description: Operations related to smart contract events.
    name: Events
  - description: Operations related to blockchain blocks.
    name: Blocks
paths:
  /v2/{chain_name}/tokens/{token_address}/holders:
    get:
      tags:
        - Tokens
      summary: Get Token Holders
      description: >-
        Returns a paginated list of all addresses holding a specific token,
        along with their balances.
      operationId: getTokenHolders
      parameters:
        - $ref: '#/components/parameters/TokenAddressParameter'
        - description: Sort order for results.
          in: query
          name: sort_by
          schema:
            default: most_holdings
            enum:
              - most_holdings
              - least_holdings
            type: string
        - $ref: '#/components/parameters/LimitParameter'
        - $ref: '#/components/parameters/CursorParameter'
        - $ref: '#/components/parameters/ChainNameParameter'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenHoldersResponse'
          description: Successfully retrieved token holders.
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  parameters:
    TokenAddressParameter:
      description: The token contract address.
      in: path
      name: token_address
      required: true
      schema:
        example: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'
        pattern: ^0x[a-fA-F0-9]{40}$
        type: string
    LimitParameter:
      description: Maximum number of items to return.
      in: query
      name: limit
      schema:
        default: 50
        maximum: 1000
        minimum: 1
        type: integer
    CursorParameter:
      description: Cursor for pagination to retrieve the next set of results.
      in: query
      name: cursor
      schema:
        type: string
    ChainNameParameter:
      description: The name or ID of the blockchain.
      in: path
      name: chain_name
      required: true
      schema:
        enum:
          - ethereum
          - apechain
          - arbitrum
          - avalanche
          - base
          - bsc
          - polygon
        example: ethereum
        type: string
  schemas:
    TokenHoldersResponse:
      allOf:
        - $ref: '#/components/schemas/PaginationBase'
        - properties:
            holders:
              items:
                $ref: '#/components/schemas/TokenHolderItem'
              type: array
            token:
              $ref: '#/components/schemas/TokenInfo'
            total_holders:
              example: 1000
              format: int64
              type: integer
          required:
            - token
            - holders
            - total_holders
          type: object
    PaginationBase:
      properties:
        next_cursor:
          example: ICJkYXNkYXMifQ==
          type: string
          x-omitempty: false
      type: object
    TokenHolderItem:
      properties:
        address:
          example: '0x312e67b47a2a29ae200184949093d92369f80b53'
          pattern: ^0x[a-fA-F0-9]{40}$
          type: string
        balance:
          example: 123123.1321321
          format: double
          type: number
        balance_raw:
          example: '1231231321321'
          type: string
        percentage:
          example: 40.12
          format: double
          type: number
      required:
        - address
        - balance
        - balance_raw
        - percentage
      type: object
    TokenInfo:
      properties:
        address:
          example: '0x312e67b47a2a29ae200184949093d92369f80b53'
          pattern: ^0x[a-fA-F0-9]{40}$
          type: string
        decimals:
          example: 7
          type: integer
        name:
          example: Bacacacac
          type: string
        standard:
          enum:
            - ERC-20
            - ERC-721
            - ERC-1155
            - NATIVE
          example: ERC-20
          type: string
        symbol:
          example: BAC
          type: string
      required:
        - standard
        - address
        - symbol
        - name
        - decimals
      type: object
    ApiError:
      properties:
        code:
          description: Internal application-specific error code.
          example: 20001
          type: integer
        data:
          additionalProperties: true
          description: Additional data related to the error, if applicable.
          example: {}
          type: object
        msg:
          description: A human-readable message providing more details about the error.
          example: Invalid API key provided.
          type: string
      required:
        - code
        - msg
      type: object
  responses:
    BadRequestError:
      content:
        application/json:
          examples:
            genericBadRequest:
              summary: Generic Bad Request
              value:
                code: 20101
                data: {}
                msg: Bad request. Please check your input.
            missingData:
              summary: Missing data
              value:
                code: 20301
                data: {}
                msg: Data missing. Please check your input.
            validationFailed:
              summary: Validation Failed
              value:
                code: 20201
                data:
                  errors:
                    - field: email
                      message: Email is not valid
                    - field: age
                      message: Age must be a positive number
                msg: Validation failed. Please check your input
          schema:
            $ref: '#/components/schemas/ApiError'
      description: >-
        Bad Request - The server cannot or will not process the request due to
        something that is perceived to be a client error (e.g., malformed
        request syntax, invalid request message framing, or deceptive request
        routing).
    UnauthorizedError:
      content:
        application/json:
          examples:
            invalidApiKey:
              summary: Invalid API Key
              value:
                code: 10005
                data: {}
                msg: Invalid API key provided.
            missingApiKey:
              summary: Missing API Key
              value:
                code: 10003
                data: {}
                msg: API key is missing from the Authorization header.
          schema:
            $ref: '#/components/schemas/ApiError'
      description: >-
        Unauthorized - The client request has not been completed because it
        lacks valid authentication credentials for the requested resource.
        Typically for an invalid or missing API key.
    RateLimitError:
      content:
        application/json:
          examples:
            rateLimited:
              summary: Rate Limit Exceeded
              value:
                code: 10020
                data:
                  retry_after_seconds: 60
                msg: Rate limit exceeded. Please try again later.
          schema:
            $ref: '#/components/schemas/ApiError'
      description: >-
        Too Many Requests - The user has sent too many requests in a given
        amount of time ("rate limiting").
    InternalServerError:
      content:
        application/json:
          examples:
            serverError:
              summary: Internal Server Error
              value:
                code: 20901
                data: {}
                msg: An unexpected internal server error occurred.
          schema:
            $ref: '#/components/schemas/ApiError'
      description: >-
        Internal Server Error - The server encountered an unexpected condition
        that prevented it from fulfilling the request.
  securitySchemes:
    OrmiApiKey:
      description: >
        Enter your API key in the format: Bearer <api_key>.

        Providing an API key may grant higher rate limits or access to
        additional features.

        The API will function without an API key for basic access.
      scheme: bearer
      type: http

````