v1 read surface is a stable, versioned contract you can wire a risk engine against.
The additive-only promise
Going forward we make only additive changes withinv1 — new fields and new endpoints —
never a breaking rename or removal. A breaking change would ship under a new prefix (v2)
with v1 left working. Concretely, you can rely on:
- Existing field names and their JSON types never change.
- New fields may appear at any time — tolerate unknown keys (don’t use strict/
deny_unknownparsing). - Values are formatted per the Response format conventions
(decimal strings, RFC3339 millisecond-
Ztimestamps) — a representation refinement is not a breaking change; parse numbers/dates, never compare exact byte strings.
One-time exception (2026-07-24). Before the first external integration,
v1 had a single
coordinated reshape to its final form — list endpoints gained the { ok, generated_at, count, data } envelope, the peg feed became a data array, and a few fields were renamed. This was a
pre-integration cleanup, done in place because no external consumer had integrated yet; the
changelog has the migration. The additive-only promise holds from that point on.This is distinct from the methodology version (e.g.
0.7.0), which describes the risk
model, not the wire contract. Read it at GET /v1/methodology/current;
every receipt is pinned to the methodology version that produced it.Deprecation
If an endpoint is ever slated for retirement, it will advertise it with standard HTTP signals — aDeprecation header and a Sunset date — well ahead of any change, so pollers
have a window to migrate. None are deprecated today.