Skip to main content
Every write endpoint accepts an Idempotency-Key header. Send one and a retried request replays the original response instead of performing the operation again. This matters because the case where your client times out is exactly the case where the request may already have succeeded. Without an idempotency key, a retried POST /v1/meetings creates a second meeting, spawns a second agent, and bills you for both — and nothing on your side can tell you it happened.

Choosing a key

Any unique string up to 255 characters. A UUID per logical operation is the usual choice. Generate it before the first attempt and reuse it for every retry of that same operation — a key generated inside the retry loop protects nothing.
Do not reuse a key for a different operation. A key is bound to the exact request that created it; reusing it with a different body is rejected, not silently reinterpreted.

Behaviour

Only successful (2xx) responses are stored. A failed write does not “use up” its key — otherwise a transient validation failure would lock you out of retrying the corrected request. Keys are scoped to your API key. Two workspaces choosing the same key string never collide.

Detecting a replay

A complete retry loop

Pairs with the backoff described in Errors — one key per operation, generated outside the loop.

Scope

Applies to POST, PUT, PATCH and DELETE on the public API. GET needs no key — reads are already idempotent, and the header is ignored there.