v1 or v2 — and the resolved version is echoed back
in an X-API-Version response header. This page documents the three ways to
select a version, the precedence rule between them, and the forward-compatibility
promise.
Selecting a version
You can pin a request to a version three ways. The first that matches wins.Path prefix (most explicit)
Prepend The path is visible in logs, curl examples, and Postman collections, so this
is the most reliable signal of intent.
/v1/ or /v2/ to the resource path:X-API-Version header
Send
X-API-Version: v1 or X-API-Version: v2. Case is ignored; whitespace
is trimmed.Path wins over header
If the path says one version and the header says another, the path wins. The path is what is stored in client code, examples, and tooling; the header is a softer override. The header only takes effect when no path prefix is present.Path beats header
Confirming the resolved version
Every customer-API response — success and error — carries anX-API-Version header set to the version that handled the request, once the
version has been resolved. (CORS preflight OPTIONS responses and the
last-resort 500 for a catastrophic internal failure are emitted before
version resolution and do not include it.) Inspect the header to confirm your
routing worked as intended:
Today: v1 and v2 are behaviourally identical
v2 is registered as a supported version, but it does not yet diverge from v1.
Every endpoint you call under /v2/ currently routes through the v1 handler and
returns the v1 response byte-for-byte. You can begin pointing integrations at
/v2/ today with zero risk of behavioural drift.
When the first v2-specific change ships, this page will document exactly which
endpoints differ and how, and the API Reference will gain a
version switcher.
Until that happens, choose whichever path style your tooling prefers. There
is no functional difference between
/v1/fiat-accounts,
/v2/fiat-accounts, and unversioned /fiat-accounts.Forward-compatibility promise
v1is stable. Bug fixes, additive fields, and new endpoints may land onv1, but no existing endpoint’s request or response contract will change in a way that breaks correctly-written clients.- Breaking changes — renamed fields, removed endpoints, altered semantics —
will only ever appear under a new version (
v2,v3, …). - A deprecation will be announced on this page and in release notes before its
successor version becomes the default. The default version (
v1) will not flip without a migration window.
Unsupported versions
Requesting a version that does not exist — for example/v3/fiat-accounts or
X-API-Version: v9 — returns HTTP 400 and the X-API-Version response header
is set to the rejected token so you can see what was parsed:
400 response
Logging and observability
The resolved version is persisted to theapi_request_logs.api_version column
for requests that reach logging — successful, failed, rate-limited,
unsupported-version, and invalid-key requests — so the operator dashboard can
track adoption of newer versions as they ship. (Requests that short-circuit
before logging — a missing API key, or a catastrophic internal failure — are
not recorded.)
Errors
The full error envelope used by per-endpoint failures.

