The API is versioned in the URL. The current stable version is v1:
When a new major version is released, it will be exposed at a new URL prefix (e.g. v2). The old version continues to work in parallel for a deprecation window of at least 12 months so you have time to migrate.
What counts as breaking
A change is breaking (and therefore requires a new major version) if it:
- Removes an endpoint
- Removes or renames a request/response field
- Changes the type of an existing field
- Changes the semantics of an existing parameter (e.g. inverting a boolean’s meaning)
- Tightens validation in a way that previously-valid requests now fail
- Changes the URL structure of an existing endpoint
What counts as non-breaking
These changes can happen on the current major version without warning:
- Adding a new endpoint
- Adding a new optional field to a request
- Adding a new field to a response (always treat unknown response fields as ignorable in your code)
- Adding a new value to an enum (treat unknown enum values as a fallback case in your code, not a hard error)
- Performance and bug fixes that don’t change documented behaviour
When parsing responses, always tolerate unknown fields. JSON libraries do this by default in most languages — just don’t enable strict schema validation against an outdated copy of the spec, or you’ll break the next time we ship a non-breaking addition.
Deprecation process
When something on the current version is going to be removed in the next major version:
- We publish a deprecation notice in the changelog and email account owners.
- The endpoint continues to work for at least 6 months after the notice.
- During that window, responses include a
Deprecation header pointing at the replacement.
- The next major version omits the deprecated surface entirely.
Checking the version
Every response includes:
If you want to assert at request time that you’re hitting the version you expect, check this header in your client.