The header
You send it on the request; Endl echoes it back on the response.Request — you send
Response — Endl echoes
Format
YYYY-MM.<release> — the year and month the version was cut, plus a release
number within that month.
Validated against
^\d{4}-\d{2}\.\d+$.
Supported versions
New versions are added here as they ship. Pin the version you built against —
older supported versions keep their behaviour.
Validation and errors
The header is validated once, centrally, for the whole partner surface.400
CORS preflight is exempt. An
OPTIONS request needs no version header.Examples
A valid request carries both headers:Response
400
Why it works this way
Non-breaking evolution. New request and response shapes ship under a new version. The version you pinned is untouched. An explicit contract. Every call states the version it expects, so an upgrade is a deliberate change on your side rather than a surprise on ours. Confirmable. The response echoes the version that served it, so you can assert on it in monitoring and tests.Upgrading
When a new version ships, test your integration against it, then bump theApi-Version value you send. Nothing in your code path changes until you do.
This is separate from the webhook payload
schemaVersion, which is also
calendar-versioned but pinned per subscription rather than per request. See
payload schema versions.