---
title: "List wallet holders of an NFT collection"
method: POST
path: "/?ankr_getNFTHolders"
tags: ["NFT API"]
---

# List wallet holders of an NFT collection

`POST /?ankr_getNFTHolders`

## Request

- Base URL: `https://rpc.ankr.com/multichain/569ca1f392f7d3d0bb1073a1173ecb649af1d9249231fe59fa95db19d5ae41fe`
- URL: `https://rpc.ankr.com/multichain/569ca1f392f7d3d0bb1073a1173ecb649af1d9249231fe59fa95db19d5ae41fe/?ankr_getNFTHolders`
- Auth: none declared
- TypeScript: <https://skmtc.dev/ankr/apis/ankr-advanced-api/docs/%3Fankr_getNFTHolders/post.ts> (a function with typed inputs; its response is checked against the schema)

Returns the list of wallet addresses that currently hold any token from the specified NFT collection. Useful for snapshotting an allowlist, computing distribution stats, or driving holder-gated drops.

Pass the `contractAddress` of the collection plus the `blockchain` it lives on. Page through large collections with `pageSize` (default `1000`, max `10000`) and the `nextPageToken` echoed in each response.

Part of the **NFT API** product (700 compute units per call, $0.00007 at base rate).

## Request body

- object
  - `id` integer, required: Client-supplied request ID echoed in the response.
  - `jsonrpc` '2.0', required
  - `method` 'ankr_getNFTHolders', required
  - `params` object, required
    - `blockchain` 'arbitrum' | 'avalanche' | 'base' | 'bsc' | 'eth' | 'fantom' | 'flare' | 'gnosis' | 'linea' | 'optimism' | 'polygon' | 'scroll' | 'somnia_mainnet' | 'taiko' | 'telos' | 'xlayer' | 'avalanche_fuji' | 'base_sepolia' | 'eth_sepolia' | 'optimism_sepolia' | 'polygon_amoy', required: Target blockchain identifier.
    - `contractAddress` string, required: Contract address of the NFT collection. ENS names accepted on Ethereum.
    - `pageSize` integer: Entries per page. Default `1000`, maximum `10000`.
    - `pageToken` string: Opaque page token from a prior response's `nextPageToken`.

## Response `200`

Success. JSON-RPC `result` envelope contains the holders array and a pagination cursor. JSON-RPC errors are returned with HTTP 200 — check for an `error` key in the response body.

- object
  - `id` integer, required
  - `jsonrpc` '2.0', required
  - `result` object, required
    - `holders` string[], nullable, required: Holder wallet addresses.
    - `nextPageToken` string: Cursor for the next page. Empty when no more pages remain.

## Other responses

- `400`: Bad Request — malformed JSON-RPC envelope or invalid `params`. The gateway rejects before the JSON-RPC layer processes the call.
- `401`: Unauthorized — missing or invalid API key in the server URL path. Verify that `{API_KEY}` is set to a valid project key.
- `429`: Too Many Requests — the API key has exceeded its rate or quota limits. Back off and retry; consider upgrading the Premium tier for higher limits.
- `500`: Server error — unexpected condition. Retry with exponential backoff; if it persists, file a ticket at https://www.ankr.com/support/.

---

[API](https://skmtc.dev/ankr/apis/ankr-advanced-api.md) - [All operations](https://skmtc.dev/ankr/apis/ankr-advanced-api/llms.txt) - [OpenAPI document](https://skmtc.dev/ankr/apis/ankr-advanced-api/revisions/77e494aeec1b?raw)
