A test checkout, end to end
In test mode, no money moves and no order email is sent. The flow walks the same code paths as production, including tax calculation and webhook delivery.
1. Create a cart
zephyr carts create --line-item prod_01HXY4M9C0AVE0M1QGPS9XK7T2:2
# → cart_01HXY4QH6QMEN0SEN1GHX7YK9C
2. Attach a customer
zephyr carts attach-customer cart_01HXY4QH6QMEN0SEN1GHX7YK9C \
--email "ali@example.com" \
--shipping-address-de
The --shipping-address-de flag uses a built-in test address for Germany — good enough to make
the tax engine happy.
3. Create a checkout session
zephyr checkouts create --cart cart_01HXY4QH6QMEN0SEN1GHX7YK9C
The response includes a checkout_url. In test mode that URL renders a sandbox payment form.
4. Complete with a test card
Open the checkout_url, enter card 4242 4242 4242 4242, any future expiry, any CVC, any postal
code. The session completes within ~2 seconds and emits two webhooks:
checkout.session.completedorder.created
See those land:
zephyr webhooks tail --event 'order.created'
What just happened
A new order resource exists at GET /v1/orders/{order_id}. In test mode it's flagged
livemode=false and is invisible to the production dashboard. Test orders are pruned after 30
days; keep the order id somewhere if you want to refer to it later.
You're done. Read How a request flows next for the mental model behind the API.