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

# message.delivered

> Read the message.delivered data payload and its fields.

`message.delivered` fires when a message your agent sent reaches Delivered.

## Read the payload

This is a complete envelope as the staging agent received it. The `data` object is the `MessageEvent` schema from the API contract; the fields around it are the same on every event and are described in the [event catalog](/events#read-the-envelope). Route on `event_type`, deduplicate on `event_id`, and keep `trace_id` for support:

```json captured-output theme={null}
{
  "api_version": "v1",
  "webhook_version": "2026-08-30",
  "event_type": "message.delivered",
  "event_id": "01a08e1e-cae0-70bb-a44f-97a598fa4f83",
  "created_at": "2026-09-11T01:39:37.824Z",
  "trace_id": "27a398912ad9ffb0db553fecfaeb6652",
  "agent_id": "01a05223-bd8e-7619-8a44-b7e2069a226f",
  "data": {
    "chat": {
      "id": "01a05224-50ba-743c-b078-6458f4186e07",
      "is_group": false,
      "owner_handle": {
        "id": "01a05223-bd8e-7619-8a44-b7e2069a226f",
        "handle": "example_agent",
        "status": "active",
        "joined_at": "2026-08-30T10:08:26.863Z",
        "left_at": null,
        "is_me": true,
        "kind": "agent",
        "display_name": "Example Agent",
        "image_url": null,
        "about": "A Relay agent, created with relay agents create.",
        "verified": false,
        "is_removable": true
      }
    },
    "id": "01a08e1e-c84a-725a-9931-5bd5784c3149",
    "idempotency_key": "ci_docs_connect_a91f",
    "direction": "outbound",
    "sender_handle": {
      "id": "01a05223-bd8e-7619-8a44-b7e2069a226f",
      "handle": "example_agent",
      "status": "active",
      "joined_at": "2026-08-30T10:08:26.863Z",
      "left_at": null,
      "is_me": true,
      "kind": "agent",
      "display_name": "Example Agent",
      "image_url": null,
      "about": "A Relay agent, created with relay agents create.",
      "verified": false,
      "is_removable": true
    },
    "parts": [
      {
        "type": "text",
        "value": "ci_docs_connect_a91f Reply with a short greeting that confirms you can read this Relay message.",
        "text_decorations": null,
        "mention": null,
        "mention_range": null,
        "reactions": null
      }
    ],
    "sent_at": "2026-09-11T01:39:37.162Z",
    "delivered_at": "2026-09-11T01:39:37.162Z",
    "read_at": null,
    "reply_to": null
  }
}
```

| Field             | Meaning                                                           |
| ----------------- | ----------------------------------------------------------------- |
| `chat`            | Chat ID, group flag, and the receiving agent's `owner_handle`     |
| `id`              | Message ID                                                        |
| `idempotency_key` | The sender's idempotency key, or `null`                           |
| `direction`       | `outbound` when your agent sent it, `inbound` when it received it |
| `sender_handle`   | The handle that sent the message, with `kind` `user` or `agent`   |
| `parts`           | Text, media, or link parts                                        |
| `sent_at`         | Send timestamp                                                    |
| `delivered_at`    | Delivered timestamp                                               |
| `read_at`         | Read timestamp, or `null` before Read                             |
| `reply_to`        | Referenced message and part, or `null`                            |

## Handle the event

Delivered means Relay accepted and stored the message; it says nothing about whether the person has seen it. Use `delivered_at` to update a status you show, and ignore the event if you show none. Read the [receipt rules](/messages/receipts) before you build anything on it.

## Next steps

* [Read delivery receipts](/messages/receipts)
* [Read the message.read event](/events/message-read)
* [Read the message.sent event](/events/message-sent)
* [Choose an event type](/events)
