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

# Inbound message

POST 

Notification of free-form content the user sends without linking it to a specific suggestion, within the `ttl_events` window of the last message sent to that number. If the window already expired, the event is **discarded** and not notified.

The root `message_id` identifies the **inbound** message (not the outbound send); `data.related_message_id` points to the `message_id` of the most recent outbound message the conversation is associated with. The `data.message` object carries the canonical content and its shape depends on `type`: `TEXT` (`text`), `FILE` (`url`, `mime_type`, `file_name` — the file is already re-hosted in Chat Bridge storage, not the user's original), or `LOCATION` (`latitude`, `longitude`).

Reference: https://docs.chatbridge.mx/rcs/webhooks/rcs-inbound-message-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) — Identifier of the INBOUND message (not the outbound send). The related send travels in `data.related_message_id`.
- `status` (enum, optional) — Forced to `DELIVERED`; `data.action` is always `REPLY`.
  - 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` (InboundMessageData, optional) — Event-specific content; its shape depends on the event type.

## Types

### InboundMessageData

- `sender_phone` (string, optional) — Sender's number, international format with the 52 country code.
- `action` ("REPLY", optional) — Always `REPLY`; distinguishes the event type within the same webhook.
- `inbound_message_id` (string, optional) — Id of the inbound message (prefixed with `inbound_`). Same value as the root `message_id`.
- `related_message_id` (string, optional) — `message_id` of the most recent OUTBOUND message the conversation is associated with (within its `ttl_events` window).
- `message` (InboundMessageDataMessage, optional) — Canonical content of the inbound message; shape depends on `type`.

### InboundMessageDataMessage

Canonical content of the inbound message; shape depends on `type`.

- Text: InboundText
- File: InboundFile
- Location: InboundLocation

### InboundText

- `type` ("TEXT", optional)
- `text` (string, optional)

### InboundFile

Image, video, audio, or document.

- `type` ("FILE", optional)
- `url` (string, optional) — File already re-hosted in Chat Bridge storage (not the user's original).
- `mime_type` (string, optional)
- `file_name` (string, optional)

### InboundLocation

- `type` ("LOCATION", optional)
- `latitude` (double, optional)
- `longitude` (double, optional)