Freeze tokens.
A number is only citable if you can get the exact same bytes back later. Every response carries a freeze token at meta.as_of; pass it back as ?as_of= and you replay the response as it was, months later, after the filing was restated, the upstream schema changed, or the ontology moved on.
What a freeze token is
A freeze token is an opaque string returned on every response at meta.as_of. It pins the response to a point in time: the data version, the ontology version, and the exact rows that were served. Replaying with the same token returns bit-identical bytes. The SHA-256of the body is part of the token’s contract.
meta, and you replay via a query param.Read it from meta.as_of, then replay by passing ?as_of=<token> on the same request.
Capture, then replay
Make a normal request and read meta.as_of from the response. Send it back to the same endpoint as ?as_of=<token> and you get the same response.
# 1. Capture the token from any response (it is at meta.as_of)
curl -s https://api.axiora.dev/v1/companies/7203/financials \
-H "Authorization: Bearer ax_live_•••" | jq -r '.meta.as_of'
# → "2026-05-22T06:35:04.512Z|v2.1.0|sha256:1f3b…"
# 2. Replay it months later — pass it as the ?as_of= query param
curl -s "https://api.axiora.dev/v1/companies/7203/financials?as_of=2026-05-22T06:35:04.512Z|v2.1.0|sha256:1f3b…" \
-H "Authorization: Bearer ax_live_•••"
# → byte-for-byte identical to the original responseThe quickstart walks through the same capture-and-replay flow against a live ownership query.
What it survives
A replay returns the original bytes even when, since you captured the token:
- EDINET restates a filing: a correction is a separate later filing; your frozen response still reflects what was served at capture time.
- The upstream schema changes: EDINET revises its XBRL taxonomy; the bytes you froze do not move.
- The ontology evolves: a new ontology version maps elements differently going forward; your token still resolves under the version it was computed with.
A frozen response is still a request. It counts against your daily and burst budgets like any other call, see Rate limits.
Exactly where it lives
The contract is two fields:
meta.as_of, inside the meta object, not a top-level field.?as_of=<token>, a query parameter on the same endpoint.