Skip to main content

Basics

Response format

Every answer has the same envelope.
Match on error.code, never on the message text. Every answer also carries an x-request-id header. Quote it when you contact Record support. See Errors for every code.

Paging

Every list is paged.
Send limit for the page size and, for the next page, cursor set to the previous next_cursor. Keep going until has_more is false. Lists run oldest first. total can be null when you filter by a status that is worked out per item.

Idempotency

Send an Idempotency-Key header (a new UUID) on writes. A retry with the same key returns the first answer instead of doing the work twice, so a timeout never creates a duplicate.
  • Required on POST /workflows, POST /mandates, PUT /mandates/{mandate_id}/questions, POST /mandates/{mandate_id}/archive, POST /campaigns, POST /campaigns/{campaign_id}/candidates and POST /skill-requests. Optional on other writes.
  • Keys are kept for 24 hours per API key. A replayed answer has the header Idempotent-Replayed: true.
  • Only successful answers are kept. After an error, a retry with the same key runs again.
On a retry, reuse the Idempotency-Key but sign the request again. A signed write is accepted only once.

What you can read and change

  • Reads cover everything in your organisation, project and mode: objects made through the API and in the Record playground. is_external: true marks the ones made through the API.
  • Changes apply only to what you created through the API. Anything made in the playground answers 403 FORBIDDEN.
  • Test and live data are separate. A TEST key never sees live objects, and the reverse.
  • Deletes archive. Nothing is erased, and results stay readable.
  • Another organisation’s objects answer 404 NOT_FOUND.

Retrying