Skip to main content
Every mutating request requires an Idempotency-Key header. A request without one is rejected with 400 missing_idempotency_key. This is not optional and there is no way to opt out.

Behaviour

Keys are scoped to your application and the endpoint, and retained for 24 hours.
A different body under the same key returns an error rather than silently replaying the first response. Silently replaying would hide a real bug in your integration.

Choosing a key

Use something derived from the operation, not from the attempt. A UUID generated once per logical action and reused across retries is correct. A UUID generated fresh inside a retry loop defeats the mechanism entirely.

reference is not an idempotency key

reference is your own order id, unique per application, used for correlation and lookup:
They serve different purposes and you need both.