Order Lifecycle
State machine
Section titled “State machine”Cart → Reserved → Payment → Paid → Fulfilled ↓ ↓declined → Cart refunded → PaidOrder statuses
Section titled “Order statuses”| Status | Description | Next |
|---|---|---|
pending | Order created, awaiting payment | confirmed, cancelled |
confirmed | Payment received | processing, on_hold, cancelled |
processing | Being prepared | completed, on_hold |
on_hold | Manual review | processing, cancelled |
completed | Shipped and delivered | refunded |
cancelled | Cancelled | — |
refunded | Payment refunded | — |
Checkout flow
Section titled “Checkout flow”POST /checkout/initiate— calculate tax, shipping ratesPOST /checkout/complete— create order, payment intent- Client confirms payment (Stripe/Airwallex)
POST /checkout/confirm— verify payment, finalize order
Fulfillment
Section titled “Fulfillment”Orders can be partially or fully fulfilled:
POST /api/v1/orders/:id/fulfillments{ "tracking_number": "1Z999AA10123456784", "carrier": "UPS", "items": [ { "order_item_id": "uuid", "quantity": 2 } ]}Multiple fulfillments per order for split shipments.
Events
Section titled “Events”Order state changes emit events:
order.createdorder.paidorder.shippedorder.completedorder.cancelledorder.refunded
Events trigger webhooks, emails, and analytics.
Inventory
Section titled “Inventory”Inventory is reserved when the order is created and decremented when fulfilled. Cancelled orders release the reservation.