/api/meta/quality
GETAvailableFRESH

Data-quality matrix

Exchange × data-family matrix with FRESH / PARTIAL / STALE / BROKEN / UNAVAILABLE, source and fetch timestamps, lag, coverage and the reason for every gap.

GET/api/meta/quality

Request

Query parameters

NameTypeRequiredDefaultAllowed valuesDescription
exchangestringOptional——Return only this exchange (lower-case id, for example `binance`).
familystringOptional——Return only this data family (for example `oi`, `funding`, `liquidation`).

Example request

curl -s "https://www.coinboss.com/api/meta/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.

FieldTypeUnitDescription
successboolean—true when the request succeeded. On failure the body is `{ success: false, code, error, request_id }`.
schemastring—Schema id of this response (`coinboss.meta.quality/1`).
nownumbermsServer time when the response was built.
familiesarray—Data families judged per exchange (tickers, open interest, funding, liquidations, order books, options and others).
families[]object—One family: `id`, `scope`, `title`, `what`, `table`, `cadence` and `fresh_within_s`.
families[].idstring—Identifier.
families[].scopestring—`exchange` for families judged per exchange in `matrix`.
families[].titlestring—Display title of the family.
families[].whatstring—Short description of the data the family covers.
families[].tablestring—Name of the internal dataset the family is judged from; informational only.
families[].cadencestring—Plain-text collection schedule of the family; null when not stated.
families[].fresh_within_snumbersFreshness window: data newer than this counts as fresh.
exchangesarray—Exchanges.
exchanges[]string—Exchanges.
matrixobject—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.{*}.{*}object—Matrix keyed by row and column.
matrix.{*}.{*}.statusstring—Status.
matrix.{*}.{*}.lag_snumber|nullsNow minus the newest stored data timestamp of that exchange (first key) and family (second key); null when the family is unavailable there.
matrix.{*}.{*}.source_atnumber|nullmsTimestamp.
matrix.{*}.{*}.fetched_atnumber|nullmsWhen CoinBoss fetched the data from the source.
matrix.{*}.{*}.fresh_within_snumber|nullsFreshness window: data newer than this counts as fresh.
matrix.{*}.{*}.coverageobject|null—What is included and what is missing.
matrix.{*}.{*}.coverage.rowsnumber—Result rows. may be absent
matrix.{*}.{*}.coverage.rows_freshnumber—Rows updated inside the freshness window. may be absent
matrix.{*}.{*}.coverage.rows_usablenumber—Rows inside the usable window. may be absent
matrix.{*}.{*}.coverage.rows_orphannumber—Rows whose contract is no longer listed. may be absent
matrix.{*}.{*}.coverage.rows_invalidnumber—Rows rejected by validation. may be absent
matrix.{*}.{*}.reasonstring|null—Reason code.
matrix.{*}.{*}.coverage.rows_no_livenessnumbercountFunding rows on contracts with no evidence of live trading (delisted or no volume); left out of the freshness count. may be absent
matrix.{*}.{*}.coverage.rows_unknown_intervalnumbercountRecently updated funding rows whose settlement interval is unknown, so they cannot be normalised to 8 hours. may be absent
matrix.{*}.{*}.coverage.symbolsnumber—Symbols. may be absent
matrix.{*}.{*}.coverage.events_1hnumbercountLiquidation orders stored from the exchange in the last hour; minimum order sizes differ by exchange. may be absent
matrix.{*}.{*}.coverage.events_24hnumbercountLiquidation orders stored from the exchange in the last 24 hours; minimum order sizes differ by exchange. may be absent
matrix.{*}.{*}.viastring—Collection path. may be absent
matrix.{*}.{*}.coverage.booksnumbercountNumber of order books tracked. may be absent
matrix.{*}.{*}.coverage.books_freshnumbercountNumber of order books updated within the freshness window. may be absent
matrix.{*}.{*}.coverage.books_reaching_2pctnumbercountNumber of order books deep enough to cover ±2 % around mid. may be absent
matrix.{*}.{*}.coverage.contractsnumber—Per-contract rows. may be absent
matrix.{*}.{*}.coverage.contracts_freshnumbercountNumber of contracts updated within the freshness window. may be absent
matrix.{*}.{*}.coverage.with_mark_and_indexnumbercountNumber of contracts that have both a mark price and an index price. may be absent
matrix.{*}.{*}.coverage.delivery_contractsnumbercountNumber of delivery (dated) contracts. may be absent
matrix.{*}.{*}.notestring—Note. may be absent
matrix.{*}.{*}.coverage.coinsnumber—Coins. may be absent
matrix.{*}.{*}.coverage.rows_without_oinumbercountCoin-margined, USDC-margined or delivery contract rows that carry no open interest value in USD. may be absent
matrix.{*}.{*}.coverage.with_mark_ivnumbercountNumber of option contracts that have a mark implied volatility. may be absent
matrix.{*}.{*}.coverage.with_greeksnumbercountNumber of option contracts that have greeks. may be absent
datasetsarray—Quality checks of datasets that are not per exchange (for example spot ETF and CME daily data), each with status, lag, coverage and reason.
datasets[]object—One market-wide dataset that is not tied to a single exchange (options, spot ETFs, CME, order books, basis).
datasets[].familystring—Dataset id, for example `etf` or `cme`.
datasets[].idstring—Identifier.
datasets[].titlestring—Display name of the dataset.
datasets[].sourcestring—Where the value comes from.
datasets[].endpointstring—Public endpoint that serves the dataset.
datasets[].statusstring—Status.
datasets[].lag_snumbersAge of the newest data point when the response was built.
datasets[].source_atnumbermsTimestamp.
datasets[].fetched_atnumbermsWhen CoinBoss fetched the data from the source.
datasets[].fresh_within_snumbersFreshness window: data newer than this counts as fresh.
datasets[].coverageobject—What is included and what is missing.
datasets[].coverage.funds_totalnumbercountNumber of funds tracked. may be absent
datasets[].coverage.funds_coverednumbercountNumber of funds with a usable disclosure. may be absent
datasets[].coverage.funds_unavailablenumbercountNumber of funds whose issuer publishes no machine-readable disclosure. may be absent
datasets[].coverage.funds_failingnumbercountNumber of funds whose disclosure could not be read in the last collection round. may be absent
datasets[].coverage.as_ofstring—Newest disclosure date among covered funds (YYYY-MM-DD). may be absent
datasets[].coverage.as_of_minstring—Oldest disclosure date among covered funds (YYYY-MM-DD). may be absent
datasets[].reasonstring|null—Reason code.
datasets[].coverage.contractsnumber—Per-contract rows. may be absent
datasets[].coverage.report_datestring—Date of the newest CFTC Commitments of Traders report (YYYY-MM-DD). may be absent
datasets[].coverage.productsnumbercountNumber of CME products covered. may be absent
datasets[].coverage.trade_datestring—Trade date of the newest CME daily report (YYYY-MM-DD). may be absent
summaryobject—Summary block. dynamic keys: FRESH,PARTIAL,STALE,BROKEN,UNAVAILABLE
summary.{*}number—Summary block.
by_familyobject—Number of exchanges in each status, per family. Outer keys are family ids. dynamic keys: ticker,oi,funding,funding_settle,liquidation,ls
by_family.{*}object—Status counts of one family, keyed by status (`FRESH`, `PARTIAL`, `STALE`, `BROKEN`, `UNAVAILABLE`). dynamic keys: FRESH,PARTIAL,STALE,BROKEN,UNAVAILABLE
by_family.{*}.{*}numbercountNumber of exchanges with that status for that family.
alertsarray—Alerts of the data-quality patrol that are open or were resolved in the last 7 days, open ones first; filtered by the request parameters.
alerts[]object—One alert: `level`, `exchange`, `family`, `code`, `detail`, open / last-seen / resolved times, `hits` and `open`.
alerts[].levelstring—Level.
alerts[].exchangestring—Exchange id, lower case (for example `binance`).
alerts[].familystring—Data family the alert is about.
alerts[].codestring—Code.
alerts[].detailstring—Detail.
alerts[].opened_atnumbermsTimestamp.
alerts[].last_seen_atnumbermsTimestamp.
alerts[].resolved_atnumber|nullmsTimestamp.
alerts[].hitsnumbercountNumber of patrol runs (one every 5 minutes) that observed the condition since the alert opened.
alerts[].openboolean—Open price of the period.
monitorobject—Health of the monitoring itself: time and age of the last patrol run, `patrol_ok` and the age of the collector heartbeat.
monitor.patrol_last_run_atnumbermsTimestamp.
monitor.patrol_age_snumbersSeconds since the event.
monitor.patrol_okboolean—true when the patrol ran within the last 15 minutes; when false the `alerts` list may be outdated while the matrix stays live.
monitor.collector_heartbeat_age_snumbersSeconds since the event.
errorsnull—Map of family id to an error code for families whose quality check itself failed; null when every check ran.
legendobject—Plain-text definition of each cell status. dynamic keys: FRESH,PARTIAL,STALE,BROKEN,UNAVAILABLE
legend.{*}string—Definition of the status named by the key (`FRESH`, `PARTIAL`, `STALE`, `BROKEN`, `UNAVAILABLE`).
methodobject—Formula / method notes.
method.statusstring—Status.
method.lag_sstring—Plain-text statement of how `lag_s` is computed.
method.source_atstring—Date-time string.
method.fetched_atstring—Date-time string.
metaobject—Envelope of this response: schema id, producing system, timestamps, cache lifetime and freshness.
meta.schemastring—Schema id of this response; same value as the top-level `schema`.
meta.sourcearray—Where the value comes from.
meta.source[]object—Where the value comes from.
meta.source[].systemstring—System that produced the data; always `coinboss` for the developer-center endpoints.
meta.source[].componentstring—Component behind the data: the endpoint probe and the data-quality patrol.
meta.observed_atnull—Timestamp.
meta.received_atnumbermsTimestamp.
meta.fetched_atnumbermsWhen CoinBoss fetched the data from the source.
meta.windowstring—Window.
meta.cache_ttl_snumbersServer-side cache lifetime of this response.
meta.qualitystring—`FRESH` normally; `PARTIAL` when the quality patrol has not run within 15 minutes (only the alerts list is affected).
meta.is_staleboolean—true when the row is older than the freshness window; stale rows are not used in totals.
meta.fallbackstring—Plain-text note on what this endpoint returns when its inputs are stale or missing.

Generated 2026-11-11 23:01 UTC from 3 real responses.

Example response

/api/meta/quality · Real response captured 2026-11-13 03:53:46 UTC. Long arrays and maps are shortened for display: alerts had 11 items; legend had 5 items; matrix had 30 items; summary had 5 items; datasets had 12 items; families had 12 items.

  • {
    • "success": true,
    • "schema": "coinboss.meta.quality/1",
    • "now": 1794542026126,
    • "families": [
      • { … 7 },
      • { … 7 }
      ],
    • "exchanges": [
      • "aster",
      • "backpack",
      • "binance",
      • "bingx",
      • "bitfinex",
      • "bitget",
      • "bitstamp",
      • "bitunix"
      ],
    • "matrix": {
      • "aster": { … 2 },
      • "backpack": { … 2 }
      },
    • "datasets": [
      • { … 12 },
      • { … 12 }
      ],
    • "summary": {
      • "FRESH": 161,
      • "PARTIAL": 7
      },
    • "by_family": {
      • "ticker": { … 2 },
      • "oi": { … 2 }
      },
    • "alerts": [
      • { … 10 },
      • { … 10 }
      ],
    • "monitor": {
      • "patrol_last_run_at": 1794541745827,
      • "patrol_age_s": 281,
      • "patrol_ok": true,
      • "collector_heartbeat_age_s": 36
      },
    • "errors": null,
    • "legend": {
      • "FRESH": "newest stored data point is inside the fresh window for this family",
      • "PARTIAL": "some contracts / rows are outside the fresh window or miss a required field"
      },
    • "method": {
      • "status": "judged from data timestamps in CoinBoss storage every request (30 s in-process cache); a running collector process is not treated as evidence",
      • "lag_s": "now − newest stored data timestamp for the exchange / family",
      • "source_at": "newest stored data timestamp (exchange timestamp when the exchange provides one, otherwise collector receive time)",
      • "fetched_at": "last successful upstream call recorded by the collector health log; null for WebSocket feeds and collectors that do not log per-call health"
      },
    • "meta": {
      • "schema": "coinboss.meta.quality/1",
      • "source": [ … 1 ],
      • "observed_at": null,
      • "received_at": 1794542026978,
      • "fetched_at": 1794542026126,
      • "window": "latest",
      • "cache_ttl_s": 20,
      • "quality": "FRESH",
      • "is_stale": false,
      • "fallback": "matrix is always computed from storage; when the 5-minute patrol itself stops (monitor.patrol_ok=false) only the alerts list may be outdated"
      }
    }

Verified samples

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

ParametersHTTPLatencyResult
exchange=binance2001 msPass FRESH
family=funding2001 msPass FRESH

Checked 2026-11-13 03:29:27 UTC

Details

Authentication
None. Public endpoint.
Rate limit
1200 requests per minute per IP
Server cache
20s
Edge micro-cache
10s
Update frequency
Evaluated on request from the newest data timestamp of every exchange × family pair.
Data sources
CoinBoss raw tables (latest-row timestamps), collector health log. A running process is never counted as healthy data.
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:46 UTCHTTP 200887 msSchema matchesNewest data point 0s old

Availability, last 30 days

100% of 407 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/meta/qualityAvailable
Parameters

string — Return only this exchange (lower-case id, for example `binance`).

string — Return only this data family (for example `oi`, `funding`, `liquidation`).

Request URLhttps://www.coinboss.com/api/meta/quality
Choose an endpoint and press “Send request”. The response, headers and timing will appear here.