Skip to content
Docs
Get API Access
Browse the Documentation

Responses

The response envelope, the status block, request IDs, timestamps, nulls and coverage.

The Envelope

Every successful response is a JSON object with a status block and the answer in data. Cursor-paginated collections add pagination; the listings add sort; a market adds its ticker and liquidity beside data.

JSON
{
  "status": {
    "timestamp": "2026-10-11T14:00:00.000Z",
    "elapsed_ms": 18,
    "error_code": 0,
    "error_message": null,
    "request_id": "req_7Hk2pQ9xLm"
  },
  "data": [
    { "asset_id": "ast_515c3eaa72bd4a8b9403297879d78ef6", "quotes": { "USD": { "price": "0.1584" } } }
  ],
  "pagination": {
    "next_cursor": "eyJ2IjoxLCJvIjoyNX0"
  }
}
FieldMeaning
status.timestampWhen the API answered, UTC.
status.elapsed_msTime the API spent on the request, in milliseconds.
status.error_code0 on success; the numeric error code otherwise.
status.error_messagenull on success; the error text otherwise.
status.request_idIdentifies the request in our logs, prefixed req_. Log it beside your own request.
dataThe answer: an object for one record, an array for a collection, a map for keyed batches such as the simple price.
pagination.next_cursorOn paginated collections: the cursor for the next page, or null on the last one.

Failures replace data with an error object; see Errors.

Identifiers

Records are identified by stable, opaque CantonCap IDs with a prefix that names the kind: ast_ for assets, mkt_ for markets, pool_ for pools, iss_ for issuers and trd_ for trades. Venues have readable IDs such as temple, cantex, kora or tradecraft. Store IDs, not symbols: a symbol can be shared by several assets, an ID cannot. An asset is also identified on Canton by its instrument_admin and instrument_id, and GET /v1/assets/map resolves either form to the other.

Numbers

Prices, amounts, volumes, supplies and ratios are decimal strings such as "0.1584", never JSON numbers. Counts (trades, markets, positions) and durations are JSON integers. See Decimals and precision.

  • Percentages (price_changes_pct, price_change_24h_pct, change_24h_pct) are in percentage points: "1.5" means 1.5%, not 150%.
  • Ratios (liquidity_to_fdv_ratio, volume_24h_to_fdv_ratio) are raw: "0.025" displays as 2.5%. They carry 18 fractional digits and are not capped at 1.
  • Basis points are named so: spread_bps, fee_bps, impact_bps.

Time

  • Every time is an RFC 3339 string in UTC, such as 2026-10-11T14:00:00.000Z. Send times in the same form; an offset such as +02:00 is accepted.
  • Ranges include time_start and exclude time_end. On the quote, candle, chart, supply and trade history endpoints, a range without time_end ends now and a range without time_start starts 24 hours before its end.
  • History is returned newest first, and intervals with nothing in them are left out, never filled with zeros or carried-forward values.
  • Interval boundaries are aligned to UTC: an hourly bucket runs from :00 to :00.

Freshness Is Yours to Judge

There is no stale flag and no freshness wrapper. Every quote, observation and statistic carries its own last_updated_at: for a calculated asset price it is when the price was calculated, for a venue observation when the venue measured it. Compare it with the clock and decide what age your product accepts.

When the newest refresh of a statistic had no usable value, the API keeps the latest usable value with that value's own, older time, so an old timestamp is the signal. History is never forward-filled.

Null Means Unknown

null means the API does not have a value it can stand behind. It is never a stand-in for zero, and a measured zero is returned as "0". Render a null as an absence, not as 0.

  • market_cap is null for every asset: no reviewed circulating-supply methodology exists, and FDV is never substituted.
  • fdv is null when the total supply is missing, stale or withheld.
  • A price change for a window without data, such as 30d for a young asset, is null.
  • In batch responses, an ID or currency the API cannot answer for is left out rather than returned as null.

Coverage

Where a figure is a sum over observations that may be incomplete, it says how complete it is, so a partial subtotal is never read as a total:

  • quotes.*.volume.coverage and completeness fields are complete, partial or unknown.
  • Asset candles carry volume_coverage (complete, partial or unavailable) and volume_method.
  • Activity measurements carry covered_seconds and the methods behind each value.
Coverage Is Not a Rating
Coverage describes the observations behind one number. It says nothing about a venue's quality, and AMM and order-book differences are described by the market model instead.

Networks

Endpoints that take network default to mainnet and also accept testnet and devnet. Global metrics span every network and say so with network: "all".

Esc
navigateopenEscclose