> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.chatbridge.mx/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.chatbridge.mx/_mcp/server.

# Delivery status

POST 

Notification of the delivery status of an outbound message.

The normal flow is `SENT` → `DELIVERED` → `READ`; the status never goes backwards, and `FAILED` and `EXPIRED` are terminal (no more events are received after them). Not all messages reach `READ`: it depends on whether the user has read receipts enabled, and `DELIVERED`/`READ` can arrive almost simultaneously.

An RCS send can consist of several cards/pieces; `data.message_index` indicates which piece the event refers to (0 = first).

Reference: https://docs.chatbridge.mx/rcs/webhooks/rcs-delivery-status-webhook

## Request

### Payload

- `origin` (enum, optional) — Origin of the message: direct API send (`API`) or bulk campaign send (`CAMPAIGN`).
  - Allowed values: `API`, `CAMPAIGN`
- `channel` (enum, optional) — RCS channel of the send, according to the type of the agent/template used.
  - Allowed values: `RCS_BASIC`, `RCS_SINGLE`, `RCS_CONVERSATIONAL`
- `message_id` (string, optional) — The same `message_id` returned by `POST /v1/rcs/messages`, except on inbound message events, where it identifies the inbound message itself.
- `status` (enum, optional) — Delivery status. It never goes backwards; `FAILED` and `EXPIRED` are terminal. `READ` depends on the user having read receipts enabled; `EXPIRED` means the message expired (`ttl_message`) without being delivered.
  - Allowed values: `SENT`, `DELIVERED`, `READ`, `FAILED`, `EXPIRED`
- `occurred_at` (datetime, optional) — Moment of the event.
- `timestamp` (string, optional) — Moment of the event as epoch seconds (string). Redundant with `occurred_at`; use whichever you prefer.
- `campaign_id` (string, optional) — Optional. Only present when `origin` is `CAMPAIGN` and the message belongs to a campaign; omitted otherwise.
- `data` (DeliveryStatusData, optional) — Event-specific content; its shape depends on the event type.

## Types

### DeliveryStatusData

- `sender_phone` (string, optional) — Recipient's number, international format with the 52 country code.
- `provider_id` (string, optional) — Provider-assigned id, useful to map individual messages.
- `message_index` (integer, optional) — Index of the piece of the send (0 = first card).