# One token: stats, pools and hourly tape

`GET https://api.getchord.xyz/v1/chains/solana/token/{address}`

Source: https://getchord.xyz/docs/api-reference/operations/soltoken/

Identity (from the token's metadata), price on the main pool with 1-hour and 24-hour change, fully diluted market cap, liquidity summed over the pools that traded in the last 24 hours, 24-hour volume and trade counts with the venue split, up to 20 pools, and an hourly series.

**Pass `hours` of 24 or more**: the 24-hour totals are summed from the same hourly rows the series returns, so `hours=2` gives the totals of two hours. In `pools`, `volumeUsd` and `swaps` count since the tape first saw the pool, not 24 hours. Cached 10 seconds.

Chord's own Solana tape, read-only. No key needed.

- **What it reads.** The swap events of 11 venues: PumpSwap, the pump.fun bonding curve, Meteora DBC, Meteora DAMM v2, Meteora DLMM, Meteora pools (dynamic AMM v1), Raydium CLMM, Raydium CPMM, Raydium AMM v4, Raydium LaunchLab and Orca Whirlpool. Each swap is checked against the pool vaults' balance changes in the same transaction.
- **What it does not read.** Prop AMMs (SolFi, HumidiFi and the like) and order books. SOL/USDC and other major pairs therefore show far less volume than the whole market; the numbers are accurate for pump.fun, Meteora and Raydium style tokens. Transfers are not seen either: wallet PnL is average cost inside the window.
- **History.** Live since 2026-10-03 12:01 UTC, plus a backfill of the days before. `coverageSince` on `/chains/solana/overview` says from when totals are complete: quote that field, not a date.
- **Addresses** are base58 and **case-sensitive**. Never lower-case a mint or a wallet: a lower-cased mint is a different string, refused with `400 BAD_ADDRESS` when it stops being base58 (an `L` becomes `l`) and answered `404 TOKEN_NOT_FOUND` otherwise. Solana has no numeric chain id here: the path segment is the literal `solana`.
- **Units.** Token amounts are whole tokens (decimals already applied), `quoteAmount` is whole units of the pool's quote (SOL, USDC, USDT or the other token), prices and `*Usd` fields are US dollars. Timestamps, `updatedAt` included, are Unix **seconds**.
- **Names are untrusted.** `symbol`, `name` and `image` are whatever the token's creator wrote; many mints share a symbol and there are no wash or impostor flags. Identify a token by its mint.
- **Errors.** `400 BAD_*` for a bad parameter; `400 UNSUPPORTED_CHAIN` if Solana is not public on the deployment and the request has no `X-API-Key`; `503 CHAIN_DATA_UNAVAILABLE` when the Solana store cannot be read in time and `503 CHAIN_NOT_ENABLED` when the lane is off: retry later, never read either as "no trades".

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `address` | path | yes | string | Token mint, base58, exactly as it appears on-chain. |
| `hours` | query | no | integer (default `168`) | Hourly buckets in `hourly`; also the span the 24-hour totals are read from (see above). |

## Response 200

Example (captured from the live API):

```json
{
  "chain": "solana",
  "token": "7VertkgF9KLhxxJXHX6uaWuoYZTP9LdGj2bWmVXVpump",
  "symbol": "Agency",
  "name": "Agency",
  "image": "https://ipfs.io/ipfs/bafybeicailrr3iobedoxprzs6evwq3nqxsezdhvxbhpseyhltfmufybxuq",
  "decimals": 6,
  "supply": 966189741.871528,
  "firstSeen": 1791028889,
  "priceUsd": 0.012471350009671632,
  "change1hPct": 0,
  "change24hPct": -33.59296229824511,
  "marketCapUsd": 12049690.446634114,
  "liquidityUsd": 492710.3227884476,
  "volume24hUsd": 22300513.95510154,
  "trades24h": 98644,
  "buys24h": 50875,
  "sells24h": 47769,
  "buyVolume24hUsd": 10815371.994912628,
  "sellVolume24hUsd": 11485141.96018891,
  "venues": [
    {
      "dex": "pumpswap",
      "volumeUsd": 12526132.33339345,
      "trades": 59671
    },
    {
      "dex": "meteora_dlmm",
      "volumeUsd": 9716267.646647243,
      "trades": 27864
    }
  ],
  "pools": [
    {
      "pool": "CyJwKnLiiY4fmiwqMCSWFSHxo7T9Ubshgs2uRAuJCrk5",
      "dex": "pumpswap",
      "quote": "So11111111111111111111111111111111111111112",
      "priceUsd": 0.012471350009671632,
      "liquidityUsd": 492426.2442871083,
      "volumeUsd": 30096468.174518585,
      "swaps": 152986,
      "firstSeen": 1791028889,
      "lastTrade": 1791151092
    },
    {
      "pool": "4MRafCAZEk9KLLDJ7YAQSuwAFFtxz3fVLUuyDKySU8Ep",
      "dex": "meteora_damm_v2",
      "quote": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
      "priceUsd": 0.017382927320372235,
      "liquidityUsd": 277.017254,
      "volumeUsd": 1947.9255100000016,
      "swaps": 3651,
      "firstSeen": 1791067406,
      "lastTrade": 1791124069
    }
  ],
  "hourly": [
    {
      "hour": 1791082800,
      "volumeUsd": 634272.1321694182,
      "trades": 3874,
      "buys": 2057
    },
    {
      "hour": 1791086400,
      "volumeUsd": 1392924.1494347786,
      "trades": 7064,
      "buys": 3395
    }
  ],
  "updatedAt": 1791166385
}
```

- **400**: `BAD_ADDRESS` / `BAD_HOURS`, or `UNSUPPORTED_CHAIN` (Solana is not public on this deployment and the request has no `X-API-Key`).
- **404**: `TOKEN_NOT_FOUND`: this mint has not traded on a venue the tape reads since the tape started.
- **429**: Over the per-minute limit (`RATE_LIMIT_EXCEEDED`). Read `X-RateLimit-Reset` and back off.
- **503**: `CHAIN_DATA_UNAVAILABLE` (the Solana store did not answer in time) or `CHAIN_NOT_ENABLED` (the lane is off on this deployment). Retry later; do not treat it as an empty answer.
