# order.delivered

> Sent when an order's fulfillment status becomes DELIVERED, with the order, its customer and their loyalty standing.

Breadcrumb: Webhooks › order.delivered · Updated: 2026-10-18
Docs index: https://docs.cevoid.com/developers/llms.txt

Use it for follow-ups that should wait until the customer has the product, such as a support check-in.

## When it fires

- When an order's `fulfillment_status` changes to `DELIVERED` from any other status, including an order that is already delivered when Cevoid first receives it.
- Only orders whose store or system reports deliveries reach `DELIVERED`. For the others, use [`order.fulfilled`](https://docs.cevoid.com/developers/webhooks/order-fulfilled.md).
- An order that goes straight to `DELIVERED` sends both `order.fulfilled` and this event.
- 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`, `points` and `tier` are missing when the order is linked to no profile.

## Receive it

In Settings → Flows, choose Create flow → Forward event → Webhook and pick the _Order delivered_ trigger. See [Set up a webhook](https://docs.cevoid.com/developers/webhooks/set-up.md).

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

```json title="Example payload"
{
  "created_at": "2026-08-06T15:02:06.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",
      "delivered_at": "2026-08-06T15:02:00.000Z",
      "financial_status": "PAID",
      "fulfilled_at": "2026-08-03T11:58:00.000Z",
      "fulfillment_status": "DELIVERED",
      "id": "ord_7k2m4n8p5x9qwe",
      "ingestion_mode": "live",
      "lines": [
        {
          "delivered_at": "2026-08-06T15:02:00.000Z",
          "discount": 0,
          "external_line_id": "14829301776434",
          "fulfillment_status": "DELIVERED",
          "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-06T15:02:04.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": "8a2d4c6e-1f3b-85a7-b9c1-d3e5f7a9b2c4",
  "origin": {
    "flow": {
      "id": "wfl_6n1k9w3p5x2qtd",
      "name": "Notify support when orders arrive"
    }
  },
  "type": "order.delivered",
  "version": 1
}
```

- `type` (`string`, required): The event type, always `order.delivered`.
- `id` (`string<uuid>`, required): Unique event ID, the same value as the `webhook-id` header. Retries keep it; a replay gets a new one.
- `created_at` (`string<date-time>`, required): When 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.
- `version` (`integer`, required): Payload version, currently `1`.
- `origin` (`object`): Why this destination received the event. Absent when no Flow sent it.
  - `origin.flow` (`object`, required): The Flow that sent the event.
    - `origin.flow.id` (`string`, required): Flow ID.
    - `origin.flow.name` (`string`, required): Flow name at the time of the delivery.
- `data` (`object`, required): The order and its customer.
  - `data.order` (`object`): The order, as `GET /v2/orders/{id}` returns it.
    - `data.order.id` (`string`, required): Cevoid order ID.
    - `data.order.ingestion_mode` (`string`): Processing mode of the latest order write. Historical mode suppresses automatic Flows. Live mode allows new lifecycle transitions to trigger Flows. Absent for orders without a live or historical mode. One of `live`, `historical`.
    - `data.order.source` (`object`, required)
      - `data.order.source.type` (`string`): System that owns this order. Absent when the order has no connected source. One of `SHOPIFY`, `WOOCOMMERCE`, `MYSTORE`, `NORDISK_EHANDEL`, `VISKAN`, `CENTRA`, `PUBLIC_API`, `OTHER`.
      - `data.order.source.connection_id` (`string`): Stable source namespace for the order. Absent when the order has no connected source.
      - `data.order.source.external_order_id` (`string`, required): Order identifier in the source system.
    - `data.order.order_number` (`string`): Customer-facing order number.
    - `data.order.buyer` (`object`): Buyer identity. Absent when the order carries no buyer information.
      - `data.order.buyer.email` (`string`): Buyer email as supplied by the source system.
      - `data.order.buyer.external_customer_id` (`string`): Customer identifier in the source system.
      - `data.order.buyer.profile_id` (`string`): Cevoid profile ID. Absent when no profile is linked to the order.
    - `data.order.placed_at` (`string<date-time>`, required): ISO 8601 timestamp when the order was placed.
    - `data.order.currency` (`string`, required): Three-letter uppercase ISO currency code.
    - `data.order.money` (`object`, required)
      - `data.order.money.total` (`number`, required): Current declared order total.
      - `data.order.money.sub_total` (`number`, required): Current merchandise subtotal.
      - `data.order.money.discount` (`number`): Current order-level discount total.
      - `data.order.money.tax` (`number`): Current order-level tax total.
      - `data.order.money.shipping` (`number`): Current order-level shipping total.
      - `data.order.money.refunded` (`number`): Cumulative refunded amount.
    - `data.order.fulfillment_status` (`string`, required): Current order fulfillment state. One of `PENDING`, `PARTIALLY_FULFILLED`, `FULFILLED`, `DELIVERED`.
    - `data.order.financial_status` (`string`, required): Current order payment state. One of `PENDING`, `PAID`, `PARTIALLY_REFUNDED`, `REFUNDED`.
    - `data.order.fulfilled_at` (`string<date-time>`): ISO 8601 timestamp when the order was fulfilled.
    - `data.order.delivered_at` (`string<date-time>`): ISO 8601 timestamp when the order was delivered.
    - `data.order.cancelled` (`boolean`, required): Whether the order is cancelled.
    - `data.order.cancelled_at` (`string<date-time>`): ISO 8601 timestamp when the order was cancelled.
    - `data.order.paid_at` (`string<date-time>`): ISO 8601 timestamp when the order was paid.
    - `data.order.last_refunded_at` (`string<date-time>`): ISO 8601 timestamp of the most recent refund.
    - `data.order.market_id` (`string`): Cevoid market ID.
    - `data.order.lines` (`object[]`, required)
      - `data.order.lines[].external_line_id` (`string`, required): Stable line identifier within the source order.
      - `data.order.lines[].product_id` (`string`): Product identifier in the source catalog. Absent when the line names no product.
      - `data.order.lines[].variant_id` (`string`): Variant identifier in the source catalog.
      - `data.order.lines[].sku` (`string`): Merchant SKU snapshot.
      - `data.order.lines[].quantity` (`integer`, required): Absolute ordered quantity.
      - `data.order.lines[].unit_price` (`number`, required): Price per unit in the order currency.
      - `data.order.lines[].discount` (`number`): Discount allocated to this line.
      - `data.order.lines[].refund` (`number`): Cumulative amount refunded for this line.
      - `data.order.lines[].returned_units` (`integer`): Absolute number of returned units.
      - `data.order.lines[].fulfillment_status` (`string`, required): Current fulfillment state for this line. One of `PENDING`, `PARTIALLY_FULFILLED`, `FULFILLED`, `DELIVERED`.
      - `data.order.lines[].delivered_at` (`string<date-time>`): ISO 8601 timestamp when this line was delivered.
      - `data.order.lines[].removed_at` (`string<date-time>`): Time the line was removed from the order.
    - `data.order.created_at` (`string<date-time>`, required): ISO 8601 timestamp when Cevoid created the order.
    - `data.order.updated_at` (`string<date-time>`, required): ISO 8601 timestamp when Cevoid last updated the order.
    - `data.order.removed_at` (`string<date-time>`): Time the order was deleted.
  - `data.profile` (`object`): The profile of the customer who placed the order. Absent when no profile is linked.
    - `data.profile.id` (`string`, required): Cevoid profile ID.
    - `data.profile.external_id` (`string`): Identifier this profile carries in the workspace source system, when known.
    - `data.profile.name` (`string`): Display name of the profile.
    - `data.profile.first_name` (`string`): First name of the profile.
    - `data.profile.last_name` (`string`): Last name of the profile.
    - `data.profile.email` (`string`): Email address for the profile.
    - `data.profile.avatar_url` (`string`): Profile image URL.
    - `data.profile.country` (`string`): Country code associated with the profile.
    - `data.profile.language` (`string`): Preferred language code associated with the profile.
    - `data.profile.location` (`string`): Free-form location associated with the profile.
    - `data.profile.social_instagram_handle` (`string`): Instagram handle associated with the profile.
    - `data.profile.social_tiktok_handle` (`string`): TikTok handle associated with the profile.
    - `data.profile.social_x_handle` (`string`): X handle associated with the profile.
    - `data.profile.birthday` (`string<date>`): Birthday in YYYY-MM-DD format.
    - `data.profile.name_display_format` (`string`): Preferred format for displaying the profile name. One of `FULL`, `FIRST_LAST_INITIAL`, `FIRST`, `ANONYMOUS`.
    - `data.profile.bio` (`string`): Profile biography text.
    - `data.profile.notes` (`string`): Internal notes about the profile.
    - `data.profile.created_at` (`string<date-time>`, required): ISO 8601 timestamp when the profile was created.
    - `data.profile.updated_at` (`string<date-time>`, required): ISO 8601 timestamp when the profile was last updated.
  - `data.points` (`object`): The profile's loyalty points. Only for workspaces with Loyalty, and only when the profile is a member.
    - `data.points.total` (`number`, required): Total active and pending points.
    - `data.points.spendable` (`number`, required): Active points available to spend.
    - `data.points.pending` (`number`, required): Earned points not active yet.
    - `data.points.expiring_30d` (`number`, required): Points expiring within 30 days.
    - `data.points.expiring_60d` (`number`, required): Points expiring within 60 days.
    - `data.points.expiring_90d` (`number`, required): Points expiring within 90 days.
    - `data.points.lifetime_earned` (`number`, required): Points earned over the membership lifetime.
    - `data.points.lifetime_spent` (`number`, required): Points spent over the membership lifetime.
    - `data.points.next_expiration_at` (`string<date-time>`): Earliest upcoming active-points expiration.
  - `data.tier` (`object`): The profile's tier standing. Only for workspaces with Loyalty, and only when the profile is a member.
    - `data.tier.current_tier` (`object | null`, required): The member's current tier; null without one.
      - `data.tier.current_tier.id` (`string`, required): Cevoid tier ID.
      - `data.tier.current_tier.name` (`string`, required): Display name of the tier.
      - `data.tier.current_tier.icon_url` (`string`): Optional icon representing the tier.
      - `data.tier.current_tier.expires_at` (`string<date-time>`): When the current tier expires, if tier evaluations expire.
    - `data.tier.next_tier` (`object | null`, required): The next tier the member can reach; null when there is none.
      - `data.tier.next_tier.id` (`string`, required): Cevoid tier ID.
      - `data.tier.next_tier.name` (`string`, required): Display name of the tier.
      - `data.tier.next_tier.icon_url` (`string`): Optional icon representing the tier.
      - `data.tier.next_tier.milestones` (`object[]`, required): Progress required for the next tier.
        - `data.tier.next_tier.milestones[].type` (`string`, required): Metric used to qualify for the next tier. One of `POINTS`, `AMOUNT_SPENT`, `NUMBER_OF_PURCHASES`.
        - `data.tier.next_tier.milestones[].required` (`number`, required): Required amount for the next tier. AMOUNT_SPENT values use major currency units.
        - `data.tier.next_tier.milestones[].current` (`number`, required): Current progress. AMOUNT_SPENT values use major currency units.
        - `data.tier.next_tier.milestones[].remaining` (`number`, required): Remaining amount. AMOUNT_SPENT values use major currency units.
        - `data.tier.next_tier.milestones[].percent_complete` (`number`, required): Progress percentage, capped at 100.
      - `data.tier.next_tier.entry_rewards` (`object[]`, required): Rewards granted at the next tier.
        - `data.tier.next_tier.entry_rewards[].type` (`string`, required): Reward type granted when the tier is reached.
        - `data.tier.next_tier.entry_rewards[].title` (`string`, required): Human-readable reward title.
        - `data.tier.next_tier.entry_rewards[].icon_url` (`string`): Optional icon representing the reward.
      - `data.tier.next_tier.perks` (`object[]`, required): Perks associated with the next tier.
        - `data.tier.next_tier.perks[].value` (`string`, required): Human-readable perk text.

## Related articles

- [order.fulfilled](https://docs.cevoid.com/developers/webhooks/order-fulfilled.md)
- [Event types](https://docs.cevoid.com/developers/webhooks/event-types.md)
- [Webhooks via Flows](https://docs.cevoid.com/flows/webhooks.md)

---

Canonical: https://docs.cevoid.com/developers/webhooks/order-delivered
