/api/currency/ex-table
GETAvailable

Coin-page exchange table

Coin-page exchange table (price, volume, OI, funding per venue; spot or futures)

GET/api/currency/ex-table

Request

Query parameters

NameTypeRequiredDefaultAllowed valuesDescription
coinstringRequired——Base coin symbol (uppercase, e.g. BTC). Example: BTC
marketstringOptionalfuturesfutures, spot, perpetual, delivery, all`futures` (default) and `spot` return one row per exchange (`futures` one row per contract with `group=pair`). `perpetual`, `delivery` and `all` always return one row per market: perpetual contracts only, dated futures only, or every spot, perpetual and delivery market of the coin in one list. Any other value is treated as `futures`. Example: futures
groupstringOptional—pair`pair` returns one row per contract instead of one row per exchange. Each row then carries `status`, `status_reason`, `market_type`, `expiry_ts`, `expiry_date`, `native_symbol`, `quote`, `margin_type`, `price_source`, `price_at` and `rank`, and the response adds a `meta` object. Rows whose `status` is not `active` (no live quote, no feed, expired) carry no price.

Example request

curl -s "https://www.coinboss.com/api/currency/ex-table?coin=BTC&market=futures"

Response fields

The field table is generated from real responses, so it lists exactly what the endpoint returns. Paths use a[] for array items and {*} for objects keyed by a dynamic name such as a coin or an exchange.

FieldTypeUnitDescription
successboolean—true when the request succeeded. On failure the body is `{ success: false, code, error, request_id }`.
coinstring—Coin symbol, upper case (for example BTC).
marketstring—Market.
dataarray—Payload.
data[]object—Payload.
data[].exchangestring—Exchange id, lower case (for example `binance`).
data[].namestring—Name.
data[].pairstring|null—Exchange symbol of the row's contract: the highest-volume contract of the exchange, or the exact contract with `group=pair` (the symbol as CoinBoss normalises it; the name used by the exchange is `native_symbol`); null when the exchange has open interest but no ticker.
data[].pricenumber|null—Last price in the quote currency (USD or USDT unless stated).
data[].change_pctnumber|null%Percentage change.
data[].volume_usdnumber|nullUSDVolume in USD notional.
data[].oi_usdnumber|nullUSDOpen interest in USD notional.
data[].ls_rationumber|null—Long/short ratio.
data[].liq_longnumber|null—Liquidated longs.
data[].liq_shortnumber|null—Liquidated shorts.
data[].fundingnumber|null—Funding rate block or value.
data[].funding_interval_hnumber|nullhFunding interval. may be absent
data[].funding_8hnumber|nullfraction`funding` normalised to an 8-hour interval: rate × 8 ÷ `funding_interval_h` (0.0001 = 0.01 %); null when the settlement interval is unknown. may be absent
data[].next_funding_timenumber|nullmsTimestamp. may be absent
data[].multipliernumberxNumber of coins one quoted unit of the contract represents (1000 for 1000PEPE-style contracts, otherwise 1). may be absent
data[].vol_change_pctnumber|null%Change of the exchange's 24h volume against its hourly snapshot taken 23–25 hours earlier; null without a snapshot or on non-primary rows.
data[].oi_change_pctnumber|null%Change of the exchange's open interest against the same contracts' hourly snapshot nearest to 24 hours ago (±1 h); null when no baseline exists.
data[].oi_vol_change_pctnumber|null%Change of the open interest ÷ 24h volume ratio against the same ratio 24 hours earlier.
data[].price_rawnumber|nullUSDLast price exactly as the exchange quotes the contract, before dividing by `multiplier`; equals `price` when `multiplier` is 1. may be absent
data[].liquidity_usdnumber|nullUSDBid plus ask order-book notional within ±1 % of the mid price on this exchange; a lower bound when `liquidity_complete` is false. may be absent
data[].liquidity_reach_pctnumber%Distance from the mid price actually covered by the order book the exchange returned, the smaller of the bid and ask side. may be absent
data[].liquidity_completeboolean—True when the returned order book reaches the full ±1 % band on both sides; false means `liquidity_usd` undercounts. may be absent
data[].oi_vol_rationumber|null—Open interest divided by 24h volume.
data[].pair_dispstring—Display form of the pair as base/quote (`BTC/USDT`, `1000PEPE/USDT`, `BTC/USD` for CME and USD-margined venues).
data[].contract_typestring|null—`perpetual` or `delivery` (dated futures); null on spot rows. With `group=pair` it comes from the exchange's contract specification where CoinBoss has one, otherwise from the expiry code in the symbol.
data[].expirystring(decimal)|null—Expiry date code YYMMDD of a dated contract. With `group=pair` it is derived from `expiry_ts` for every contract that has an expiry; otherwise it is the six-digit symbol suffix. Null for contracts without an expiry and for CME rows.
data[].market_typestring—`spot`, `perpetual` or `delivery`. may be absent
data[].expiry_tsnumber|nullmsExpiry / delivery time of the contract, Unix milliseconds; null when the contract has no expiry or the exchange does not publish one. may be absent
data[].expiry_datestring|null—Expiry date as YYYY-MM-DD (UTC); null when the contract has no expiry. may be absent
data[].native_symbolstring|null—Contract name exactly as the exchange lists it (`BTCUSDT_270326`, `BTC-PERPETUAL`, `XBTMZ26`); null when CoinBoss holds no contract specification for the venue and on spot rows. may be absent
data[].quotestring|null—Quote currency of the contract or spot pair (`USDT`, `USDC`, `USD`, …). may be absent
data[].margin_typestring|null—Margin asset class from the contract specification: `usdt`, `usdc`, `coin`, `usd` or `other`; null when unknown and on spot rows. may be absent
data[].statusstring—Market state of the row (only with `group=pair` and `market=spot`): `active` = a real quote received within the last hour and a 24h volume above zero; `no_quote` = the contract is listed but has no usable quote, see `status_reason`; `not_provided` = the exchange publishes no real-time ticker that CoinBoss collects (CME); `expired` = the contract is past its expiry. Rows that are not `active` carry no price. may be absent
data[].status_reasonstring|null—Why a row is not `active`: `expired`, `no_realtime_feed`, `quote_stale` (last quote older than one hour), `no_price`, `no_volume` (the exchange reports no 24h volume) or `no_trades_24h` (the reported 24h volume is zero). Null on active rows. may be absent
data[].price_sourcestring|null—Dataset the row's price and volume were read from: `market_tickers`, `sd_contract_latest` or `spot_coin_ex_vol`; null when no ticker exists for the contract. may be absent
data[].price_atnumber|nullmsTime the row's ticker was received, Unix milliseconds. On rows that are not `active` it is the time of the last ticker seen (no price is returned for it), or null. may be absent
data[].symbolstring—Symbol of the row as CoinBoss stores it (`BTCUSDT`, `BTCUSD_270326`, `BTC-27NOV26`); same value as `pair` on contract rows, base + quote on spot rows. The name used by the exchange is `native_symbol`. may be absent
data[].basestring—Underlying of the contract or spot pair as traded. Contracts quoted in multiples of the coin keep the multiplier (`1000PEPE`). may be absent
data[].market_statusstring—State of the market: `ACTIVE` = not expired, a quote of this market received within the last hour and a 24h volume above zero; `EXPIRING` = active and the exchange lists its expiry within the next 24 hours; `EXPIRED` = past its expiry; `STALE` = the last quote is older than one hour; `NO_QUOTE` = no usable quote, see `reason_code`. Only `ACTIVE` and `EXPIRING` rows carry a price and a `rank`. may be absent
data[].reason_codestring|null—Why the row carries no price: `NO_QUOTE` (listed, but no trades in 24h or no last price / volume reported), `EXPIRED`, `STALE`, or `UNAVAILABLE` (CoinBoss collects no real-time ticker for this market, e.g. CME). Null on `ACTIVE` and `EXPIRING` rows. The finer cause is in `status_reason`. may be absent
data[].source_atnumber|nullmsTime the ticker behind this row was received from the exchange, Unix milliseconds; null when no ticker exists. Same value as `price_at`. may be absent
data[].qualitystring—`live` = `source_at` within the last hour, `stale` = older, `none` = no ticker for this market. may be absent
data[].is_staleboolean—True when `quality` is `stale`. may be absent
data[].expires_in_snumber|nullsSeconds until the expiry of the contract at the time the table was assembled; negative once expired; null when the contract has no expiry. may be absent
data[].ranknumber|null—Position among rankable rows (`market_status` `ACTIVE` or `EXPIRING`) ordered by `volume_usd` descending, starting at 1 and counted inside the requested view; null on rows that are not rankable. may be absent
data[].marketstring—Market. may be absent
metaobject—Table-level information: grouping, freshness and volume windows, sort rule and row counts. Present with `group=pair` and with `market=spot`, `perpetual`, `delivery` or `all`. may be absent
meta.groupstring—`pair` = one row per contract, `exchange` = one row per spot venue. may be absent
meta.as_ofnumbermsTime the table was assembled, Unix milliseconds. may be absent
meta.fresh_window_snumbersMaximum age of a quote for a row to count as `active`. may be absent
meta.expiring_window_snumbersA contract whose expiry is closer than this is reported as `EXPIRING`. may be absent
meta.volume_windowstring—Window of `volume_usd`: `24h_rolling`, the rolling 24-hour turnover each exchange reports. may be absent
meta.volume_unitstring—Unit of `volume_usd`. may be absent
meta.sortstring—Row order of the response in words. may be absent
meta.countsobject—Number of rows per `status`. may be absent
meta.counts.activenumbercountRows with `status=active`. may be absent
meta.counts.no_quotenumbercountRows with `status=no_quote`. may be absent
meta.counts.not_providednumbercountRows with `status=not_provided`. may be absent
meta.counts.expirednumbercountRows with `status=expired`. may be absent
meta.market_status_countsobject—Number of rows per `market_status`. may be absent
meta.market_status_counts.ACTIVEnumbercountRows with `market_status=ACTIVE`. may be absent
meta.market_status_counts.EXPIRINGnumbercountRows with `market_status=EXPIRING`. may be absent
meta.market_status_counts.EXPIREDnumbercountRows with `market_status=EXPIRED`. may be absent
meta.market_status_counts.NO_QUOTEnumbercountRows with `market_status=NO_QUOTE`. may be absent
meta.market_status_counts.STALEnumbercountRows with `market_status=STALE`. may be absent
meta.type_countsobject—Number of rows per market type. may be absent
meta.type_counts.spotnumbercountSpot rows in the response. may be absent
meta.type_counts.perpetualnumbercountPerpetual rows in the response. may be absent
meta.type_counts.deliverynumbercountDelivery (dated futures) rows in the response. may be absent
meta.type_rankableobject—Number of rankable rows (`ACTIVE` or `EXPIRING`) per market type. may be absent
meta.type_rankable.spotnumbercountSpot rows that are rankable (`ACTIVE` or `EXPIRING`). may be absent
meta.type_rankable.perpetualnumbercountPerpetual rows that are rankable. may be absent
meta.type_rankable.deliverynumbercountDelivery rows that are rankable. may be absent

Generated 2026-11-12 10:57 UTC from 9 real responses.

Example response

/api/currency/ex-table?coin=BTC&market=futures · Real response captured 2026-11-13 03:57:28 UTC. Long arrays and maps are shortened for display: data had 24 items.

  • {
    • "success": true,
    • "coin": "BTC",
    • "market": "futures",
    • "data": [
      • { … 26 },
      • { … 26 }
      ]
    }

Verified samples

Besides the example above, the probe calls this endpoint with these parameters and checks the schema each time.

ParametersHTTPLatencyResult
coin=BTC&market=all200139 msPass
coin=BTC&market=perpetual2001 msPass
coin=BTC&market=delivery2002 msPass
coin=BTC&group=pair&market=futures2002 msPass
coin=BTC&market=spot2001 msPass
coin=ETH&market=futures200105 msPass
coin=SOL&market=futures20067 msPass
coin=ARKM&market=futures20055 msPass

Checked 2026-11-13 03:57:28 UTC

Details

Authentication
None. Public endpoint.
Rate limit
1200 requests per minute per IP
Server cache
30s
Edge micro-cache
10s
Update frequency
tickers / OI / funding every 60 s to 5 min; order-book depth every 5 min; spot volume every 10 min; liquidations real-time
Window
latest snapshot (tickers 1 h, OI 3 h, funding 4 h, long/short 24 h, depth 30 min); 24 h changes vs hourly archives
Data sources
Per-exchange futures and spot statistics for one coin, assembled from CoinBoss's own collectors polling the public APIs of about 30 venues (e.g. binance, okx, bybit, bitget, gate, hyperliquid).
Exchange coverage
futures: all venues with a fresh ticker for the coin (up to 24); depth from 15 venues for about 28 coins; spot (market=spot): 14 spot venues
Sorting
volume_usd desc. With `group=pair` and with `market=spot|perpetual|delivery|all`: rankable rows (`market_status` ACTIVE or EXPIRING) first by volume_usd desc (these carry `rank`), then rows without a live quote by oi_usd desc, expired contracts last; ties by expiry, exchange and symbol, so every request made at the same moment gets the same order
Units
price in USD (multiplier contracts normalized to one coin); volume / OI / liquidations / depth in USD; funding as raw fraction and 8 h-normalized fraction; changes in percent
Method
per exchange (futures): volume = SUM(volume_usd); funding_8h = rate x 8 / interval_hours of the largest-OI contract; depth_1pct_usd = bid + ask notional within +/- 1% of mid; OI 24 h change by same-contract pairing; volume change vs the ticker archive 23-25 h earlier; liquidations = 24 h SUM(value_usd)
Timestamps
Unix epoch milliseconds (UTC) unless the field description says otherwise
Response format
json
Stability
Stable

Live status

AvailableChecked 2026-11-13 03:57:28 UTCHTTP 200139 msSchema matches

Availability, last 30 days

99.76% of 411 checks passed

Errors

Failed calls share one shape on every endpoint. The full list is on the errors page. Errors and rate limits →

CodeHTTPMeaningWhat to do
INVALID_PARAM400A required parameter is missing or a value is not accepted. `param` names the parameter when it is known.Do not retry unchanged; fix the request.
UNAUTHORIZED401The `CB-API-KEY` header was sent but the key is unknown or revoked. Public data needs no key — drop the header or use a valid key.Do not retry unchanged.
FORBIDDEN403The route is not part of the public API (internal or account-only).Do not retry.
NOT_FOUND404Unknown route, or the requested coin / exchange / fund does not exist.Do not retry; check the path and identifiers against the catalog.
RATE_LIMITED429More requests than the per-minute limit. `Retry-After` gives the seconds to wait.Wait for `Retry-After`, then retry with backoff.
INTERNAL500Unexpected server error. The message is generic by design; quote `request_id` when reporting it.Retry once after a few seconds; report it with the request id if it persists.
UPSTREAM_FAILED503The data source behind this endpoint did not answer in time. No stale or substitute numbers are returned in its place.Retry with backoff; check the status page.
UNAVAILABLE501 / 503The dataset is temporarily not ready (cache warming) or the endpoint has no lawful public source yet.Retry later; the catalog marks endpoints that are unavailable by design.
REQUEST_FAILED200Some older endpoints answer HTTP 200 with `success: false`. Always check `success`, not only the HTTP status.Depends on the message; treat as a failed request.

Try it

GET/api/currency/ex-tableAvailable
Parameters

string — Base coin symbol (uppercase, e.g. BTC).

string · default futures — `futures` (default) and `spot` return one row per exchange (`futures` one row per contract with `group=pair`). `perpetual`, `delivery` and `all` always return one row per market: perpetual contracts only, dated futures only, or every spot, perpetual and delivery market of the coin in one list. Any other value is treated as `futures`.

string — `pair` returns one row per contract instead of one row per exchange. Each row then carries `status`, `status_reason`, `market_type`, `expiry_ts`, `expiry_date`, `native_symbol`, `quote`, `margin_type`, `price_source`, `price_at` and `rank`, and the response adds a `meta` object. Rows whose `status` is not `active` (no live quote, no feed, expired) carry no price.

Request URLhttps://www.coinboss.com/api/currency/ex-table?coin=BTC&market=futures
Choose an endpoint and press “Send request”. The response, headers and timing will appear here.