Overview
After a checkout completes (hosted or headless), Henry creates an order and orchestrates fulfillment across one or more merchants. Useorders.list to fetch, filter, and monitor those orders from your backend.
Prerequisites
List orders
orders.list returns all orders for your application, newest first. It supports filtering and cursor-based pagination.
Filter by status
Filter by cart
Look up the order(s) tied to a specific cart:Paginate through results
Track order updates
Orders move through states asynchronously. You have two options:- Poll for status - query
orders.list(filtered bycartId) on an interval until the order reaches a terminal state. - Receive a webhook - use
settings.eventsoncart.createto fire a webhook when the order completes, avoiding polling entirely. See Universal Cart - Cart events.
Order statuses explained
| Status | What it means | Terminal? |
|---|---|---|
pending | Payment not yet confirmed | No |
processing | Payment accepted, placing items with merchants | No |
complete | Every item has concluded its purchase attempt - some may have succeeded, others may have failed. Check each item’s status individually. result.costs is populated. | ✅ |
cancelled | The order was cancelled at any stage - error field has details | ✅ |
Filter reference
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | number | 20 | Results per page (1–100) |
cursor | string | - | Pagination cursor from previous response |
status | "pending" | "processing" | "complete" | "cancelled" | - | Filter by order status |
cartId | string (UUID) | - | Return only orders from this cart |
Error handling
| Error | Cause |
|---|---|
401 Unauthorized | Invalid API key |
400 Bad Request | Invalid cartId format or out-of-range limit |
Empty data array | No orders found matching the filters |
status: "cancelled" | Check order.error for the failure reason |
Next steps
Checkout
Review both hosted and headless checkout flows
Universal Cart
Understand cart creation and item management