Idempotency
Safely retry supported POST requests without creating duplicate work.
Idempotency
Use Idempotency-Key on supported non-streaming POST requests.
It is optional for these requests:
POST /v1/conversationsPOST /v1/messagesPOST /v1/conversations/{conversationId}/messagesPOST /v1/embed-sessions
It is required for asynchronous partner-user work:
POST /v1/integrations/{integration}/user-importsPOST /v1/integrations/{integration}/users/{external_user_id}/profile-changesPOST /v1/integrations/{integration}/users/{external_user_id}/deletionsPOST /v1/integrations/{integration}/users/{external_user_id}/reprovision
Behavior
- Matching retries replay the original response or return the same asynchronous operation.
- Reusing a key with a different request body returns
409 idempotency_conflict. - Treat the idempotency-key namespace as API-key-wide. Never reuse a key for another endpoint, action, or user; a matching retry must use the identical route, target, and payload.
- Reuse a launch key only for a retry of the same launch; every new iframe launch needs a new key.
- Streaming requests do not support
Idempotency-Key.
Header format
Generate and persist the key before sending the request. Use a request UUID or a composite value that includes the operation and your immutable external record ID. Do not include an email address, name, or other PII in the key.