Idempotency keys are required on create and are part of the HMAC v2 canonical
string. Reusing a key with different semantic content returns
409.Errors
Non-success responses use one stable JSON problem envelope so merchants can log a request identifier without exposing request bodies or credentials.Error catalogue
Branch application logic on
code, not title or detail.
A create may also return:
Idempotency
POST /v2/payments requires an Idempotency-Key containing 16 to 128 ASCII
characters (letters, numbers, ., _, ~, -; first character alphanumeric).
Required behaviour
- Reuse the same key only with equivalent validated content
(
external_reference, amount fields, andmetadata). - Never reuse a key for another merchant order.
- If a response is lost, do not invent a new key or create a second logical payment.
- Treat
submission_unknownas unresolved, not as success or failure. - Make downstream fulfilment idempotent independently of API idempotency.
Ambiguous create outcome
If the connection closes before a complete create response:- Preserve the merchant reference, original request body, idempotency key, timestamped attempt record, and any returned request identifier.
- Do not send a new logical payment request with a different key.
- Do not promise the customer that creation failed.
- Replay the same signed logical create, or wait for webhook / retrieve
once you have a
payment_id. - Proceed only after an authoritative payment response or
payment.updatedevent.