GETAvailable
One-shot coin bundle (OI, funding, liquidations, volume, long/short)
Self-data layer: one-shot coin bundle (OI / funding / liquidations / volume / long-short, per-block fault isolation)
GET
/api/sd/coinRequest
Query parameters
| Name | Type | Required | Default | Allowed values | Description |
|---|---|---|---|---|---|
| coin | string | Required | — | — | Coin symbol; 400 when missing. Alias: `base`. Example: BTC |
Example request
curl -s "https://www.coinboss.com/api/sd/coin?coin=BTC"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.
| Field | Type | Unit | Description |
|---|---|---|---|
| success | boolean | — | true when the request succeeded. On failure the body is `{ success: false, code, error, request_id }`. |
| coin | string | — | Coin symbol, upper case (for example BTC). |
| now | number | ms | Server time when the response was built. |
| oi | object | — | Same object as `/api/sd/oi` returns for this coin. |
| oi.coin | string | — | Coin symbol, upper case (for example BTC). |
| oi.now | number | ms | Server time when the response was built. |
| oi.total_usd | number | USD | Open interest across all included exchanges and contracts, as each exchange reports it (USD notional). |
| oi.n_exchanges | number | — | Number of exchanges in the total. |
| oi.n_contracts | number | — | Number of contracts in the total. |
| oi.asof | number | ms | Newest update time among the included rows. |
| oi.total_usd_single_adjusted | number | USD | `total_usd` with the figures of exchanges that report both sides (`double_sided.exchanges`) halved, so every venue counts one side. |
| oi.double_sided | object | — | Exchanges known to publish long + short open interest as one number. |
| oi.double_sided.exchanges | array | — | Exchanges. |
| oi.double_sided.exchanges[] | string | — | Exchanges. |
| oi.double_sided.oi_usd | number | USD | Reported open interest of those exchanges before halving. |
| oi.by_kind | object | — | Split by linear / inverse. |
| oi.by_kind.linear_usd | number | USD | Open interest of linear contracts (margined and settled in a stablecoin or USD). |
| oi.by_kind.inverse_usd | number | USD | Open interest of inverse (coin-margined) contracts, converted to USD at the contract price. |
| oi.by_margin | object | — | Split by margin currency. |
| oi.by_margin.other | number | USD | Other margin currencies (for example USD-settled venues such as CME). |
| oi.by_margin.usdt | number | USD | USDT-margined contracts. |
| oi.by_margin.usdc | number | USD | USDC-margined contracts. may be absent |
| oi.by_margin.coin | number | USD | Coin-margined contracts. may be absent |
| oi.by_contract_type | object | — | Split by perpetual / delivery. |
| oi.by_contract_type.perpetual_usd | number | USD | Perpetual contracts. |
| oi.by_contract_type.delivery_usd | number | USD | Dated futures (delivery contracts). |
| oi.change | object | — | Change of open interest over 1h / 4h / 24h, computed on the same set of contracts at both ends. dynamic keys: h1,h4,h24 |
| oi.change.{*} | object | — | Change over the stated period. |
| oi.change.{*}.pct | number | % | Percentage change between `prev` and `cur`. |
| oi.change.{*}.cur | number | USD | Current sum over the matched contracts. |
| oi.change.{*}.prev | number | USD | Sum over the same contracts at `prev_ts`. |
| oi.change.{*}.n_matched | number | — | Contracts (or exchanges) present at both ends. |
| oi.change.{*}.n_total | number | — | Contracts (or exchanges) present now. |
| oi.change.{*}.matched_share_pct | number | % | Share of current open interest covered by the matched set. may be absent |
| oi.change.{*}.prev_ts | number | ms | Time of the baseline snapshot. |
| oi.change.{*}.span_min | number | min | Actual distance between baseline and now. |
| oi.change.{*}.basis | string | — | Which snapshot series the baseline comes from. |
| oi.change.{*}.frozen_excluded | object | — | Rows left out of the change because their value did not move between the two snapshots (source not updating). may be absent |
| oi.change.{*}.frozen_excluded.n_baseline | number | — | Items in the baseline snapshot. may be absent |
| oi.change.{*}.frozen_excluded.n_current | number | — | Items in the current snapshot. may be absent |
| oi.change.{*}.frozen_excluded.cur_usd | number | USD | Current value. may be absent |
| oi.change.{*}.frozen_excluded.prev_usd | number | USD | Baseline value. may be absent |
| oi.by_exchange | array | — | Per-exchange breakdown. |
| oi.by_exchange[] | object | — | Per-exchange breakdown. |
| oi.by_exchange[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| oi.by_exchange[].oi_usd | number | USD | Open interest in USD notional. |
| oi.by_exchange[].share_pct | number | % | Share of the total. |
| oi.by_exchange[].n_contracts | number | — | Number of contracts. |
| oi.by_exchange[].linear_usd | number | USD | Linear contracts. |
| oi.by_exchange[].inverse_usd | number | USD | Inverse (coin-margined) contracts. |
| oi.by_exchange[].perpetual_usd | number | USD | Perpetual contracts. |
| oi.by_exchange[].delivery_usd | number | USD | Delivery contracts. |
| oi.by_exchange[].oi_side | string | — | `double` when the exchange reports both sides in one number, `single` when it reports one side, `unstated` when the exchange does not document it. |
| oi.by_exchange[].oi_usd_single_adjusted | number|null | USD | Single-side equivalent; null when the side convention is unstated. |
| oi.by_exchange[].updated_at | number | ms | When this row was last updated. |
| oi.by_exchange[].age_s | number | s | Seconds since this row was last updated. |
| oi.by_exchange[].is_stale | boolean | — | true when the row is older than the freshness window; stale rows are not used in totals. |
| oi.contracts | array | — | Per-contract rows. |
| oi.contracts[] | object | — | Per-contract rows. |
| oi.contracts[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| oi.contracts[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| oi.contracts[].native_symbol | string|null | — | Symbol exactly as the exchange writes it. |
| oi.contracts[].oi_usd | number | USD | Open interest in USD notional. |
| oi.contracts[].oi_side | string | — | `double`, `single` or `unstated`: whether the exchange reports both sides of open interest in one number. |
| oi.contracts[].oi_usd_single | number|null | USD | Single-side equivalent of `oi_usd`; null when the side convention is unstated. |
| oi.contracts[].margin | string | — | Margin currency class: `usdt`, `usdc`, `coin` or `other`. |
| oi.contracts[].kind | string | — | `linear` or `inverse`. |
| oi.contracts[].contract_type | string | — | `perpetual` or `delivery`. |
| oi.contracts[].expiry_ts | number|null | ms | Expiry of a delivery contract; null for perpetuals or when not published. |
| oi.contracts[].margin_basis | string | — | How the margin class was determined (from the contract specification or the venue default). |
| oi.contracts[].updated_at | number | ms | When this row was last updated. |
| oi.contracts[].age_s | number | s | Seconds since this row was last updated. |
| oi.contracts[].is_stale | boolean | — | true when the row is older than the freshness window; stale rows are not used in totals. |
| oi.contracts[].collector | string | — | Internal collector that produced the row. |
| oi.contracts[].included_since | number|null | ms | When this contract entered the totals; null for the base set. |
| oi.coverage | object | — | What is and is not included in the numbers above. Compare this before comparing totals with another source. |
| oi.coverage.included_exchanges | array | — | Exchanges whose data is included in the totals. |
| oi.coverage.included_exchanges[] | string | — | Exchanges included in the totals. |
| oi.coverage.pending | array | — | Contracts that are collected but not yet included in totals (for example while their own 25-hour history is still building). Listed with their current value so the gap is visible. |
| oi.coverage.pending[] | object | — | Items collected but not yet included. |
| oi.coverage.pending[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| oi.coverage.pending[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| oi.coverage.pending[].native_symbol | string | — | Symbol exactly as the exchange writes it. |
| oi.coverage.pending[].margin | string | — | Margin currency class. |
| oi.coverage.pending[].contract_type | string | — | `perpetual` or `delivery`. |
| oi.coverage.pending[].oi_usd | number | USD | Open interest in USD notional. |
| oi.coverage.pending[].age_s | number | s | Seconds since this row was last updated. |
| oi.coverage.pending[].reason | string | — | Reason code. |
| oi.coverage.pending[].detail | string|null | — | Detail. |
| oi.coverage.pending_usd | number|null | USD | Sum of the pending contracts, not part of `total_usd`. |
| oi.coverage.stale_excluded | array | — | Rows left out because their last update is outside the usable window. empty in the samples used to generate this table |
| oi.coverage.unavailable | array | — | Exchange / contract pairs that could not be included, each with a reason. They are never counted as 0. |
| oi.coverage.unavailable[] | object | — | Items for which no data is available, with reasons. Never reported as 0. |
| oi.coverage.unavailable[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| oi.coverage.unavailable[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| oi.coverage.unavailable[].native_symbol | string | — | Symbol exactly as the exchange writes it. |
| oi.coverage.unavailable[].margin | string | — | Margin currency class. |
| oi.coverage.unavailable[].contract_type | string | — | `perpetual` or `delivery`. |
| oi.coverage.unavailable[].reason | string | — | Reason code. |
| oi.coverage.unavailable[].detail | string | — | Detail. |
| oi.method | object | — | Plain-text statement of the formulas used for this response. |
| oi.method.total | string | — | Total. |
| oi.method.usd | string | USD | Value. |
| oi.method.change_h1_h4 | string | — | Plain-text definition of the 1h and 4h open interest changes: each contract is compared with its own snapshot nearest to the window start. |
| oi.method.change_h24 | string | — | Plain-text definition of the 24h open interest change: same-exchange pairing against the hourly snapshot nearest to 24 hours ago, frozen baselines excluded. |
| oi.method.oi_side | string | — | `double`, `single` or `unstated`: whether the exchange reports both sides of open interest in one number. |
| funding | object | — | Same object as `/api/sd/funding` returns for this coin. |
| funding.coin | string | — | Coin symbol, upper case (for example BTC). |
| funding.now | number | ms | Server time when the response was built. |
| funding.unit | string | — | Unit of all rate fields in this response: `fraction` (0.0001 = 0.01 %). |
| funding.avg_8h | number | fraction per 8h | Simple mean of the 8h-normalised rates, one contract per exchange. |
| funding.oi_weighted_8h | number | fraction per 8h | Open-interest-weighted mean of the 8h-normalised rates. |
| funding.apr_pct | number | % per year | Simple annualisation: 8h rate × 3 × 365 × 100. |
| funding.apr_basis | string | — | Which aggregate the headline `apr_pct` is based on. |
| funding.n_exchanges | number | — | Number of exchanges contributing. |
| funding.n_normalized | number | — | Exchanges whose funding interval is known and could be normalised to 8h. |
| funding.n_unknown_interval | number | — | Exchanges left out of the aggregates because their funding interval is unknown. |
| funding.settled_cum_7d | object | — | Sum of actually settled funding rates over the last 7 days, averaged across exchanges with settlement history. |
| funding.settled_cum_7d.avg | number | fraction | Simple mean across exchanges. |
| funding.settled_cum_7d.oi_weighted | number | fraction | Open-interest-weighted mean. |
| funding.settled_cum_7d.n | number | — | Exchanges with a complete window. |
| funding.settled_cum_30d | object | — | Same, over 30 days. |
| funding.settled_cum_30d.avg | number | fraction | Simple mean across exchanges. |
| funding.settled_cum_30d.oi_weighted | number | fraction | Open-interest-weighted mean. |
| funding.settled_cum_30d.n | number | — | Exchanges with a complete window. |
| funding.by_exchange | array | — | One row per exchange: its main contract for this coin (the one with the largest open interest). |
| funding.by_exchange[] | object | — | Per-exchange breakdown. |
| funding.by_exchange[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| funding.by_exchange[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| funding.by_exchange[].margin | string | — | Margin currency class. |
| funding.by_exchange[].kind | string | — | Kind. |
| funding.by_exchange[].primary | boolean | — | True for the contract representing its exchange in the aggregates (the one with the largest open interest); always true in this list. |
| funding.by_exchange[].rate | number | — | Rate. |
| funding.by_exchange[].interval_h | number | h | Interval. |
| funding.by_exchange[].rate_8h | number | — | Rate normalised to an 8-hour period. |
| funding.by_exchange[].apr_pct | number | % per year | Annualised percentage. |
| funding.by_exchange[].next_funding_time | number|null | ms | Timestamp. |
| funding.by_exchange[].next_derived | boolean | — | True when `next_funding_time` was not published by the exchange and is inferred as the next full UTC hour (hourly-settling venues only). |
| funding.by_exchange[].predicted_rate | null | — | Indicative next-period rate; null when not published. |
| funding.by_exchange[].oi_usd | number|null | USD | Open interest in USD notional. |
| funding.by_exchange[].updated_at | number | ms | When this row was last updated. |
| funding.by_exchange[].age_s | number | s | Seconds since this row was last updated. |
| funding.by_exchange[].is_stale | boolean | — | true when the row is older than the freshness window; stale rows are not used in totals. |
| funding.by_exchange[].settled | object|null | — | Actual settlement records; null when no public history exists. |
| funding.by_exchange[].settled.last_rate | number | fraction | Funding rate actually charged at the most recent settlement (`last_time`), from the exchange's funding history (0.0001 = 0.01 %). may be absent |
| funding.by_exchange[].settled.last_time | number | ms | Timestamp. may be absent |
| funding.by_exchange[].settled.interval_h | number | h | Interval. may be absent |
| funding.by_exchange[].settled.cum_7d | number | fraction | Sum of the funding rates settled on this contract in the last 7 days (0.0015 = 0.15 %); null when no settlement was recorded. may be absent |
| funding.by_exchange[].settled.n_7d | number | count | Number of settlement records collected for the last 7 days. may be absent |
| funding.by_exchange[].settled.n_7d_expected | number | count | Settlements a full 7-day window should contain: 168 ÷ settlement interval in hours; null when the interval is unknown. may be absent |
| funding.by_exchange[].settled.cum_7d_complete | boolean | — | True when the history covers the start of the 7-day window and holds at least 90 % of the expected settlements. may be absent |
| funding.by_exchange[].settled.cum_30d | number | fraction | Sum of the funding rates settled on this contract in the last 30 days (0.006 = 0.6 %). may be absent |
| funding.by_exchange[].settled.n_30d | number | count | Number of settlement records collected for the last 30 days. may be absent |
| funding.by_exchange[].settled.n_30d_expected | number | count | Settlements a full 30-day window should contain: 720 ÷ settlement interval in hours; null when the interval is unknown. may be absent |
| funding.by_exchange[].settled.cum_30d_complete | boolean | — | True when the history covers the start of the 30-day window and holds at least 90 % of the expected settlements. may be absent |
| funding.by_exchange[].settled.history_from | number | ms | Earliest record held. may be absent |
| funding.other_contracts | array | — | Further contracts of the same coin (USDC, coin-margined, …). Not part of the aggregates. |
| funding.other_contracts[] | object | — | One additional funding contract of an exchange (coin-margined, USDC, …) that is not its primary contract and is excluded from the aggregates. |
| funding.other_contracts[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| funding.other_contracts[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| funding.other_contracts[].margin | string | — | Margin currency class. |
| funding.other_contracts[].kind | string | — | Kind. |
| funding.other_contracts[].primary | boolean | — | False for every row of this list: the contract is not the one representing its exchange in the aggregates. |
| funding.other_contracts[].rate | number | — | Rate. |
| funding.other_contracts[].interval_h | number|null | h | Interval. |
| funding.other_contracts[].rate_8h | number|null | — | Rate normalised to an 8-hour period. |
| funding.other_contracts[].apr_pct | number|null | % per year | Annualised percentage. |
| funding.other_contracts[].next_funding_time | number|null | ms | Timestamp. |
| funding.other_contracts[].next_derived | boolean | — | True when `next_funding_time` was not published by the exchange and is inferred as the next full UTC hour (hourly-settling venues only). |
| funding.other_contracts[].predicted_rate | number|null | — | Indicative next-period rate; null when not published. |
| funding.other_contracts[].oi_usd | number|null | USD | Open interest in USD notional. |
| funding.other_contracts[].updated_at | number | ms | When this row was last updated. |
| funding.other_contracts[].age_s | number | s | Seconds since this row was last updated. |
| funding.other_contracts[].is_stale | boolean | — | true when the row is older than the freshness window; stale rows are not used in totals. |
| funding.other_contracts[].settled | object|null | — | Actual settlement records; null when no public history exists. |
| funding.other_contracts[].settled.last_rate | number | fraction | Funding rate actually charged at the most recent settlement (`last_time`), from the exchange's funding history (0.0001 = 0.01 %). may be absent |
| funding.other_contracts[].settled.last_time | number | ms | Timestamp. may be absent |
| funding.other_contracts[].settled.interval_h | number | h | Interval. may be absent |
| funding.other_contracts[].settled.cum_7d | number | fraction | Sum of the funding rates settled on this contract in the last 7 days (0.0015 = 0.15 %); null when no settlement was recorded. may be absent |
| funding.other_contracts[].settled.n_7d | number | count | Number of settlement records collected for the last 7 days. may be absent |
| funding.other_contracts[].settled.n_7d_expected | number | count | Settlements a full 7-day window should contain: 168 ÷ settlement interval in hours; null when the interval is unknown. may be absent |
| funding.other_contracts[].settled.cum_7d_complete | boolean | — | True when the history covers the start of the 7-day window and holds at least 90 % of the expected settlements. may be absent |
| funding.other_contracts[].settled.cum_30d | number | fraction | Sum of the funding rates settled on this contract in the last 30 days (0.006 = 0.6 %). may be absent |
| funding.other_contracts[].settled.n_30d | number | count | Number of settlement records collected for the last 30 days. may be absent |
| funding.other_contracts[].settled.n_30d_expected | number | count | Settlements a full 30-day window should contain: 720 ÷ settlement interval in hours; null when the interval is unknown. may be absent |
| funding.other_contracts[].settled.cum_30d_complete | boolean | — | True when the history covers the start of the 30-day window and holds at least 90 % of the expected settlements. may be absent |
| funding.other_contracts[].settled.history_from | number | ms | Earliest record held. may be absent |
| funding.coverage | object | — | What is and is not included in the numbers above. Compare this before comparing totals with another source. |
| funding.coverage.settle_history_exchanges | array | — | Exchanges for which actual settlement records are collected. |
| funding.coverage.settle_history_exchanges[] | string | — | Exchange id for which actual funding settlement records are collected for this coin. |
| funding.coverage.no_settle_history | array | — | Exchanges without a public settlement-history source; their `settled` is null. |
| funding.coverage.no_settle_history[] | string | — | Exchange id of a primary contract that has no collected settlement history, so its `settled` block is null. |
| funding.coverage.unknown_interval | array | — | Rows whose funding interval could not be determined. empty in the samples used to generate this table |
| funding.coverage.no_liveness_excluded | array | — | Rows excluded because the contract shows no sign of trading (no recent ticker, open interest or quote). empty in the samples used to generate this table |
| funding.method | object | — | Plain-text statement of the formulas used for this response. |
| funding.method.rate | string | — | Rate. |
| funding.method.rate_8h | string | — | Rate normalised to an 8-hour period. |
| funding.method.apr_pct | string | % per year | Annualised percentage. |
| funding.method.aggregate | string | — | Aggregate across exchanges. |
| funding.method.settled | string | — | Actual settlement records; null when no public history exists. |
| funding.method.predicted_rate | string | — | Indicative next-period rate; null when not published. |
| funding.method.liveness | string | — | Plain-text rule for dropping dead contracts: a funding row counts only with a ticker within 1h, open interest within 3h or an own quote within 3h. |
| liquidations | object | — | Same object as `/api/sd/liquidations` returns for this coin. |
| liquidations.coin | string | — | Coin symbol, upper case (for example BTC). |
| liquidations.now | number | ms | Server time when the response was built. |
| liquidations.windows | object | — | Totals for each window (keys such as `1h`, `4h`, `12h`, `24h`). dynamic keys: 1h,4h,12h,24h |
| liquidations.windows.{*} | object | — | Per-window values. |
| liquidations.windows.{*}.long_usd | number | USD | Liquidated long positions; null when no source covered the window. |
| liquidations.windows.{*}.short_usd | number | USD | Liquidated short positions; null when no source covered the window. |
| liquidations.windows.{*}.total_usd | number | USD | Long + short. |
| liquidations.windows.{*}.count | number | — | Number of liquidation orders. |
| liquidations.windows.{*}.long_pct | number | % | Share of longs in the total. |
| liquidations.windows.{*}.max_order | object | — | Largest single liquidation in the window. |
| liquidations.windows.{*}.max_order.exchange | string | — | Exchange id, lower case (for example `binance`). |
| liquidations.windows.{*}.max_order.symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| liquidations.windows.{*}.max_order.side | string | — | `long` / `short` or `buy` / `sell`. |
| liquidations.windows.{*}.max_order.price | number | — | Last price in the quote currency (USD or USDT unless stated). |
| liquidations.windows.{*}.max_order.qty | number | — | Quantity. |
| liquidations.windows.{*}.max_order.contract_multiplier | number | x | Coins per quoted contract unit of the largest order (1000 for 1000PEPE-style contracts); `price` and `qty` are already converted to single coins. |
| liquidations.windows.{*}.max_order.value_usd | number | USD | Value. |
| liquidations.windows.{*}.max_order.timestamp | number | ms | Timestamp. |
| liquidations.by_exchange | object | — | Per-exchange split for each window. dynamic keys: 1h,4h,12h,24h |
| liquidations.by_exchange.{*} | array | — | Per-exchange breakdown. |
| liquidations.by_exchange.{*}[] | object | — | Per-exchange breakdown. |
| liquidations.by_exchange.{*}[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| liquidations.by_exchange.{*}[].long_usd | number | USD | Long side. |
| liquidations.by_exchange.{*}[].short_usd | number | USD | Short side. |
| liquidations.by_exchange.{*}[].total_usd | number | USD | Total. |
| liquidations.by_exchange.{*}[].count | number | — | Number of items. |
| liquidations.by_exchange.{*}[].share_pct | number | % | Share of the total. |
| liquidations.last_event_at | number | ms | Time of the most recent liquidation for this coin. |
| liquidations.last_event_age_s | number | s | Seconds since that event. |
| liquidations.sources | array | — | State of every liquidation feed: how it is collected and when it last delivered. |
| liquidations.sources[] | object | — | Data sources. |
| liquidations.sources[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| liquidations.sources[].via | string | — | Collection method (`ws`, `rest`, …). |
| liquidations.sources[].status | string | — | Feed state judged from its own event times and heartbeats. |
| liquidations.sources[].feed_last_event_age_s | number|null | s | Seconds since the event. |
| liquidations.sources[].ws_heartbeat_age_s | number|null | s | Seconds since the event. |
| liquidations.sources[].judged_by | string | — | Which timestamp the status was judged from. |
| liquidations.sources[].coin_last_event_age_s | number|null | s | Seconds since the event. |
| liquidations.sources[].min_event_usd | number | USD | Smallest order size the feed publishes; smaller liquidations are not visible on this venue. |
| liquidations.sources[].note | string|null | — | Note. |
| liquidations.sources[].node_heartbeat_age_s | number | s | Seconds since the event. may be absent |
| liquidations.sources[].pipeline_last_event_age_s | number | s | Seconds since the event. may be absent |
| liquidations.coverage | object | — | What is and is not included in the numbers above. Compare this before comparing totals with another source. |
| liquidations.coverage.collected_exchanges | array | — | Exchanges with a public liquidation feed that CoinBoss collects. |
| liquidations.coverage.collected_exchanges[] | string | — | Exchanges collected. |
| liquidations.coverage.unavailable | array | — | Exchange / contract pairs that could not be included, each with a reason. They are never counted as 0. |
| liquidations.coverage.unavailable[] | object | — | Items for which no data is available, with reasons. Never reported as 0. |
| liquidations.coverage.unavailable[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| liquidations.coverage.unavailable[].reason | string | — | Reason code. |
| liquidations.method | object | — | Plain-text statement of the formulas used for this response. |
| liquidations.method.event | string | — | Plain-text note on what one liquidation event is: one liquidation order pushed by the exchange stream or returned by its public REST API. |
| liquidations.method.side | string | — | `long` / `short` or `buy` / `sell`. |
| liquidations.method.value_usd | string | USD | Value. |
| liquidations.method.dedupe | string | — | Plain-text note on de-duplication: events are unique by exchange, symbol, side, price, value and timestamp, plus the exchange order id where provided. |
| liquidations.method.null_rule | string | — | Plain-text note that a window without any collected event returns null rather than 0, and where exchanges without a public feed are listed. |
| liquidations.method.binance_note | string | — | Plain-text caveat that Binance pushes at most one liquidation per symbol per second, so Binance totals are a lower bound. |
| liquidations.method.min_event_usd | string | USD | Smallest order the feed publishes. |
| volume | object | — | Same object as `/api/sd/volume` returns for this coin. |
| volume.coin | string | — | Coin symbol, upper case (for example BTC). |
| volume.now | number | ms | Server time when the response was built. |
| volume.futures | object | — | Futures market block or value. |
| volume.futures.total_usd | number | USD | 24h futures volume across exchanges (USD notional). |
| volume.futures.n_exchanges | number | — | Number of exchanges contributing. |
| volume.futures.by_exchange | array | — | Per-exchange breakdown. |
| volume.futures.by_exchange[] | object | — | Per-exchange breakdown. |
| volume.futures.by_exchange[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| volume.futures.by_exchange[].vol_usd | number | USD | Volume in USD notional. |
| volume.futures.by_exchange[].legacy_usd | number | USD | Part of the volume that comes from the USDT-perpetual ticker set. |
| volume.futures.by_exchange[].sd_usd | number | USD | Part that comes from additional contracts (USDC, coin-margined, delivery) already included. |
| volume.futures.by_exchange[].share_pct | number | % | Share of the total. |
| volume.futures.change_24h | object | — | 24h change. |
| volume.futures.change_24h.pct | number | % | Percentage. |
| volume.futures.change_24h.cur | number | — | Current value. |
| volume.futures.change_24h.prev | number | — | Previous value (baseline). |
| volume.futures.change_24h.n_matched | number | — | Items present at both ends of the comparison. |
| volume.futures.change_24h.n_total | number | — | Items present now. |
| volume.futures.change_24h.prev_ts | number | ms | Time of the baseline snapshot. |
| volume.futures.change_24h.basis | string | — | Futures price minus spot price, or the basis block. |
| volume.futures.selfdata_contracts | object | — | Additional contracts: what is already included and what is still pending. |
| volume.futures.selfdata_contracts.included_usd | null | USD | 24h volume of the additionally collected contracts (coin-margined, USDC, delivery) already counted in the futures total; null when none is counted yet. |
| volume.futures.selfdata_contracts.n_included | number | count | Number of additionally collected contracts counted in the futures total (those that have their own snapshot from about 24 hours ago). |
| volume.futures.selfdata_contracts.pending_usd | number|null | USD | Sum of pending items, not in the total. |
| volume.futures.selfdata_contracts.n_pending | number | count | Number of additionally collected contracts not yet counted because they lack their own 24h-ago baseline; the largest are listed in `pending`. |
| volume.futures.selfdata_contracts.pending | array | — | Items collected but not yet included. |
| volume.futures.selfdata_contracts.pending[] | object | — | Items collected but not yet included. |
| volume.futures.selfdata_contracts.pending[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| volume.futures.selfdata_contracts.pending[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| volume.futures.selfdata_contracts.pending[].margin | string | — | Margin currency class. |
| volume.futures.selfdata_contracts.pending[].contract_type | string | — | `perpetual` or `delivery`. |
| volume.futures.selfdata_contracts.pending[].vol_usd | number | USD | Volume in USD notional. |
| volume.futures.selfdata_contracts.pending[].reason | string | — | Reason code. |
| volume.spot | object | — | Spot market block or value. |
| volume.spot.total_usd | number | USD | 24h spot volume across exchanges. |
| volume.spot.n_exchanges | number | — | Number of exchanges contributing. |
| volume.spot.asof | number | ms | Time of the newest data used. |
| volume.spot.by_exchange | array | — | Per-exchange breakdown. |
| volume.spot.by_exchange[] | object | — | Per-exchange breakdown. |
| volume.spot.by_exchange[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| volume.spot.by_exchange[].vol_usd | number | USD | Volume in USD notional. |
| volume.spot.by_exchange[].quote | string | — | Quote currencies included for this exchange. |
| volume.spot.by_exchange[].ts | number | ms | Timestamp. |
| volume.spot.by_exchange[].price | number | — | Last price in the quote currency (USD or USDT unless stated). |
| volume.spot.by_exchange[].age_s | number | s | Seconds since this row was last updated. |
| volume.spot.by_exchange[].share_pct | number | % | Share of the total. |
| volume.spot.change_24h | object | — | 24h change. |
| volume.spot.change_24h.pct | number | % | Percentage. |
| volume.spot.change_24h.cur | number | — | Current value. |
| volume.spot.change_24h.prev | number | — | Previous value (baseline). |
| volume.spot.change_24h.n_matched | number | — | Items present at both ends of the comparison. |
| volume.spot.change_24h.n_total | number | — | Items present now. |
| volume.spot.change_24h.prev_ts | number | ms | Time of the baseline snapshot. |
| volume.spot.change_24h.basis | string | — | Futures price minus spot price, or the basis block. |
| volume.ratios | object | — | Volume ratios: `futures_to_spot` (24h futures volume ÷ 24h spot volume) and `oi_to_futures_volume`; each null when an input is missing. |
| volume.ratios.futures_to_spot | number | — | Futures volume divided by spot volume. |
| volume.ratios.oi_to_futures_volume | number | — | Open interest divided by 24h futures volume. |
| volume.method | object | — | Plain-text statement of the formulas used for this response. |
| volume.method.futures | string | — | Futures market block or value. |
| volume.method.spot | string | — | Spot market block or value. |
| volume.method.change | string | — | Change over the stated period. |
| volume.method.oi_to_futures_volume | string | — | Plain-text definition of `ratios.oi_to_futures_volume`: total open interest in USD ÷ 24h futures volume in USD. |
| ls | object | — | Same object as `/api/sd/ls` returns for this coin. |
| ls.coin | string | — | Coin symbol, upper case (for example BTC). |
| ls.now | number | ms | Server time when the response was built. |
| ls.account | object | — | Share of all accounts that are net long vs net short. |
| ls.account.long_pct | number | % | Long share. |
| ls.account.short_pct | number | % | Short share. |
| ls.account.ratio | number | — | Ratio. |
| ls.account.n_exchanges | number | — | Number of exchanges contributing. |
| ls.account.by_exchange | array | — | Per-exchange breakdown. |
| ls.account.by_exchange[] | object | — | Per-exchange breakdown. |
| ls.account.by_exchange[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| ls.account.by_exchange[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| ls.account.by_exchange[].long_pct | number | % | Long share. |
| ls.account.by_exchange[].short_pct | number | % | Short share. |
| ls.account.by_exchange[].ratio | number | — | Ratio. |
| ls.account.by_exchange[].updated_at | number | ms | When this row was last updated. |
| ls.account.by_exchange[].age_s | number | s | Seconds since this row was last updated. |
| ls.account.by_exchange[].is_stale | boolean | — | true when the row is older than the freshness window; stale rows are not used in totals. |
| ls.account.by_exchange[].source | string | — | Where the value comes from. |
| ls.account.by_exchange[].period | string | — | Period. |
| ls.top_account | object | — | Same, restricted to the exchange-defined top traders. |
| ls.top_account.long_pct | number|null | % | Long share. |
| ls.top_account.short_pct | number|null | % | Short share. |
| ls.top_account.ratio | number|null | — | Ratio. |
| ls.top_account.n_exchanges | number | — | Number of exchanges contributing. |
| ls.top_account.by_exchange | array | — | Per-exchange breakdown. |
| ls.top_account.by_exchange[] | object | — | Per-exchange breakdown. |
| ls.top_account.by_exchange[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| ls.top_account.by_exchange[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| ls.top_account.by_exchange[].long_pct | number | % | Long share. |
| ls.top_account.by_exchange[].short_pct | number | % | Short share. |
| ls.top_account.by_exchange[].ratio | number | — | Ratio. |
| ls.top_account.by_exchange[].updated_at | number | ms | When this row was last updated. |
| ls.top_account.by_exchange[].age_s | number | s | Seconds since this row was last updated. |
| ls.top_account.by_exchange[].is_stale | boolean | — | true when the row is older than the freshness window; stale rows are not used in totals. |
| ls.top_account.by_exchange[].source | string | — | Where the value comes from. |
| ls.top_account.by_exchange[].period | string | — | Period. |
| ls.top_position | object | — | Long vs short share of the positions held by top traders. |
| ls.top_position.long_pct | number|null | % | Long share. |
| ls.top_position.short_pct | number|null | % | Short share. |
| ls.top_position.ratio | number|null | — | Ratio. |
| ls.top_position.n_exchanges | number | — | Number of exchanges contributing. |
| ls.top_position.by_exchange | array | — | Per-exchange breakdown. |
| ls.top_position.by_exchange[] | object | — | Per-exchange breakdown. |
| ls.top_position.by_exchange[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| ls.top_position.by_exchange[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| ls.top_position.by_exchange[].long_pct | number | % | Long share. |
| ls.top_position.by_exchange[].short_pct | number | % | Short share. |
| ls.top_position.by_exchange[].ratio | number | — | Ratio. |
| ls.top_position.by_exchange[].updated_at | number | ms | When this row was last updated. |
| ls.top_position.by_exchange[].age_s | number | s | Seconds since this row was last updated. |
| ls.top_position.by_exchange[].is_stale | boolean | — | true when the row is older than the freshness window; stale rows are not used in totals. |
| ls.top_position.by_exchange[].source | string | — | Where the value comes from. |
| ls.top_position.by_exchange[].period | string | — | Period. |
| ls.position_all | object | — | Long vs short share of all positions (venues that publish it). |
| ls.position_all.long_pct | number|null | % | Long share. |
| ls.position_all.short_pct | number|null | % | Short share. |
| ls.position_all.ratio | number|null | — | Ratio. |
| ls.position_all.n_exchanges | number | — | Number of exchanges contributing. |
| ls.position_all.by_exchange | array | — | Per-exchange breakdown. |
| ls.position_all.by_exchange[] | object | — | Per-exchange breakdown. |
| ls.position_all.by_exchange[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| ls.position_all.by_exchange[].symbol | string | — | Instrument symbol as normalised by CoinBoss (for example BTCUSDT). |
| ls.position_all.by_exchange[].long_pct | number | % | Long share. |
| ls.position_all.by_exchange[].short_pct | number | % | Short share. |
| ls.position_all.by_exchange[].ratio | number | — | Ratio. |
| ls.position_all.by_exchange[].updated_at | number | ms | When this row was last updated. |
| ls.position_all.by_exchange[].age_s | number | s | Seconds since this row was last updated. |
| ls.position_all.by_exchange[].is_stale | boolean | — | true when the row is older than the freshness window; stale rows are not used in totals. |
| ls.position_all.by_exchange[].source | string | — | Where the value comes from. |
| ls.position_all.by_exchange[].period | string | — | Period. |
| ls.taker | object | — | Taker buy vs taker sell volume share. |
| ls.taker.long_pct | number|null | % | Long share. |
| ls.taker.short_pct | number|null | % | Short share. |
| ls.taker.ratio | number|null | — | Ratio. |
| ls.taker.n_exchanges | number | — | Number of exchanges contributing. |
| ls.taker.by_exchange | array | — | Per-exchange breakdown. |
| ls.definitions | object | — | Definition of each measure. The five measures answer different questions and are never blended. may be absent |
| ls.definitions.account | string | — | Account-based measure. may be absent |
| ls.definitions.top_account | string | — | Top-trader account measure. may be absent |
| ls.definitions.top_position | string | — | Top-trader position measure. may be absent |
| ls.definitions.position_all | string | — | All-position measure. may be absent |
| ls.definitions.taker | string | — | Taker buy / sell measure. may be absent |
| ls.method | object | — | Plain-text statement of the formulas used for this response. may be absent |
| ls.method.normalize | string | — | Plain-text note on normalisation: each exchange value is rescaled so long % + short % = 100, and ratio = long % ÷ short %. may be absent |
| ls.method.aggregate | string | — | Aggregate across exchanges. may be absent |
| ls.method.freshness | string | — | Plain-text freshness rule: rows updated within 24 hours are shown and `is_stale` marks rows older than 2 hours. may be absent |
| errors | object | — | Parts of the bundle that failed to build, keyed by part name; empty when all parts are present. may be absent |
Generated 2026-11-11 23:00 UTC from 4 real responses.
Example response
No example is stored because the last successful response was too large to display. Call the endpoint in the Playground.
Verified samples
Besides the example above, the probe calls this endpoint with these parameters and checks the schema each time.
| Parameters | HTTP | Latency | Result |
|---|---|---|---|
| coin=ETH | 200 | 73 ms | Pass |
| coin=SOL | 200 | 59 ms | Pass |
| coin=ARKM | 200 | 59 ms | Pass |
| — | 400 | 2 ms | Pass returns the expected error |
Checked 2026-11-13 03:57:35 UTC
Details
- Authentication
- None. Public endpoint.
- Rate limit
- 1200 requests per minute per IP
- Server cache
- 15s
- Edge micro-cache
- 10s
- Update frequency
- see /api/sd/oi, /api/sd/funding, /api/sd/liquidations, /api/sd/volume, /api/sd/ls (60 s to 5 min polling; liquidations real-time; spot every 10 min)
- Window
- latest snapshot per block plus each block's own rolling windows
- Data sources
- Combined open interest, funding, liquidations, volume and long/short blocks for one coin, all built from CoinBoss's own collectors polling the public APIs of about 30 venues (e.g. binance, okx, bybit, bitget, gate, hyperliquid).
- Exchange coverage
- same as the five single-block endpoints; the contracts list is truncated to 60 rows
- Units
- USD notional for OI / volume / liquidations; funding as fraction; long/short in percent
- Method
- same builders as the five single-block endpoints
- Timestamps
- Unix epoch milliseconds (UTC) unless the field description says otherwise
- Response format
- json
- Stability
- Stable
- Available since
- 2026-11-11
Live status
AvailableChecked 2026-11-13 03:57:35 UTCHTTP 200875 msSchema matchesNewest data point 0s old
Availability, last 30 days
100% of 411 checks passed
Schema drift detected by the last probe
- Returned but not documented: oi.coverage.stale_excluded[], oi.coverage.stale_excluded[].exchange, oi.coverage.stale_excluded[].symbol, oi.coverage.stale_excluded[].oi_usd, oi.coverage.stale_excluded[].age_s, oi.coverage.stale_excluded[].reason, ls.taker.by_exchange[], ls.taker.by_exchange[].exchange, ls.taker.by_exchange[].symbol, ls.taker.by_exchange[].long_pct
Errors
Failed calls share one shape on every endpoint. The full list is on the errors page. Errors and rate limits →
| Code | HTTP | Meaning | What to do |
|---|---|---|---|
| INVALID_PARAM | 400 | A 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. |
| UNAUTHORIZED | 401 | The `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. |
| FORBIDDEN | 403 | The route is not part of the public API (internal or account-only). | Do not retry. |
| NOT_FOUND | 404 | Unknown route, or the requested coin / exchange / fund does not exist. | Do not retry; check the path and identifiers against the catalog. |
| RATE_LIMITED | 429 | More requests than the per-minute limit. `Retry-After` gives the seconds to wait. | Wait for `Retry-After`, then retry with backoff. |
| INTERNAL | 500 | Unexpected 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_FAILED | 503 | The 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. |
| UNAVAILABLE | 501 / 503 | The 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_FAILED | 200 | Some 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/sd/coinAvailableParameters
string — Coin symbol; 400 when missing. Alias: `base`.
Request URL
https://www.coinboss.com/api/sd/coin?coin=BTCChoose an endpoint and press “Send request”. The response, headers and timing will appear here.
More in this category
- One-shot coin bundle (OI, funding, liquidations, volume, long/short) /api/sd/coin
- Futures volume for one coin /api/sd/volume
- Derivatives coin screener /api/derivatives/coins
- Full derivatives coin table /api/derivatives/coins-full
- Derivatives candles for a coin /api/derivatives/kline
- RSI list per coin /api/derivatives/rsi
- MACD series for a coin /api/indicators/ta/macd/:coin
- Historical series for one coin /api/market/history
- Derivatives tickers aggregated per coin /api/market/tickers
- Derivatives volume ranking /api/market/volume-rank