Every money movement (/v4/collections, /v4/payouts/approve) requires an Idempotency-Key header — a unique string you generate per logical operation (UUIDv4 recommended). This closes the V3 double-pay gap where a timeout + retry could move money twice.
- Same key, same operation → the original result is returned; nothing is re-executed.
- Missing key →
400 missing_idempotency_key; nothing happens. - Collections are additionally idempotent on your
reference: re-submitting an existing reference returns its current state.
Retry recipe
- Generate the key before the first attempt; persist it with your order.
- On timeout or
5xx, retry with the same key (fresh nonce/timestamp/signature — those protect the transport, the key protects the operation). - Never reuse a key for a different operation.