Skip to main content
Loading market data…
GET/api/v1/symbolsFree tier · 10 req/min

Full instrument directory — the table you cache on startup to resolve symbols everywhere else.

Every other endpoint assumes you already know which canonical symbols exist. This is that source of truth. Pull the full list once at app start, cache it, and diff it on the next cold start. Filter by `base`, `kind`, or prefix `search` to keep responses small during interactive exploration.

Query parameters

All query parameters are optional unless marked required.

NameTypeRequiredDefaultDescription
limitnumberoptional500
Rows per page. Max 5000.
offsetnumberoptional0
Pagination offset.
basestringoptional
Exact base-asset filter (e.g. `BTC`).
kindenumoptional
Instrument family filter.
perpspotfutureoption
searchstringoptional
Case-insensitive prefix search on `canonicalSymbol`. LIKE wildcards are stripped server-side.

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<{
  id: number;
  canonicalSymbol: string;      // "BTCUSDT"
  base: string;                 // "BTC"
  quote: string;                // "USDT"
  kind: "perp" | "spot" | "future" | "option";
  expiry: string | null;        // present on futures/options
  strike: number | null;        // options only
  optionType: "C" | "P" | null; // options only
}>

Example

Copy the curl, replace YOUR_KEY with a real key from your dashboard, and run.

Requestbash
curl -sS "http://localhost:3000/api/v1/symbols?base=BTC&kind=perp&limit=5"
Responsejson
{
  "data": [
    {
      "id": 12,
      "canonicalSymbol": "BTCUSDT",
      "base": "BTC",
      "quote": "USDT",
      "kind": "perp",
      "expiry": null,
      "strike": null,
      "optionType": null
    },
    {
      "id": 14,
      "canonicalSymbol": "BTCUSD_PERP",
      "base": "BTC",
      "quote": "USD",
      "kind": "perp",
      "expiry": null,
      "strike": null,
      "optionType": null
    }
  ],
  "meta": { "total": 2, "limit": 5, "offset": 0 }
}

Notes

  • Anonymous-tier friendly — no key required.
  • For very large caches, page through with `limit=5000` then `offset=5000,10000,…` until you get a short page back.

Next

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