Skip to content

Changelog

Changes that affect integrators. The current API version is 1.3.0, reported in the info.version field of the spec.

How to watch for changes

The machine-readable spec at /api/integrations/openapi.json is generated from the running code, so diffing it between deploys is the most reliable signal. This page records the changes worth a human explanation.

2026.09

API calls are no longer metered against a monthly quota. api_calls_used and api_calls_limit in GET /api/usage/current/ are now permanently 0, kept so existing clients keep parsing. If you displayed "API calls remaining" from those fields, it now reads zero of zero — read invoices_used / invoices_limit instead. Write operations are instead governed by a fair-use guard that returns 403 with code: fair_use_limit. See Usage and quotas.

A curated integration spec. /api/integrations/openapi.json and /api/integrations/docs publish only the surface an API key can actually call — 21 paths. The older /api/openapi.json shows the whole internal API including endpoints no key may use; it is not the integrator reference.

Search accepts q. Typeahead and list endpoints take q as the search parameter. The previous name, query, is still accepted for one release. Move to q.

Standing behaviours worth knowing

These are not new, but they surprise people often enough to state:

  • Validation errors are 400, not 422. The body is {"message": [ … ]} with an array.
  • Invoice creation is asynchronous. POST /api/invoices/ returns 202 and a location to poll. The task_id is informational; there is no task endpoint.
  • Identical invoice payloads are refused for five minutes with a 400. Poll before retrying a timed-out create.
  • There are no outbound webhooks. Polling is the supported pattern.
  • Reference data returns objects keyed by enum name, not arrays.
  • Revocation is immediate. No cache sits in front of key resolution.

Deprecations

What Status Do this
query search parameter Accepted for one more release Use q
api_calls_used / api_calls_limit Frozen at 0, retained for compatibility Use the invoice counters