GET
/api/v1/exchanges/{source}/instrumentsHobbyist tier+ · 30 req/minPer-exchange instrument table — OI + 24h notional for each instrument.
Granular drill-in — one row per instrument the venue has been active on, with latest OI (USD), 24h trade notional, and latest trade/OI timestamps. Sorted OI-desc, volume-desc.
Path parameters
Segments of the URL path, validated server-side.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| source | string | required | — | Exchange slug. |
Query parameters
All query parameters are optional unless marked required.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | number | optional | 100 | Rows. Max 500. |
| offset | number | optional | 0 | Pagination offset. |
Response shape
Always wrapped in the standard envelope. Nullable fields are explicitly marked — treat missing numeric data as a real data-source gap, not as an error.
data payloadtypescript
// Wrapped in the standard envelope:
// {
// data: /* shape below */,
// meta?: { total?: number; limit?: number; offset?: number; ... }
// }
Array<{
instrumentId: number;
canonicalSymbol: string;
base: string;
quote: string;
kind: string;
oiUsd: number;
volume24hUsd: number;
lastTradeTs: number | null;
lastOiTs: number | null;
}>Example
Copy the curl, replace YOUR_KEY with a real key from your dashboard, and run.
Requestbash
curl -sS "http://localhost:3000/api/v1/exchanges/binance_futures/instruments?limit=5" \
-H "Authorization: Bearer cg_live_YOUR_KEY"Responsejson
{
"data": [
{
"instrumentId": 12,
"canonicalSymbol": "BTCUSDT",
"base": "BTC",
"quote": "USDT",
"kind": "perp",
"oiUsd": 5800000000,
"volume24hUsd": 41200000000,
"lastTradeTs": 1744834810000,
"lastOiTs": 1744834800000
}
],
"meta": { "total": 1, "limit": 5, "offset": 0 }
}Next
Check the error code reference, or get an API key to try the request against your own account.