# Hedera HTS Token & NFT API
> Browse the Hedera Token Service (HTS) live from the public Hedera Mirror Node — no key. The Hedera on-chain reader resolves a single token's details by id and the tokens an account holds, but it cannot browse the token universe, list the serials inside an NFT collection, or list who holds a token. This opens that. Discover and filter HTS tokens — fungible vs NFT collection, search by name; list the minted serials inside any NFT collection, each with its current owner account and decoded per-serial metadata (often an IPFS or HCS pointer) and whether it has been burned; and list the holders of any token with their decimal-adjusted balances, largest first. Every token and account is a shard.realm.num id like 0.0.107597. The discovery and NFT layer for Hedera wallets, token explorers, NFT marketplaces and analytics. Distinct from the Hedera on-chain reader (per-token-id details and per-account holdings) and from the Hedera Consensus Service topic reader. Live from the mirror node; short cache only.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/hederatokens-api/..."
```

## Pricing
- **Free** (Free) — 9,500 calls/Mo, 3 req/s
- **Starter** ($8/Mo) — 178,000 calls/Mo, 10 req/s
- **Pro** ($28/Mo) — 920,000 calls/Mo, 25 req/s
- **Scale** ($84/Mo) — 5,800,000 calls/Mo, 60 req/s

## Endpoints

### Tokens

#### `GET /v1/tokens` — Browse/search HTS tokens

**Parameters:**
- `type` (query, optional, string) — Filter: fungible or nft Example: `nft`
- `name` (query, optional, string) — Search by token name
- `limit` (query, optional, string) — Page size (1-100) Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/hederatokens-api/v1/tokens?type=nft&limit=25"
```

**Response:**
```json
{
    "data": {
        "note": "Browse the Hedera Token Service universe — every HTS token, each with its id, name, symbol, type (fungible vs NFT collection) and decimals. Filter type=fungible or type=nft, or search by name. The discovery layer the per-token-id reader can't give you. Paginate with limit.",
        "count": 25,
        "source": "Hedera Mirror Node",
        "tokens": [
            {
                "name": "CPNX_name",
                "type": "NON_FUNGIBLE_UNIQUE",
                "symbol": "CPNX",
                "decimals": 0,
                "token_id": "0.0.410224"
            },
            {
                "name": "NFT Test New",
                "type": "NON_FUNGIBLE_UNIQUE",
                "symbol": "IPFS://bafkreihhpqryeflyff5tnydyrt4wu6ozlnwzwy2hxc4sm4uraamobdsej4",
                "decimals": 0,
                "token_id": "0.0.412040"
            },
            {
                "name": "Xact",
                "type": "NON_FUNGIBLE_UNIQUE",
                "symbol": "IPFS://bafkreigkvfjwspd2uewy4zomzsgvmzotuchfrpicv6mgqjdd5gnzeyitrm",
                "decimals": 0,
                "token_id": "0.0.412112"
            },
            {
                "name": "Xact Logo",
                "type": "NON_FUNGIBLE_UNIQUE",
                "symbol": "IPFS://bafkreiegpnbo6b4hhlrarwyu65lealj7l3bgtazfqs4jp3xlspskdrhy5y",
                "decimals": 0,
                "token_id": "0.0.421864"
            },
            {
                "name": "Xact Logo
…(truncated, see openapi.json for full schema)
```

### NFTs

#### `GET /v1/nfts` — Serials inside an NFT collection

**Parameters:**
- `token_id` (query, optional, string) — NFT collection id (0.0.x); omit for the first NFT collection Example: `0.0.410224`
- `limit` (query, optional, string) — Page size (1-100) Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/hederatokens-api/v1/nfts?token_id=0.0.410224&limit=25"
```

**Response:**
```json
{
    "data": {
        "nfts": [
            {
                "owner": "0.0.410226",
                "deleted": true,
                "metadata": "Xhkusw==",
                "serial_number": 1,
                "created_timestamp": "1630615611.855620000"
            }
        ],
        "note": "The minted serials inside one Hedera NFT collection — each serial with its current owner account, decoded per-serial metadata (often an IPFS/HCS pointer) and whether it has been burned. Pass token_id for a specific collection, or omit to use the first NFT collection on the network.",
        "count": 1,
        "source": "Hedera Mirror Node",
        "token_id": "0.0.410224"
    },
    "meta": {
        "timestamp": "2026-06-14T17:04:02.051Z",
        "request_id": "f623bb50-67e4-413f-a139-3f4c578ca7f8"
    },
    "status": "ok",
    "message": "NFTs retrieved successfully",
    "success": true
}
```

### Holders

#### `GET /v1/holders` — Holders of a token and their balances

**Parameters:**
- `token_id` (query, optional, string) — Token id (0.0.x); omit for the first token Example: `0.0.107594`
- `limit` (query, optional, string) — Page size (1-100) Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/hederatokens-api/v1/holders?token_id=0.0.107594&limit=25"
```

**Response:**
```json
{
    "data": {
        "note": "The holders of one HTS token and their decimal-adjusted balances, largest first — the distribution view the per-account reader can't give you. Pass token_id for a specific token, or omit to use the first token on the network.",
        "count": 1,
        "source": "Hedera Mirror Node",
        "holders": [
            {
                "account": "0.0.107593",
                "balance": 0,
                "decimals": 3,
                "balance_raw": "0"
            }
        ],
        "token_id": "0.0.107594",
        "timestamp": "1695438729.989508003"
    },
    "meta": {
        "timestamp": "2026-06-14T17:04:02.187Z",
        "request_id": "2895d4ee-c1e9-43e6-a29c-7ecdf9a0ad81"
    },
    "status": "ok",
    "message": "Holders retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Service metadata

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/hederatokens-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "sample": {
            "first_token": "F"
        },
        "source": "public Hedera Mirror Node (mainnet-public.mirrornode.hedera.com), keyless",
        "service": "hederatokens-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/nfts": "The serials inside an NFT collection: owner + metadata (token_id; omit for the first NFT collection).",
            "GET /v1/tokens": "Browse/search HTS tokens (type=fungible|nft, name, limit).",
            "GET /v1/holders": "A token's holders and decimal-adjusted balances (token_id; omit for the first token)."
        },
        "description": "Browse the Hedera Token Service (HTS) live from the public Hedera Mirror Node: discover and filter HTS tokens (fungible vs NFT, by name), list the minted serials inside any NFT collection with owner and metadata, and list the holders of any token with decimal-adjusted balances. The discovery and NFT layer for Hedera wallets, token explorers and NFT marketplaces. Live, short cache only.",
        "upstream_status": "ok"
    },
    "meta": {
        "timestamp": "2026-06-14T17:04:02.300Z",
        "request_id": "0edc9eb6-8182-4a40-bee2-af4fd3311a48"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/hederatokens-api
OpenAPI spec: https://www.oanor.com/api/hederatokens-api/openapi.json
