# Orders and fulfillment

> Recipes for driving the whole Shoplazza order lifecycle from your app: listen for order events, then manage, fulfill, and refund through the Open API.

Manage the full order lifecycle from your app: listen for order events, then fulfill, cancel, and refund through the Open API.

## A complete order flow

A typical order moves through these stages, and each step maps to one recipe:

1. **A buyer places and pays for an order.** Your app receives `orders/create` and `orders/paid` in real time — set this up in [Listen for order events](/docs/app/use-cases/orders-and-fulfillment/listen-for-order-events), then [look up the order](/docs/app/use-cases/orders-and-fulfillment/manage-orders) to read its details.
2. **You ship it.** Create a fulfillment and mark it complete in [Fulfill orders](/docs/app/use-cases/orders-and-fulfillment/fulfill-orders). The `orders/fulfilled` and `fulfillments/*` events confirm each change back to your app.
3. **You return money when needed.** Refund all or part of the order, or read a buyer-initiated return, in [Refunds and post-sales](/docs/app/use-cases/orders-and-fulfillment/refunds-and-post-sales). `orders/refunded` fires when a refund completes.
4. **You cancel when needed.** Cancel an unpaid order directly, or refund a paid one instead — both are in [Manage orders](/docs/app/use-cases/orders-and-fulfillment/manage-orders).

Jump straight to any recipe:

## What you can build

Following the recipes above, you can build the demo app below: a live order table that reacts to store events and drives fulfillment, refunds, and cancellations from your own backend.

![Orders and fulfillment demo: event feed, order table with per-row actions](https://cnres.appracle.com/deab78723259a56a6bd2c355c3405160.png)
