order.fulfilled
Sent when an order's fulfillment status reaches FULFILLED or a later status, with the order, its customer and their loyalty standing.
Use it to pass shipped orders to an ERP, a warehouse system or a marketing tool.
When it fires
- When an order's
fulfillment_statusrises fromPENDINGorPARTIALLY_FULFILLEDtoFULFILLEDorDELIVERED, including an order that already has that status when Cevoid first receives it. - If fulfillment is reopened and the order is fulfilled again, it fires again, as a new event.
- An order that goes straight to
DELIVEREDsends both this event andorder.delivered. - Orders imported as history (
ingestion_mode: "historical") start no Flows. To send events for past orders, choose Enroll historical orders in the menu of an active Flow: you get one event per order. profile,pointsandtierare missing when the order is linked to no profile.
Receive it
In Settings โ Flows, choose Create flow โ Forward event โ Webhook and pick the Order fulfilled trigger. See Set up a webhook.
The Content upload request, Product review request and Company review request actions can also send to a webhook from this trigger. Their data is different from the payload below.
Payload
{
"created_at": "2026-08-03T11:58:05.000Z",
"data": {
"order": {
"buyer": {
"email": "astrid.lindqvist@example.com",
"external_customer_id": "7391056823401",
"profile_id": "prf_c4n8x2q1m5v7rt"
},
"cancelled": false,
"created_at": "2026-07-30T14:21:12.000Z",
"currency": "SEK",
"financial_status": "PAID",
"fulfilled_at": "2026-08-03T11:58:00.000Z",
"fulfillment_status": "FULFILLED",
"id": "ord_7k2m4n8p5x9qwe",
"ingestion_mode": "live",
"lines": [
{
"discount": 0,
"external_line_id": "14829301776434",
"fulfillment_status": "FULFILLED",
"product_id": "8104729350194",
"quantity": 1,
"refund": 0,
"returned_units": 0,
"sku": "LINEN-SHIRT-M",
"unit_price": 1190,
"variant_id": "44637192855602"
}
],
"market_id": "mar_s3k8w1n5q2x7ye",
"money": {
"discount": 0,
"refunded": 0,
"shipping": 100,
"sub_total": 1190,
"tax": 258,
"total": 1290
},
"order_number": "#1043",
"paid_at": "2026-07-30T14:21:10.000Z",
"placed_at": "2026-07-30T14:21:09.000Z",
"source": {
"external_order_id": "5832917458994",
"type": "SHOPIFY"
},
"updated_at": "2026-08-03T11:58:03.000Z"
},
"points": {
"expiring_30d": 0,
"expiring_60d": 200,
"expiring_90d": 200,
"lifetime_earned": 3870,
"lifetime_spent": 2450,
"next_expiration_at": "2026-09-30T23:59:59.999Z",
"pending": 130,
"spendable": 1290,
"total": 1420
},
"profile": {
"country": "SE",
"created_at": "2026-03-14T08:12:44.000Z",
"email": "astrid.lindqvist@example.com",
"external_id": "7391056823401",
"first_name": "Astrid",
"id": "prf_c4n8x2q1m5v7rt",
"language": "sv",
"last_name": "Lindqvist",
"name": "Astrid Lindqvist",
"name_display_format": "FIRST_LAST_INITIAL",
"updated_at": "2026-08-03T11:58:02.000Z"
},
"tier": {
"current_tier": {
"expires_at": "2026-12-31T23:59:59.999Z",
"id": "tier_0m3v8k2q9x1sdf",
"name": "Silver"
},
"next_tier": {
"entry_rewards": [
{
"title": "15% off your next order",
"type": "DISCOUNT_CODE"
}
],
"id": "tier_5p7w2n4k8c1zyh",
"milestones": [
{
"current": 1420,
"percent_complete": 71,
"remaining": 580,
"required": 2000,
"type": "POINTS"
}
],
"name": "Gold",
"perks": [
{
"value": "Free shipping on every order"
}
]
}
}
},
"id": "4f1c9a2e-7b3d-8e61-9c05-2a8d6f4b1e73",
"origin": {
"flow": {
"id": "wfl_3p9v6d2s8k1mqa",
"name": "Send fulfilled orders to ERP"
}
},
"type": "order.fulfilled",
"version": 1
}Show all 115 linesShow fewer lines
typestringrequiredThe event type, always order.fulfilled.
idstring<uuid>requiredUnique event ID, the same value as the webhook-id header. Retries keep it; a replay gets a new one.
created_atstring<date-time>requiredWhen the delivery was scheduled to send, in ISO 8601 UTC: for a Flow, when its webhook action ran, after any Wait step. Retries and replays keep it.
versionintegerrequiredPayload version, currently 1.
originobjectWhy this destination received the event. Absent when no Flow sent it.
dataobjectrequiredThe order and its customer.