Docs
    Guide

    Token API

    Balances, transfers, prices, swaps, holders, NFTs, and DEX data across EVM, SVM, and TVM chains — what to expect, how to authenticate, and how the response shape works.

    What you can build

    • Multi-chain wallet dashboards (ERC-20 + native + NFT)
    • Token price/liquidity tickers backed by on-chain DEX data
    • Accounting tools that need transfer history with USD values at time of execution
    • Trading research — OHLCV per pool, holder concentration, swap activity
    • AI agents and Custom GPTs that need read-only onchain data

    Chains supported

    • EVM: Ethereum, BSC, Polygon, Optimism, Base, Unichain, Avalanche, Arbitrum One
    • SVM: Solana
    • TVM: Tron
    • NFTs: ERC-721 and ERC-1155 across the EVM chains

    New chains are added based on demand. Open a request via support@pinax.network.

    Authentication

    Every request needs a Bearer JWT in the Authorization header. Issue a JWT from your project key at /keys. JWTs issued by The Graph Market are also accepted.

    curl 'https://token-api.service.pinax.network/v1/evm/balances/evm/0xabc...' \
      -H 'Authorization: Bearer <YOUR_JWT>' \
      -H 'Accept: application/json'

    Response shape

    • All endpoints wrap their payload in a top-level data array, plus pagination and statistics siblings.
    • Large numerics (balances, supplies, prices) come back as strings — parse with a big-number library to avoid JSON float precision loss.
    • Default page size is 10; tune with limit and page.
    • Transfers default to the last 30 days, max 180 days via age.
    • Data is indexed up to the latest finalized block per chain (no reorg risk).

    Frequently asked

    Why is the native token represented as 0xeeee…eeee?
    0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee is the sentinel we use for a chain's native token (ETH, BNB, MATIC, etc.). The native token has no ERC-20 contract, but using a sentinel means balances and transfers can be queried with the same shape as any ERC-20.
    What is 0x0000…0000 in a Uniswap V4 pool?
    Uniswap V4's native placeholder. When a pool involves the native token, V4 uses the zero address rather than a wrapped ERC-20.
    Caller vs sender vs recipient vs transaction_from?
    • transaction_from — EOA that signed the tx (gas payer).
    • caller — address that invoked the swap router (often an aggregator). Not present on TVM swaps.
    • sender — immediate Uniswap caller (the router itself in most aggregator flows).
    • recipient — address receiving the output tokens.
    How fresh is the data?
    Up to the latest finalized block on each chain. If you need sub-second latency, use Firehose or Substreams instead.
    Got a 429 — what now?
    Back off exponentially and reduce concurrency. Check current spend on /usage. If you hit limits routinely, mail support with your project UUID and traffic shape.
    Is there an SDK?
    The API ships an OpenAPI spec, so any generator works (openapi-fetch, orval, openapi-typescript). No first-party SDK is maintained.
    Can I plug this into Claude / Cursor / a Custom GPT?
    Yes — see the MCP FAQ for Claude Desktop, Cursor, and Cline. For OpenAI, see the Custom GPT guide.

    Related