> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agentcard.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# order.updated

> A placed order moved to a new delivery stage: confirmed by the store, a courier on the way, picked up, arriving, delivered or canceled.

A placed order moved to a new delivery stage. Show your customer where their order is the moment it changes, without asking Agentcard. Agentcard reads a DoorDash order about once a minute from the time it is placed until it is delivered or canceled, and sends one `order.updated` for every stage it has not reported yet.

## Merchants that send this event

* DoorDash

An order at any other merchant sends no `order.updated`, and [`GET /buy/orders/{order_id}`](/api-reference/purchases/order) answers `tracking: not_available` for it.

```json theme={null}
{
  "id": "evt_4c3b2a1f0e9d",
  "type": "order.updated",
  "created": 1791248034,
  "livemode": true,
  "data": {
    "order_id": "9632435a-4d4d-48bb-869d-5d0e3bd1410b",
    "merchant": "doordash",
    "merchant_name": "DoorDash",
    "conversation_id": "conv_9a8b7c6d5e4f3a2b1c0d9e8f",
    "user_id": "usr_8f3k2m",
    "status": "arriving",
    "previous_status": "picked_up",
    "status_title": "Your Dasher is nearby",
    "status_detail": null,
    "estimated_arrival": {
      "earliest": "2026-10-06T00:53:20.000Z",
      "latest": "2026-10-06T00:55:20.000Z"
    },
    "picked_up_at": "2026-10-06T00:50:05.447Z",
    "delivered_at": null,
    "canceled_reason": null,
    "updated_at": "2026-10-06T00:53:54.000Z"
  }
}
```

## Follow an order's stages

`status` carries the stage in Agentcard's words, the same for every merchant. A DoorDash delivery walks the stages in this order:

| `status` | What happened |
| - | - |
| `confirmed` | The store accepted the order. |
| `courier_assigned` | A courier accepted the delivery and is heading to the store. |
| `courier_at_store` | The courier is at the store waiting for the order. |
| `picked_up` | The courier has the order and is on the way. `picked_up_at` is set. |
| `arriving` | The courier is close to the delivery address. |
| `delivered` | The order reached the customer. `delivered_at` is set, and Agentcard stops following the order. |
| `canceled` | The order will not arrive. `canceled_reason` carries the merchant's reason when it gives one, and Agentcard stops following the order. |

A pickup order reports `ready_for_pickup` in place of the courier stages. An order can skip a stage that happens between two reads: a courier who picks up and arrives within the same minute goes from `courier_at_store` to `arriving`, and `previous_status` names the stage you last heard.

`order.placed` already covers the moment an order is placed, so no `order.updated` reports `placed`.

## Show the merchant's own words

`status_title` and `status_detail` carry the merchant's own line for the stage, such as `Your Dasher is nearby`, ready to show as is. Either one is `null` when the merchant shows none.

`estimated_arrival` is the window the merchant quotes at the time of the change, or `null` when it quotes none. The window can move between stages without a new event. Read the latest window with [`GET /buy/orders/{order_id}`](/api-reference/purchases/order).

## Handle a repeated event

Agentcard sends each stage of an order under one event `id`. A delivery that failed and is retried arrives with the same `id`, so dedupe on `id`.

## Know when tracking stops

Agentcard stops following an order once it is delivered or canceled, six hours after it was placed, or once the merchant no longer lists the order. `GET /buy/orders/{order_id}` answers `tracking: ended` after that.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.