The version is in the path
A route carries its major version as the first path segment:/v1/.... There is no
version header and no per-program version setting. The version you call is the version you
get.
Versions are per route, not per API. A new major version is introduced for the routes
that need one; the rest stay where they are. Where a route exists on two versions, the
reference page for the older one names the newer one. Use the newest version for new work.
The older version is unchanged and stays supported: a new version never retires the old one
by itself.
Unprefixed paths are the exception. A few operations predate path versioning and are
still answered on paths without
/v1. Where a /v1 route exists for the same operation,
the unprefixed path is deprecated and follows the process below. Where no /v1 route
exists yet (search, reports, members and roles, cross-border, some customer-record
operations) the unprefixed path is the current one, and its page says so.What changes without a new version
Within a version we make additive changes without notice. Build your integration to tolerate them:
Field order in JSON is never significant.
What counts as a breaking change
Anything that could make a correct integration stop working:- Removing or renaming an endpoint, a response field, or a request field.
- Changing a field’s type or format: a string becoming a number, a timestamp changing shape, a pattern tightening.
- Making an optional request field, parameter, or header required.
- Removing a value from an enum, or changing what an existing value means.
- Removing an error response, or changing the HTTP status of an existing outcome.
- Changing the method of an existing route, or how it is authenticated.
- Removing a field from a webhook payload, or changing a signature scheme.
- A new version of the route. The old version keeps working unchanged.
- Deprecation and removal, following the process below, for something that has a replacement and shouldn’t be needed any more.
Deprecation
When a route or field is going away:- It’s marked. Deprecated endpoints and fields are flagged
deprecatedin the API Reference, and the page names the replacement. - It keeps working. A deprecated route behaves exactly as before for the whole notice period. Deprecation changes the docs, not the wire.
- You hear about it. We email your program’s technical contact when the deprecation starts, and again before removal.
- It stays for at least six months. Nothing is removed less than six months after it was marked deprecated. If your program is still calling it near the end of that period, we contact you before we switch it off.
Build for this
Three habits make an integration safe against everything above:- Ignore what you don’t recognise: extra fields, new enum values, new webhook events.
- Switch on status and
code, never onmessage. - Read the deprecation emails, and move to the named replacement when a page you use
says
deprecated.