Network timeouts happen. externalRef — your own order id — makes POST /b2b/orders and POST /retailer/v1/checkouts safe to retry.
How it works
Send your internal order id (up to 128 characters) with the create call:
- First call creates the order and returns
201.
- Any repeat with the same
externalRef on the same surface returns 200 with the existing order — no duplicate charge, no duplicate fulfillment.
- Cross-surface reuse returns
409 CONFLICT: externalRef is unique per account across both surfaces, so a ref already used on /b2b cannot be reused on /retailer/v1 (and vice versa). Treat this as an integration bug, not a replay.
The retry recipe
Never generate a fresh externalRef per retry attempt — that defeats the mechanism and can double-charge your balance.
Reconciliation
externalRef is also a filter on the list endpoints, which makes reconciling against your own database a single call per order:
Webhook payloads echo externalRef too, so you can match events to your records without a lookup.
- Payment invoices — re-creating a payment with the same method refreshes the same provider invoice instead of creating a second one.
- Webhook deliveries — each delivery has a stable id (
whd_...) that retries reuse; deduplicate on it. See verifying signatures.