Provenance
What a published figure tells you about how it was reached — and, just as precisely, what it does not.
CantonCap separates the value from the audit trail. The public API publishes the figure a venue or calculation produced, together with the time it was last updated. The evidence behind it — every observation considered, the checks it passed, and the operational state of the source that supplied it — is administrative, and reaching it needs an administrative key.
This split is deliberate and it is worth stating plainly, because most market-data sites blur it: a compact public payload is not the same as an unaccountable one. The audit trail exists, it is queryable, and this page says exactly where.
What a public quote carries
A quote is a map from convert currency to a figure. Every monetary value is an exact decimal string — never a JSON number — because Canton amounts routinely exceed IEEE-754 safe integer precision.
json
{
"asset_id": "ast_09fdff10fa834da7831fc92d1ac47f75",
"quotes": {
"USD": {
"price": "0.0412",
"market_cap": null,
"fdv": "412000000.00",
"volume_24h": "1840221.55",
"volume": { "method": "trades", "coverage": "partial", "change_24h_pct": "0.0731" },
"price_changes_pct": { "1h": "0.0021", "24h": "-0.0184", "7d": "0.0412", "30d": null },
"last_updated_at": "2026-09-08T13:28:00.000Z"
}
}
}Two fields carry more meaning than their size suggests. volume.coverage states whether every venue that trades the instrument contributed, and market_cap is null for every asset — no reviewed circulating-supply methodology exists for Canton instruments, so the honest answer is an absence rather than a number. Read a null as a statement, not a gap.
What it deliberately omits
A public figure does not carry per-observation provenance: no constituent list, no venue weights, no exclusion reasons, no calculation run identifier, and no confidence score. Those fields exist in the pipeline and are recorded — they are simply not published on the public surface.
What a public consumer can reconstruct is the observable spread. Ask /v1/assets/market-pairs/latest for an asset and you get every market that trades it, each with its own venue and ticker. The range across those venues, against the published aggregate, is a genuine measurement — and it is what the caliper on an asset page draws.
The administrative audit trail
Every observation is scored against 15 checks before it can support a published figure. A failure is recorded as a quality incident, addressable at /internal/v1/system/quality/incidents, and each incident names the stage that raised it and the check that failed.
Stages
source— Raised while reading from the venue itself, before any interpretation.normalization— Raised while mapping a venue's payload onto the canonical model.calculation— Raised while deriving a published figure from admitted observations.stream— Raised on the live delivery path rather than in stored data.dependency— Raised because something this stage relies on was itself unavailable.
Checks
They are stable identifiers, safe to branch on:
decimal_validity— The reported value did not parse as an exact decimal.timestamp_validity— The observation carried a missing or implausible time.identity_resolution— The record could not be tied to a known asset or market.price_validity— The price was non-positive or outside the bounds the instrument can take.reserve_validity— Pool reserves were inconsistent with the curve they claim to follow.book_crossed— The best bid exceeded the best ask, so the book was not internally consistent.book_empty— One or both sides of the book carried no levels to price against.sequence_gap— The source's sequence numbers skipped, so at least one update was missed.staleness— The observation was older than the freshness window for this calculation.price_outlier— The price sat outside the accepted dispersion band for its peers.supply_jump— Reported token supply moved further between observations than issuance allows.ohlc_invariant— A candle broke its own invariants — high below open, low above close, or similar.duplicate_event— The same source event arrived twice and was counted once.volume_reconciliation— Reported volume did not agree with the trades observed over the same window.dependency_availability— An input this figure depends on was not available when it was calculated.
Source availability
/v1/status/sources answers whether each venue is currently answering, and when it last did. It is deliberately coarse: availability is independent of age, so a lagging source still reports as available. The nine-state operational classification — lagging, degraded, stale, rate-limited, and the rest — is administrative.