> 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.

# Message event

POST 

Chat Bridge notifies each event of a sent email through an HTTP POST request (webhook). Every event is notified, including repeated opens or clicks of the same message.

The normal flow is `SENT` → `DELIVERED`, followed by `OPENED` and `CLICKED` when the recipient interacts with it. `BOUNCED`, `SUPPRESSED` and `FAILED` are failures: the email did not reach the recipient. `SPAM` (complaint) and `UNSUBSCRIBED` are reported by the recipient's mailbox provider. `DELAYED` means the delivery is being retried. `device_type`, `ip` and `user_agent` are only present on `OPENED`, `CLICKED` and `SPAM` events; `device_type` is `PROXY` when the mailbox provider opened the email on behalf of the recipient. Your endpoint must accept `application/json` and respond with a 2xx HTTP code; the response body is ignored.

Reference: https://docs.chatbridge.mx/email/webhooks/email-message-event-webhook

## Request

### Payload

- `channel` (enum, optional)
  - Allowed values: `EMAIL`
- `identifier` (string, optional) — The `message_id` returned when sending.
- `email_address` (string, optional)
- `event` (enum, optional) — Event that just happened.
  - Allowed values: `SENT`, `DELAYED`, `DELIVERED`, `BOUNCED`, `SUPPRESSED`, `FAILED`, `OPENED`, `CLICKED`, `SPAM`, `UNSUBSCRIBED`
- `status` (string, optional, nullable) — Current status of the message after the event.
- `occurred_at` (datetime, optional)
- `detail` (string, optional, nullable) — Clicked link (`CLICKED`), bounce type (`BOUNCED`) or complaint type (`SPAM`).
- `device_type` (enum, optional)
  - Allowed values: `MOBILE`, `TABLET`, `DESKTOP`, `PROXY`, `UNKNOWN`
- `ip` (string, optional, nullable)
- `user_agent` (string, optional, nullable)