Skip to main content
The API uses dated versions (Stripe-style). A version pins a response shape, so an integration built against an older date keeps exactly that contract even as the API grows.

Pinning a version

Send the header on any request:
  • Omit the header to track the current version (2026-07-15).
  • A key may also carry a pinned version; precedence is request header → key pin → current.
  • An unknown value is 400 request.invalid_version.
  • The resolved version is echoed on every response’s Invoice-Version header.
Discover every version programmatically at GET /v1/versions (public, no auth):

Changelog

Current
Adds machine-navigable error and list metadata (both additive):
  • problem+json error bodies now include doc_url — an absolute deep-link to the matching row in the Error reference.
  • List envelopes now include url — the path the list was requested from.
A caller pinned to 2026-07-10 receives neither field, so an older integration’s response shape is unchanged.
Initial
Initial dated release — the first public API surface. problem+json bodies carry no doc_url; list envelopes carry no url.

Deprecation policy

When a version is scheduled for removal, every response served under it carries RFC 8594 headers: Migrate to a newer version before the Sunset instant. Neither shipped version is deprecated today.