Skip to main content
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.