Versioning
How the API is versioned, what counts as a backwards-compatible change, and how to build an integration that keeps working.
The current API version is 2026-10-01, served under /api/v1. Every response carries it in the Api-Version header, and every event and webhook payload in its api_version field.
Backwards-compatible changes
We add to the API without a new version. Your integration must tolerate:
- new endpoints, and new optional request parameters;
- new fields in responses and event payloads (and new values in
metadata-like maps); - new event types (endpoints subscribed to
["*"]receive them); - new error codes, and new values of fields documented as open-ended (for example
OrderEvent.type, carrier codes); - new enum values for statuses — handle unknown values gracefully (for example treat an unknown order status as "in progress");
- changes to error messages (branch on
code, never onmessage); - the order of fields in JSON objects and of keys in maps.
Breaking changes
Removing or renaming a field, changing a type or the meaning of a value, or making an optional parameter required would break integrations. Such changes ship only in a new dated API version, announced in the changelog and by email well ahead of time, with a migration guide and a transition period.
Building a resilient integration
- Parse responses leniently: ignore unknown fields and unknown event types.
- Validate the fields you depend on, and log (don't crash on) unexpected values.
- Pin your SDK or HTTP client code to the fields documented in the objects reference.
- Watch the changelog — or the
api_versionof incoming events.