GETAvailable
Data-quality matrix (collector view)
Self-data layer: data-quality matrix (exchange × data family)
GET
/api/sd/qualityRequest
This endpoint takes no parameters.
Example request
curl -s "https://www.coinboss.com/api/sd/quality"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 }`. |
| now | number | ms | Server time when the response was built. |
| families | array | — | Data families checked for every exchange, in display order. |
| families[] | string | — | Family id: `ticker`, `oi`, `funding`, `funding_settle`, `liquidation`, `ls`, `spot` or `sd_contracts`. |
| exchanges | array | — | Exchanges. |
| exchanges[] | string | — | Exchanges. |
| matrix | object | — | Matrix keyed by row and column. dynamic keys: aster,backpack,binance,bingx,bitfinex,bitget |
| matrix.{*} | object | — | Matrix keyed by row and column. dynamic keys: ticker,oi,funding,funding_settle,liquidation,ls |
| matrix.{*}.ticker | object | — | Freshness of the exchange's futures tickers: `status`, row counts, `age_s` and the fresh / usable windows. Map keys are exchange ids. may be absent |
| matrix.{*}.ticker.status | string | — | Status. may be absent |
| matrix.{*}.ticker.rows | number | — | Result rows. may be absent |
| matrix.{*}.ticker.rows_fresh | number | — | Rows updated inside the freshness window. may be absent |
| matrix.{*}.ticker.rows_usable | number | — | Rows inside the usable window. may be absent |
| matrix.{*}.ticker.rows_orphan | number | — | Rows whose contract is no longer listed. may be absent |
| matrix.{*}.ticker.rows_invalid | number | — | Rows rejected by validation. may be absent |
| matrix.{*}.ticker.age_s | number | s | Seconds since this row was last updated. may be absent |
| matrix.{*}.ticker.fresh_within_s | number | s | Freshness window: data newer than this counts as fresh. may be absent |
| matrix.{*}.ticker.usable_within_s | number | s | Data older than this is not used at all. may be absent |
| matrix.{*}.oi | object | — | Open interest. may be absent |
| matrix.{*}.oi.status | string | — | Status. may be absent |
| matrix.{*}.oi.rows | number | — | Result rows. may be absent |
| matrix.{*}.oi.rows_fresh | number | — | Rows updated inside the freshness window. may be absent |
| matrix.{*}.oi.rows_usable | number | — | Rows inside the usable window. may be absent |
| matrix.{*}.oi.rows_orphan | number | — | Rows whose contract is no longer listed. may be absent |
| matrix.{*}.oi.rows_invalid | number | — | Rows rejected by validation. may be absent |
| matrix.{*}.oi.age_s | number | s | Seconds since this row was last updated. may be absent |
| matrix.{*}.oi.fresh_within_s | number | s | Freshness window: data newer than this counts as fresh. may be absent |
| matrix.{*}.oi.usable_within_s | number | s | Data older than this is not used at all. may be absent |
| matrix.{*}.funding | object | — | Funding rate block or value. may be absent |
| matrix.{*}.funding.status | string | — | Status. may be absent |
| matrix.{*}.funding.rows | number | — | Result rows. may be absent |
| matrix.{*}.funding.rows_fresh | number | — | Rows updated inside the freshness window. may be absent |
| matrix.{*}.funding.rows_usable | number | — | Rows inside the usable window. may be absent |
| matrix.{*}.funding.rows_orphan | number | — | Rows whose contract is no longer listed. may be absent |
| matrix.{*}.funding.rows_invalid | number | — | Rows rejected by validation. may be absent |
| matrix.{*}.funding.age_s | number | s | Seconds since this row was last updated. may be absent |
| matrix.{*}.funding.fresh_within_s | number | s | Freshness window: data newer than this counts as fresh. may be absent |
| matrix.{*}.funding.usable_within_s | number | s | Data older than this is not used at all. may be absent |
| matrix.{*}.funding.rows_unknown_interval | number | count | Funding rows updated in the last 4 hours whose settlement interval is unknown, so they cannot be normalised to 8 hours; any such row makes the cell `partial`. may be absent |
| matrix.{*}.funding.rows_no_next_time | number | ms | Timestamp. may be absent |
| matrix.{*}.funding.rows_no_liveness | number | count | Recently updated funding rows on contracts with no evidence of live trading (delisted or no volume); left out of the freshness count. may be absent |
| matrix.{*}.funding_settle | object | — | Freshness of the exchange's funding settlement history: `status`, `age_s` of the newest settlement, `symbols` and `history_from`. may be absent |
| matrix.{*}.funding_settle.status | string | — | Status. may be absent |
| matrix.{*}.funding_settle.age_s | number | s | Seconds since this row was last updated. may be absent |
| matrix.{*}.funding_settle.symbols | number | — | Symbols. may be absent |
| matrix.{*}.funding_settle.history_from | number | ms | Earliest record held. may be absent |
| matrix.{*}.funding_settle.fresh_within_s | number | s | Freshness window: data newer than this counts as fresh. may be absent |
| matrix.{*}.liquidation | object | — | Liquidation block. may be absent |
| matrix.{*}.liquidation.status | string | — | Status. may be absent |
| matrix.{*}.liquidation.via | string | — | Collection path. may be absent |
| matrix.{*}.liquidation.last_event_age_s | number|null | s | Seconds since the event. may be absent |
| matrix.{*}.liquidation.events_1h | number | count | Liquidation orders stored from this exchange in the last hour; minimum order sizes differ by exchange, so counts are not comparable. may be absent |
| matrix.{*}.liquidation.events_24h | number | count | Liquidation orders stored from this exchange in the last 24 hours; minimum order sizes differ by exchange, so counts are not comparable. may be absent |
| matrix.{*}.liquidation.ws_heartbeat_age_s | number|null | s | Seconds since the event. may be absent |
| matrix.{*}.liquidation.judged_by | string | — | Which timestamp the status was judged from. may be absent |
| matrix.{*}.liquidation.idle_ok_s | number | s | Longest gap without a liquidation that still counts as normal for this exchange; a longer gap marks the feed `stale`. may be absent |
| matrix.{*}.ls | object | — | Freshness of the exchange's long/short ratio rows: `status`, row counts, `age_s` and the fresh / usable windows. may be absent |
| matrix.{*}.ls.status | string | — | Status. may be absent |
| matrix.{*}.ls.reason | string | — | Reason code. may be absent |
| matrix.{*}.spot | object | — | Spot market block or value. may be absent |
| matrix.{*}.spot.status | string | — | Status. may be absent |
| matrix.{*}.spot.reason | string | — | Reason code. may be absent |
| matrix.{*}.sd_contracts | object | — | Freshness of the exchange's coin-margined, USDC-margined and delivery contract rows: `status`, row counts and `age_s`. may be absent |
| matrix.{*}.sd_contracts.status | string | — | Status. may be absent |
| matrix.{*}.sd_contracts.reason | string | — | Reason code. may be absent |
| matrix.{*}.funding_settle.reason | string | — | Reason code. may be absent |
| matrix.{*}.liquidation.reason | string | — | Reason code. may be absent |
| matrix.{*}.liquidation.note | string | — | Note. may be absent |
| matrix.{*}.ls.rows | number | — | Result rows. may be absent |
| matrix.{*}.ls.rows_fresh | number | — | Rows updated inside the freshness window. may be absent |
| matrix.{*}.ls.rows_usable | number | — | Rows inside the usable window. may be absent |
| matrix.{*}.ls.rows_orphan | number | — | Rows whose contract is no longer listed. may be absent |
| matrix.{*}.ls.rows_invalid | number | — | Rows rejected by validation. may be absent |
| matrix.{*}.ls.age_s | number | s | Seconds since this row was last updated. may be absent |
| matrix.{*}.ls.fresh_within_s | number | s | Freshness window: data newer than this counts as fresh. may be absent |
| matrix.{*}.ls.usable_within_s | number | s | Data older than this is not used at all. may be absent |
| matrix.{*}.spot.age_s | number | s | Seconds since this row was last updated. may be absent |
| matrix.{*}.spot.coins | number | — | Coins. may be absent |
| matrix.{*}.spot.fresh_within_s | number | s | Freshness window: data newer than this counts as fresh. may be absent |
| matrix.{*}.spot.note | string | — | Note. may be absent |
| matrix.{*}.sd_contracts.rows | number | — | Result rows. may be absent |
| matrix.{*}.sd_contracts.rows_fresh | number | — | Rows updated inside the freshness window. may be absent |
| matrix.{*}.sd_contracts.age_s | number | s | Seconds since this row was last updated. may be absent |
| matrix.{*}.sd_contracts.rows_without_oi | number | count | Contract rows that carry no open interest value in USD. may be absent |
| matrix.{*}.sd_contracts.rows_oi_promoted | number | count | Contract rows whose open interest is also counted in the site-wide open interest totals. may be absent |
| matrix.{*}.sd_contracts.fresh_within_s | number | s | Freshness window: data newer than this counts as fresh. may be absent |
| matrix.{*}.{*} | object | — | Matrix keyed by row and column. |
| matrix.{*}.{*}.status | string | — | Status. |
| matrix.{*}.{*}.reason | string | — | Reason code. may be absent |
| matrix.{*}.{*}.age_s | number | s | Seconds since this row was last updated. may be absent |
| matrix.{*}.{*}.coins | number | — | Coins. may be absent |
| matrix.{*}.{*}.fresh_within_s | number | s | Freshness window: data newer than this counts as fresh. may be absent |
| matrix.{*}.{*}.note | string | — | Note. may be absent |
| matrix.{*}.oi.reason | string | — | Reason code. may be absent |
| matrix.{*}.{*}.rows | number | — | Result rows. may be absent |
| matrix.{*}.{*}.rows_fresh | number | — | Rows updated inside the freshness window. may be absent |
| matrix.{*}.{*}.rows_usable | number | — | Rows inside the usable window. may be absent |
| matrix.{*}.{*}.rows_orphan | number | — | Rows whose contract is no longer listed. may be absent |
| matrix.{*}.{*}.rows_invalid | number | — | Rows rejected by validation. may be absent |
| matrix.{*}.{*}.usable_within_s | number | s | Data older than this is not used at all. may be absent |
| matrix.{*}.ticker.dead | boolean | — | Present only when `status` is `stale`: true when no row is inside the usable window either, so the exchange is excluded from aggregates. may be absent |
| matrix.{*}.funding.reason | string | — | Reason code. may be absent |
| matrix.{*}.liquidation.pipeline_last_event_age_s | number | s | Seconds since the event. may be absent |
| matrix.{*}.liquidation.node_heartbeat_age_s | number | s | Seconds since the event. may be absent |
| summary | object | — | Summary block. |
| summary.fresh | number | count | Number of exchange × family cells with status `fresh`. |
| summary.partial | number | — | true when only part of the expected data is present. |
| summary.stale | number | — | Rows or flag for data older than the freshness window. |
| summary.invalid | number | count | Number of exchange × family cells with status `invalid`. |
| summary.unavailable | number | — | Items for which no data is available, with reasons. Never reported as 0. |
| sources | array | — | Data sources. |
| sources[] | object | — | Data sources. |
| sources[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| sources[].family | string | — | Data family of the collector job the health record belongs to, for example `oi`, `funding`, `ticker`. |
| sources[].endpoint | string | — | Label of the upstream call being tracked: host and path of the public API that is polled, or the name of an internal check. |
| sources[].ok | boolean | — | false when the most recent attempt failed, i.e. the last error is newer than the last success. |
| sources[].last_ok_age_s | number|null | s | Seconds since the event. |
| sources[].last_err_age_s | number|null | s | Seconds since the event. |
| sources[].last_status | number | — | HTTP status of the most recent call. |
| sources[].last_error | string|null | — | Error text of the last failure, cut to 160 characters; null when none is recorded. |
| sources[].last_ms | number | ms | Duration of the most recent call; null when it was not measured. |
| sources[].fail_streak | number | count | Consecutive failed calls up to now; 0 after a success. |
| sources[].ok_count | number | count | Successful calls recorded in the health log. |
| sources[].err_count | number | count | Failed calls recorded in the health log. |
| sources[].http_429 | number | count | Failed calls answered with HTTP 429 (rate limited). |
| sources[].http_403 | number | count | Failed calls answered with HTTP 403 (forbidden). |
| sources[].http_5xx | number | count | Failed calls answered with an HTTP 5xx status. |
| sources[].timeouts | number | count | Failed calls that timed out. |
| errors | object | — | Map of family id to error message for families whose check itself failed; empty when every check ran. |
| alerts | array | — | Alerts of the data-quality patrol that are open or were resolved in the last 24 hours, open ones first (at most 200). |
| alerts[] | object | — | One alert: `level`, `exchange`, `family`, `code`, `detail`, open / last-seen / resolved times, `hits` and `open`. |
| alerts[].level | string | — | Level. |
| alerts[].exchange | string | — | Exchange id, lower case (for example `binance`). |
| alerts[].family | string | — | Data family the alert is about. |
| alerts[].code | string | — | Code. |
| alerts[].detail | string | — | Detail. |
| alerts[].opened_at | number | ms | Timestamp. |
| alerts[].last_seen_at | number | ms | Timestamp. |
| alerts[].resolved_at | number|null | ms | Timestamp. |
| alerts[].hits | number | count | Number of patrol runs (one every 5 minutes) that observed the condition since the alert opened. |
| alerts[].open | boolean | — | Open price of the period. |
| monitor | object | — | Health of the monitoring itself: age of the last patrol run, age of the collector heartbeat and `patrol_ok`. |
| monitor.alert_job_age_s | number | s | Seconds since the event. |
| monitor.collector_heartbeat_age_s | number | s | Seconds since the event. |
| monitor.patrol_ok | boolean | — | true when the patrol ran within the last 15 minutes; when false the `alerts` list may be outdated. |
| legend | object | — | Plain-text definition of each cell status. |
| legend.fresh | string | — | Definition of status `fresh`. |
| legend.partial | string | — | true when only part of the expected data is present. |
| legend.stale | string | — | Rows or flag for data older than the freshness window. |
| legend.invalid | string | — | Definition of status `invalid`. |
| legend.unavailable | string | — | Items for which no data is available, with reasons. Never reported as 0. |
Generated 2026-11-11 23:01 UTC from 1 real responses.
Example response
/api/sd/quality · Real response captured 2026-11-13 03:53:45 UTC. Long arrays and maps are shortened for display: alerts had 3 items; matrix had 29 items; sources had 262 items; exchanges had 29 items.
- "success"true
- "now"1794542017525
- "families"
- "ticker"
- "oi"
- "funding"
- "funding_settle"
- "liquidation"
- "ls"
- "spot"
- "sd_contracts"
- "exchanges"
- "aster"
- "backpack"
- "binance"
- "bingx"
- "bitfinex"
- "bitget"
- "bitstamp"
- "bitunix"
- "matrix"
- "aster"
- "backpack"
- "summary"
- "fresh"123
- "partial"7
- "stale"1
- "invalid"0
- "unavailable"101
- "sources"
- "errors"
- "alerts"
- "monitor"
- "alert_job_age_s"280
- "collector_heartbeat_age_s"35
- "patrol_ok"true
- "legend"
- "fresh""data timestamps within the fresh window"
- "partial""some rows outside the fresh window or missing a required field"
- "stale""no row within the fresh window (dead=true: also outside the usable window, excluded from aggregates)"
- "invalid""more than half of usable rows fail sanity checks"
- "unavailable""no public source or not collected; shown as —, never 0"
Details
- Authentication
- None. Public endpoint.
- Rate limit
- 1200 requests per minute per IP
- Server cache
- 20s
- Edge micro-cache
- 10s
- Update frequency
- matrix computed on request (20 s in-process memo); alert job every 5 min
- Window
- latest state; alerts open or resolved within the last 24 h
- Data sources
- Data-freshness matrix (exchange x data family) computed in-house from the timestamps of CoinBoss's own collected tables.
- Exchange coverage
- all venues present in any collected family; missing sources reported as unavailable with a reason
- Pagination
- alerts limited to 200
- Units
- status per cell: fresh | partial | stale | invalid | unavailable; ages in seconds
- Method
- fresh = >= 90% of live rows inside the family's freshness window (tickers 5 min, OI 15 min / cme 36 h, funding 15 min, long/short 90 min); liquidation feeds judged by WebSocket heartbeat or time since last event; funding settlements fresh within 9 h; spot snapshots within 30 min
- 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:53:45 UTCHTTP 2004 msSchema matchesNewest data point 5m old
Availability, last 30 days
100% of 407 checks passed
Schema drift detected by the last probe
- Returned but not documented: matrix.{*}.{*}.rows_unknown_interval, matrix.{*}.{*}.rows_no_next_time, matrix.{*}.{*}.rows_no_liveness, matrix.{*}.{*}.symbols, matrix.{*}.{*}.history_from, matrix.{*}.{*}.via, matrix.{*}.{*}.last_event_age_s, matrix.{*}.{*}.events_1h, matrix.{*}.{*}.events_24h, matrix.{*}.{*}.ws_heartbeat_age_s, matrix.{*}.{*}.judged_by, matrix.{*}.{*}.idle_ok_s
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/qualityAvailableParameters
No parameters.
Request URL
https://www.coinboss.com/api/sd/qualityChoose an endpoint and press “Send request”. The response, headers and timing will appear here.
More in this category
- Data-quality matrix (collector view) /api/sd/quality
- API catalog /api/meta/catalog
- Changelog and versioning policy /api/meta/changelog
- Endpoint documentation /api/meta/endpoint
- OpenAPI document /api/meta/openapi
- Data-quality matrix /api/meta/quality
- Service status /api/meta/status
- Checks whether a coin symbol is known to the platform /api/coin-exists
- Map of coin symbol to locally hosted icon path /api/coin-icons
- Coin-page aggregated summary /api/content/coin
- Site-wide section summary /api/content/summary
- Fiat FX rate table /api/currency/fx
- Map of exchange id to locally hosted icon path /api/exchange-icons
- Liveness check /api/health
- Research-page statistics /api/research/stats