orderId immediately,
then poll until the codes are ready.
Statuses
The order was accepted and is being fulfilled. Poll again after
estimatedReadyAt.All codes were delivered. The response includes
products[].codes.Some - but not all - codes were delivered. The response includes
delivered, total, and
products[].codes for every code that was delivered (fewer than quantity on each line).
See Partial deliveries below.No codes were delivered. The response includes a
reason.Codes are returned when
status is completed or partially_completed. While
processing, you receive
{"status": "processing", "message": "Order is still processing"} with no codes.wallet snapshot with your current
balances and low-balance flag.
The flow
1
Place the order
POST /orders returns 202 Accepted with orderId, status: "processing",
estimatedReadyAt, and wallet.2
Wait for the estimate
estimatedReadyAt tells you roughly when codes will be ready. It scales with the order
size - small orders are near-instant; large orders take longer.3
Poll the order
GET /orders/{reference} by orderId or externalOrderCode. Repeat until you get a
terminal status (completed, partially_completed, or failed).Order pricing
Each line inorderProducts carries a unit price in minor units (validated against the catalog).
Multi-line example
Two fixed-price products totalling 15000 minor units (£100 + £50):Redemption codes
When an order completes - or partially completes - each line includes acodes array with
one object per delivered unit:
2 with two successful deliveries yields two { code } entries. On a
partially_completed order, codes.length may be less than quantity for a line.
Large orders
Use the samePOST /orders endpoint for any quantity. The response includes an
estimatedReadyAt timestamp that scales with the order size - larger orders may take longer
to complete.
Poll GET /orders/{reference} until you reach a terminal status. While the order is still
processing, you’ll see "message": "Order is still processing". When completed or
partially_completed, the response includes delivered codes in products[].codes.
Polling cadence
Poll at or after
estimatedReadyAt, then every minute or so. Avoid tight polling loops.Idempotency
Re-submitting the same
externalOrderCode returns the existing order - never a duplicate.Partial deliveries
If you receivepartially_completed:
- Save the codes in
products[].codes- these are the units that were delivered. - Compare
deliveredandtotal, and each line’scodes.lengthvsquantity, to see what is still outstanding. - Do not place a new order for the missing quantity - billing and idempotency risks apply.
- Contact support at [email protected] with your
orderIdandexternalOrderCodefor the remaining units.
Polling example
Node