API version 2026-10-02

Status: Current.

Pin it by sending cp-api-version: 2026-10-02 on every request.

Its whole contract is published as YAML and JSON, and rendered in the API reference.

Breaking changes

A contacts export's result includes archived contacts

A result fetched at this version takes in the workspace's archived contacts as well as its active ones, each record flagged by its archived member. Trashed contacts are never exported.

Archived contacts count toward the export's limit of 10,000 records, so a workspace under the limit on its active contacts alone can be refused with 409 contacts_export_row_limit_exceeded. To migrate, skip the records whose archived is true if you want active contacts only.

Affected operations: POST /providers/{providerId}/contacts/export

A contacts export's result is refused when the workspace's custom fields exceed a bound this API publishes

The bound is more than 50 served fields, a key over 256 characters, a display name or option label over 1,000 characters, or a choice field with more than 5,000 options. At 2026-05-01, every record of such a workspace carries customFields: []. At this version, fetching the result answers 409 with the code unsupported_resource_state.

Affected operations: POST /providers/{providerId}/contacts/export

Moving from 2026-05-01

The version of the request that fetches an export's result decides what the result takes in, so the result's resultUrl can be fetched at either version while you move.

  1. Handle the archived member: skip archived records, or keep them, as your integration needs.
  2. Handle 409 unsupported_resource_state and 409 contacts_export_row_limit_exceeded when fetching a result.
  3. Fetch a result pinned to 2026-10-02 and check it, then change the cp-api-version header everywhere.