Event types
Know which business moments Aly can notify you about and what each payload contains.
Catalog of order, checkout_session, membership, and site events. Sample payloads and filter syntax.
Events fall into four families: order, checkout_session, membership, and site. Subscribe to only what you need — per-endpoint filters are part of registration.
Order events
| Type | When |
|---|---|
order.created | An order is persisted after successful checkout (Stripe, UCP, or x402). |
order.updated | Buyer info, shipping address, or line items changed post-creation. |
order.fulfilled | All line items have at least one fulfillment row recorded. |
order.partially_fulfilled | Some, not all, line items shipped. |
order.refunded | Full or partial refund processed by Stripe. |
order.cancelled | Cancelled by operator or buyer before fulfillment. |
order.return_requested | Buyer initiated a return. |
order.return_approved | Operator approved; RMA issued. |
order.return_received | Returned goods received in good condition. |
order.exchange_requested | Buyer initiated an exchange. |
order.exchange_approved | Operator approved exchange. |
Sample order.created
json
{ "id": "evt_8a1...e7c", "type": "order.created", "created_at": "2026-05-19T08:35:14.000Z", "site_slug": "acme", "data": { "order": { "id": "ord_72...4b", "currency": "USD", "totals": { "subtotal": 4200, "shipping": 500, "tax": 376, "discount": 0, "total": 5076 }, "buyer": { "email": "buyer@example.com" }, "items": [ { "id": "li_1", "product_id": "prod_abc", "variant_id": "var_1", "name": "Linen Tote — natural", "quantity": 1, "unit_price": 4200, "subtotal": 4200 } ], "shipping_address": { "country": "US", "state": "CA", "postcode": "94110" }, "payment": { "provider": "stripe", "intent_id": "pi_..." } } }}Checkout session events
| Type | When |
|---|---|
checkout_session.created | A new session (UCP or hosted) was created. |
checkout_session.updated | Line items, address, shipping option, or coupon changed. |
checkout_session.completed | Buyer paid; order_id populated. |
checkout_session.expired | Session expired without completion. |
checkout_session.cancelled | Explicitly cancelled. |
Membership events
| Type | When |
|---|---|
membership.subscriber.created | New subscription started (Stripe). |
membership.subscriber.updated | Plan changed or status changed. |
membership.subscriber.cancelled | Subscription cancelled. |
membership.subscriber.payment_failed | Renewal payment failed. |
Site events
| Type | When |
|---|---|
site.published | Site published (or republished). |
site.unpublished | Site taken offline. |
site.domain.attached | Custom domain attached; DNS verification still required. |
site.domain.verified | Domain DNS records verified and live. |
Filtering
At registration time, declare the events you want — either a list of exact types or the wildcard *. Aly only attempts delivery for matching events.
json
{ "url": "https://my-app.example/aly/webhooks", "events": ["order.created", "order.fulfilled", "order.refunded"], "site_slug": "acme", "active": true}Subscribing per-site vs per-workspace
Endpoints can be scoped to one site_slug or to the entire workspace (omit site_slug). Workspace-wide endpoints receive events for every site you own.
Was this page helpful?