API catalog
Every public endpoint with its category, declared and live status, cache TTL, last probe result, plus rate limits and the error-code table.
/api/meta/catalogRequest
This endpoint takes no parameters.
Example request
curl -s "https://www.coinboss.com/api/meta/catalog"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 }`. |
| schema | string | — | Schema id of this response (`coinboss.meta.catalog/1`). |
| now | number | ms | Server time when the response was built. |
| api_version | string | — | Version of the public API (`v1`). |
| catalog_version | string | — | Version of the endpoint catalog, a release date such as `2026.11.11`. |
| base_path | string | — | Path prefix shared by all endpoints (`/api`). |
| summary | object | — | Summary block. |
| summary.total | number | — | Total. |
| summary.available | number | — | Whether data is available. |
| summary.partial | number | — | true when only part of the expected data is present. |
| summary.degraded | number | count | Number of endpoints whose live status is `degraded`. |
| summary.down | number | count | Number of endpoints whose live status is `down`. |
| summary.unavailable | number | — | Items for which no data is available, with reasons. Never reported as 0. |
| summary.unknown | number | count | Number of endpoints whose live status is `unknown` (no recent probe result). |
| probe | object | — | State of the endpoint probe behind the live statuses: last run time, its age, the interval and whether it is fresh. |
| probe.last_run_at | number | ms | Timestamp. |
| probe.age_s | number | s | Seconds since this row was last updated. |
| probe.interval_s | number | s | Planned interval between two probe runs (300). |
| probe.fresh | boolean | — | true when the last probe run is less than 20 minutes old; when false, endpoint statuses are reported as `unknown`. |
| probe.error | null | — | Error message (present only on failure). |
| categories | array | — | Endpoint categories that contain at least one endpoint, with per-status endpoint counts. |
| categories[] | object | — | One category: `id`, `title`, `desc` and the number of its endpoints in each status. |
| categories[].id | string | — | Identifier. |
| categories[].title | string | — | Display title of the category. |
| categories[].desc | string | — | One-sentence description of the category; null when none is written. |
| categories[].total | number | — | Total. |
| categories[].available | number | — | Whether data is available. |
| categories[].partial | number | — | true when only part of the expected data is present. |
| categories[].degraded | number | count | Number of endpoints of the category whose live status is `degraded`. |
| categories[].down | number | count | Number of endpoints of the category whose live status is `down`. |
| categories[].unavailable | number | — | Items for which no data is available, with reasons. Never reported as 0. |
| categories[].unknown | number | count | Number of endpoints of the category whose live status is `unknown`. |
| endpoints | array | — | Every documented endpoint with its live status. |
| endpoints[] | object | — | One endpoint: identity, path, declared and live status, cache lifetime, parameter names and the last probe result. |
| endpoints[].id | string | — | Identifier. |
| endpoints[].cat | string | — | Id of the category the endpoint belongs to. |
| endpoints[].kind | string | — | Kind. |
| endpoints[].method | string | — | Formula / method notes. |
| endpoints[].path | string | — | Request path of the endpoint; `:name` segments are path parameters. |
| endpoints[].title | string | — | Short display title of the endpoint. |
| endpoints[].summary | string | — | Summary block. |
| endpoints[].declared | string | — | Status declared in the catalog, independent of probing: `available`, `partial` or `unavailable`. |
| endpoints[].status | string | — | Status. |
| endpoints[].status_reason | string|null | — | Why `status` is not `available`, in plain text; null when it is. |
| endpoints[].stability | string | — | `stable`, `beta` (field set can change without the 90-day notice) or `legacy` (kept working, a replacement exists). |
| endpoints[].since | string|null | — | Start of the period. |
| endpoints[].ttl_s | number|null | s | Server-side cache lifetime of the endpoint's responses; null when it is not cached or not applicable. |
| endpoints[].params | array | — | Names of all parameters the endpoint accepts. empty in the samples used to generate this table |
| endpoints[].params[] | string | — | One parameter name. |
| endpoints[].required | array | — | Names of the parameters that must be sent. empty in the samples used to generate this table |
| endpoints[].probe | object | — | Last probe result of the endpoint: check time, HTTP status, `ok`, `schema_ok`, latency, size, data age, last success and failure streak; null when never probed. |
| endpoints[].probe.checked_at | number | ms | Timestamp. |
| endpoints[].probe.http | number | — | HTTP status of the most recent probe request. |
| endpoints[].probe.ok | boolean | — | `true` when the most recent probe request returned HTTP 200 with a valid JSON body. |
| endpoints[].probe.schema_ok | boolean | — | `true` when the probed response matched the documented field table; `null` when no field table exists. |
| endpoints[].probe.latency_ms | number | ms | Response time of the most recent probe request. |
| endpoints[].probe.bytes | number | bytes | Size of the probed response body. |
| endpoints[].probe.quality | null | — | `meta.quality` reported by the probed response (FRESH / PARTIAL / STALE …); `null` when the endpoint does not report it. |
| endpoints[].probe.data_age_s | number|null | s | Seconds since the event. |
| endpoints[].probe.last_ok_at | number | ms | Timestamp. |
| endpoints[].probe.fail_streak | number | count | Number of consecutive failed probes; 0 when the last probe succeeded. |
| endpoints[].required[] | string | — | One required parameter name. |
| rate_limit | object | — | Rate-limit rules of the public API. |
| rate_limit.window_s | number | s | Length of the counting window (60). |
| rate_limit.anonymous_per_min | number | count | Requests per minute allowed per client IP when no API key is sent. |
| rate_limit.scope | string | — | Text stating how requests are counted: per client IP when anonymous, per key when a `CB-API-KEY` header is sent. |
| rate_limit.key_tiers_per_min | object | — | Requests per minute allowed for each API-key tier, keyed by tier name. |
| rate_limit.key_tiers_per_min.hobbyist | number | count | Requests per minute for keys of the `hobbyist` tier. |
| rate_limit.key_tiers_per_min.startup | number | count | Requests per minute for keys of the `startup` tier. |
| rate_limit.key_tiers_per_min.standard | number | count | Requests per minute for keys of the `standard` tier. |
| rate_limit.key_tiers_per_min.professional | number | count | Requests per minute for keys of the `professional` tier. |
| rate_limit.exempt | array | — | Path patterns that are not counted against the limit. |
| rate_limit.exempt[] | string | — | One exempt path pattern, for example `/api/coin-icon/*`. |
| rate_limit.headers | array | — | Names of the response headers that report the rate-limit state. |
| rate_limit.headers[] | string | — | One header name, for example `X-RateLimit-Remaining`. |
| rate_limit.on_exceed | object | — | What is returned when the limit is exceeded: `http` status and error `code`. |
| rate_limit.on_exceed.http | number | — | HTTP status returned when the limit is exceeded (429). |
| rate_limit.on_exceed.code | string | — | Code. |
| errors | array | — | Error codes the API can return, each with HTTP status, meaning and retry advice. |
| errors[] | object | — | One error code. |
| errors[].code | string | — | Code. |
| errors[].http | number|string | — | HTTP status sent with this code; a string such as `501 / 503` when more than one applies. |
| errors[].meaning | string | — | What the error means. |
| errors[].retry | string | — | Advice on whether and how to retry. |
| errors[].legacy | boolean | — | Present and true only for the code used by older endpoints that answer HTTP 200 with `success: false`. may be absent |
| status_legend | object | — | Plain-text definition of each endpoint status. |
| status_legend.available | string | — | Whether data is available. |
| status_legend.partial | string | — | true when only part of the expected data is present. |
| status_legend.degraded | string | — | Definition of status `degraded`. |
| status_legend.down | string | — | Definition of status `down`. |
| status_legend.unavailable | string | — | Items for which no data is available, with reasons. Never reported as 0. |
| status_legend.unknown | string | — | Definition of status `unknown`. |
| meta | object | — | Envelope of this response: schema id, producing system, timestamps, cache lifetime and freshness. |
| meta.schema | string | — | Schema id of this response; same value as the top-level `schema`. |
| meta.source | array | — | Where the value comes from. |
| meta.source[] | object | — | Where the value comes from. |
| meta.source[].system | string | — | System that produced the data; always `coinboss` for the developer-center endpoints. |
| meta.source[].component | string | — | Component behind the data: the endpoint probe and the data-quality patrol. |
| meta.observed_at | null | — | Timestamp. |
| meta.received_at | number | ms | Timestamp. |
| meta.fetched_at | number | ms | When CoinBoss fetched the data from the source. |
| meta.window | string | — | Window. |
| meta.cache_ttl_s | number | s | Server-side cache lifetime of this response. |
| meta.quality | string | — | `FRESH` when the endpoint probe reported within the last 20 minutes, otherwise `STALE`. |
| meta.is_stale | boolean | — | true when the row is older than the freshness window; stale rows are not used in totals. |
| meta.fallback | string | — | Plain-text note on what this endpoint returns when its inputs are stale or missing. |
Generated 2026-11-11 23:01 UTC from 1 real responses.
Example response
/api/meta/catalog · Real response captured 2026-11-13 03:53:45 UTC. Long arrays and maps are shortened for display: errors had 9 items; endpoints had 299 items; categories had 21 items.
- "success"true
- "schema""coinboss.meta.catalog/1"
- "now"1794542025566
- "api_version""v1"
- "catalog_version""2026.11.12"
- "base_path""/api"
- "summary"
- "total"299
- "available"256
- "partial"17
- "degraded"17
- "down"8
- "unavailable"1
- "unknown"0
- "probe"
- "last_run_at"1794541726312
- "age_s"299
- "interval_s"300
- "fresh"true
- "error"null
- "categories"
- "endpoints"
- "rate_limit"
- "window_s"60
- "anonymous_per_min"1200
- "scope""per client IP for anonymous requests; per key when a CB-API-KEY header is sent"
- "key_tiers_per_min"
- "exempt"
- "headers"
- "on_exceed"
- "errors"
- "status_legend"
- "available""last probe returned HTTP 200 and the response matched the documented schema"
- "partial""works, but exchange / field coverage is incomplete (see status_reason)"
- "degraded""responding, but schema drift or stale data was detected by the last probe"
- "down""last probe failed"
- "unavailable""documented for completeness; no lawful public source yet, the endpoint returns nulls or is not served"
- "unknown""no probe result within the last 20 minutes"
- "meta"
- "schema""coinboss.meta.catalog/1"
- "source"
- "observed_at"null
- "received_at"1794541726312
- "fetched_at"1794542025566
- "window""latest"
- "cache_ttl_s"30
- "quality""FRESH"
- "is_stale"false
- "fallback""when the probe has not reported within 20 minutes every endpoint status becomes \"unknown\""
Details
- Authentication
- None. Public endpoint.
- Rate limit
- 1200 requests per minute per IP
- Server cache
- 30s
- Edge micro-cache
- 10s
- Update frequency
- Rebuilt on request from the catalog file and the latest probe results (probe runs every 5 minutes).
- Data sources
- CoinBoss endpoint catalog + sd_api_probe (results of real calls made by the API probe).
- Timestamps
- Unix epoch milliseconds (UTC) unless the field description says otherwise
- Response format
- json
- Stability
- Stable
- Available since
- 2026-11-11
Live status
Availability, last 30 days
100% of 408 checks passed
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
/api/meta/catalogAvailableNo parameters.
https://www.coinboss.com/api/meta/catalogMore 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