The complete ordering flow from menu to confirmed order:
After payment
After creating a payment intent, direct the diner to the atlas_pay_url to complete payment. Then poll POST /cart/order to confirm:
1. POST /payment_intents → get atlas_pay_url
2. Direct diner to atlas_pay_url
3. Poll POST /cart/order
- 422 → payment not yet complete, keep polling
- 200 → order confirmed, stop polling
POST /cart/order validates the payment in real-time against the payment processor. It does not depend on webhooks
- Payment succeeded → cart converts to a confirmed order, full order object returned
- Payment not completed →
422 with "Insufficient payment made to the cart"
POST /cart/order is idempotent — if called after the order is already created, it returns the existing order. Safe to retry