Skip to main content
Loading market data…
GET/api/v1/exchangesHobbyist tier+ · 30 req/min

Venue directory + rollup — OI, 24h volume, coin count, status.

One row per upstream exchange with aggregate OI, 24h notional, active coin count, last heartbeat, and derived status. Same query powering `/markets/exchanges`.

Query parameters

All query parameters are optional unless marked required.

NameTypeRequiredDefaultDescription
sortenumoptionaloi
Sort key.
oivolumecoinsheartbeat
direnumoptionaldesc
Sort direction.
ascdesc
limitnumberoptional50
Rows. Max 200.

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<{
  source: string;
  displayName: string;
  type: "CEX" | "DEX" | "OPTIONS" | "AGGREGATOR";
  oiUsd: number;
  oiSharePct: number;
  volume24hUsd: number;
  volumeSharePct: number;
  coinCount: number;
  lastHeartbeatTs: number | null;
  status: "live" | "degraded" | "stopped" | "unknown";
}>

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?limit=5" \
  -H "Authorization: Bearer cg_live_YOUR_KEY"
Responsejson
{
  "data": [
    {
      "source": "binance_futures",
      "displayName": "Binance Futures",
      "type": "CEX",
      "oiUsd": 12410200000,
      "oiSharePct": 42.1,
      "volume24hUsd": 85200000000,
      "volumeSharePct": 38.2,
      "coinCount": 210,
      "lastHeartbeatTs": 1744835110000,
      "status": "live"
    }
  ],
  "meta": { "total": 1, "limit": 5, "sort": "oi", "dir": "desc" }
}

Next

Check the error code reference, or get an API key to try the request against your own account.