Guides / API basics
Idempotency
Networks fail. Retry a create with the same request, and Weav returns the payment or checkout the first one made, never a second one. Your external_reference_id is the key, so there’s nothing extra to send.
HTTP
POST /v1/payments
Authorization: Bearer wv_test_••••••••
Content-Type: application/json
{ "channel": "QR_PH", "currency": "PHP", "amount": 1250.00, "external_reference_id": "ORD-10541" }Rules
- On
POST /v1/paymentsandPOST /v1/checkouts. The rules work the same way for a checkout. - Same
external_reference_idand same body: you get the payment that request created, with the same201and the same fields, as it is now (so itsstatusmay have moved on), plus the headerIdempotent-Replayed: true. - Same
external_reference_idand a different body:409with code4090001. A reference belongs to one payment: if a customer retries an order, send a new reference such asORD-10541-2. - A reference that an earlier payment already has under another key:
422with code4220000(errorsnamesexternal_reference_id). This happens when the first request sent anIdempotency-Keyand the retry doesn’t, or sent a different one. Retry exactly as you sent the first request, or use a new reference for a new payment. - Same request while the first one is still running:
409with code4090002. Wait and retry. - A request that creates nothing (for example it fails validation) leaves the reference unused, so you can fix the cause and retry.
- Test and live mode are separate.
- A checkout’s
external_reference_idis optional. A checkout with no reference and noIdempotency-Keyis never matched to an earlier one, so each request makes a new checkout.
flowchart LR
K{Reference<br/>used before?} -->|No| N[201<br/>created]
K -->|Yes| B{First request<br/>still running?}
B -->|Yes| W[409, 4090002<br/>wait, then retry]
B -->|No| S{Same body?}
S -->|Yes| RP[201, the same one<br/>Idempotent-Replayed]
S -->|No| CF[409, 4090001<br/>use a new reference]Your own key (optional)
To use your own key, send an Idempotency-Key header, such as a new UUID for each new payment and the same one for every retry of it (up to 255 characters). Weav then matches retries on that key instead, with the same rules. Use one or the other for a payment, not both: a retry without the key you sent first is a new request, and its reference is already taken (422).
HTTP
Idempotency-Key: 7d1f6c0e-2b4a-4c9e-9f3d-6a1b8e2c5f10