Versioning
QairoPay uses dated API versions, like 2026-05-19. Each version is a frozen snapshot of the API contract. Once we publish a version, its behavior is stable forever.
Picking a version
There are three ways your requests get a version, in order of precedence:
- Per-request header —
QairoPay-Version: 2026-05-19. Overrides everything else, useful for one-off testing. - Pinned account version — the version selected in the dashboard. Set once, applies to all your traffic. This is what you should use in production.
- No version specified — requests pin to the version that was current when your tenant was created.
GET /v1/passesAuthorization: Bearer qp_sk_live_...QairoPay-Version: 2026-05-19The version that handled your request always echoes back in the QairoPay-Version response header.
What counts as a breaking change
We publish a new version when we ship a change that any of the following would break:
- A field is removed or renamed.
- A field’s type changes.
- A previously optional field becomes required.
- A response field that used to be present becomes absent in some cases.
- An enum value is removed.
- An error
codeis renamed or repurposed. - A previously-unauthenticated endpoint requires auth.
- A previously-allowed request becomes rejected.
We do not version for:
- New endpoints.
- New optional request fields.
- New response fields (clients should ignore unknown fields).
- New enum values (clients should handle unknown values gracefully).
- New error
codevalues within an existingtype. - Behind-the-scenes performance or infrastructure changes.
When we publish versions
Roughly one new version per quarter. Each version is announced via:
- An entry in the Changelog.
- An email to the contact on file.
- A dashboard banner shown to admins for 30 days.
A version is supported for at least 24 months after a newer version ships. We publish end-of-life dates in the changelog at the time of deprecation. Calls to a deprecated version receive a Sunset response header with the EOL date.
Bumping safely
- Read the changelog entry for the new version. It enumerates every breaking change.
- Test in sandbox by setting
QairoPay-Version: <new>per-request. Run your full test suite. - Roll out by switching the pinned version in your sandbox tenant.
- Once stable, switch the pinned version in your live tenant. There is no downtime — versions are negotiated per-request.
If you need to roll back, switch the pin back. Already-completed requests are unaffected.
SDK versioning
The TypeScript SDK ships a defaultApiVersion per major SDK release. Pin your tenant’s account version to that for the smoothest experience. Override per-call with { apiVersion: "..." } when you want a different one.