Order lifecycle
Order and order-item statuses, and how to track deliveries reliably.
An order wraps the payment; each order contains an order item that represents the actual gift being issued and delivered. The two have separate statuses.
Order status
| Status | Meaning |
|---|---|
COMPLETED | Payment settled; the order is being (or has been) fulfilled |
PAYMENT_PENDING | Waiting for payment to settle |
PAYMENT_EXPIRED | Payment was not completed in time; the order will not be fulfilled |
CANCELLED | The order was cancelled |
For API orders paid from a prepaid balance, orders are typically COMPLETED immediately at creation.
Order item status
| Status | Meaning |
|---|---|
PENDING | Not yet delivered — issuing in progress, or waiting for the recipient to enter delivery details (recipient-provided flow) |
COMPLETED | Issued and delivered |
CANCELLED | Cancelled |
Tracking orders
There are no webhooks today — poll the order query APIs to track progress:
GET /v1/orders/{id}for a single order.GET /v1/orderswith filters (order_item_status=PENDING, date ranges,external_reference_id, etc.) for batch reconciliation. Note thatpageandelement_size(max 500) are required on this endpoint — e.g.GET /v1/orders?order_item_status=PENDING&page=0&element_size=100.
Practical guidance:
- Most digital orders complete within seconds to a few minutes. Poll at a modest interval (e.g. every 30–60 seconds for the first few minutes, then back off) and stay within the rate limit.
- Items in a recipient-provided flow can stay
PENDINGfor days — until the recipient accepts or the acceptance link expires. Checkdelivery.recipient.acceptance.expiry_daterather than treating long-PENDINGitems as failures. - For reconciliation jobs, query
GET /v1/ordersfiltered by yourexternal_reference_idvalues rather than storing only SodaGift order IDs.
Cancellations
Gift card orders are final — once placed, they cannot be cancelled. Double-check the product, amount, and recipient before ordering, and always pass an external_reference_id so retries can never create accidental duplicates. Test your integration in the Sandbox first.
Updated about 3 hours ago
Did this page help you?
