# Message Events

`POST messageEvents`

Receive inbound messages and message status updates via webhook. See our guide for handling events with SDKs.

## Authentication

No authentication is required.

## Parameters

- `PINNACLE-SIGNING-SECRET` — header, string. Secret for verifying the authenticity of the request. Starts with `pss-` and is unique for each webhook. Find it at webhooks.

## Request body

Required.

Content type: `application/json`.

### Fields

- `type` — `string`, values: `MESSAGE.STATUS`, `MESSAGE.RECEIVED`. Type of webhook event. `MESSAGE.STATUS` for message status updates, `MESSAGE.RECEIVED` for inbound messages.
- `conversation` — `object`. Conversation metadata containing the conversation ID, sender, and recipient information.
- `conversation.id` — `string`. Unique identifier for the conversation. This identifier is a string that always begins with the prefix `conv_`, for example: `conv_1234567890`.

To get more conversation details, use the POST /conversations/get endpoint.
- `conversation.from` — `string`. Sender's phone number or agent ID.
- `conversation.to` — `string`. Recipient's phone number.
- `status` — `MessageStatusEnum`, values: `QUEUED`, `PENDING`, `SENT`, `SEND_FAILED`, `DELIVERED`, `DELIVERY_FAILED`, `RECEIVED`, `READ`, `FALLBACK_SENT`. Current status of the message.
- `direction` — `string`, values: `INBOUND`, `OUTBOUND`. Direction of the message flow.
- `segments` — `integer`. Number of segments for this message.
- `sentAt` — `string`. Timestamp when the message was sent in ISO 8601 format.
Null if the message has not been sent yet.
- `deliveredAt` — `string`, optional. Timestamp when the message was delivered in ISO 8601 format.
Null if not yet delivered or for inbound messages.
- `message` — `SMS Message | MMS Message | RCS Text Message | RCS Media Message | RCS Cards Message | RCS Button Data | RCS Location Data`. Content of an incoming or outgoing message. Discriminated by the `type` field.
- `message` Variant: SMS Message
- `message.type` — `string`, values: `SMS`. Message type identifier.
- `message.id` — `string`. Unique identifier of the message. This identifier is a string that always begins with the prefix `msg_`, for example: `msg_1234567890`.

To get the message details, use the GET /messages/{id} endpoint.
- `message.text` — `string`. Message content.
- `message` Variant: MMS Message
- `message.type` — `string`, values: `MMS`. Message type identifier.
- `message.id` — `string`. Unique identifier of the message. This identifier is a string that always begins with the prefix `msg_`, for example: `msg_1234567890`.

To get the message details, use the GET /messages/{id} endpoint.
- `message.mediaUrls` — `string[]`. URLs of media files in this message.

See supported media types.
- `message.text` — `string`, optional. Text content that may accompany the media files.
- `message` Variant: RCS Text Message
- `message.type` — `string`, values: `RCS_TEXT`. Message type identifier.
- `message.id` — `string`. Unique identifier of the message. This identifier is a string that always begins with the prefix `msg_`, for example: `msg_1234567890`.

To get the message details, use the GET /messages/{id} endpoint.
- `message.quickReplies` — `RichButton[]`. List of interactive quick reply buttons in the message.

**Limit:** 10 max
- `message.quickReplies[]` Variant: openUrl
- `message.quickReplies[].type` — `string`, values: `openUrl`
- `message.quickReplies[].webviewMode` — `string`, optional, values: `HALF`, `TALL`, `FULL`. Controls how the URL is displayed when the button is tapped.

**Default behavior:** If not specified, the URL opens in the device's default browser. If you're sending deeplinks, you should use this mode as it will open the deeplink in the native app if it is installed.

**Available modes in order of size:**
- `HALF` — Half-screen webview overlay
- `TALL` — Tall webview overlay
- `FULL` — Full-screen webview
- `message.quickReplies[].payload` — `string`, format: uri. The URL to open when the button is tapped. Must be a valid HTTP or HTTPS URL.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[]` Variant: call
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].payload` — `string`. Phone number to call in E.164 format
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `call`
- `message.quickReplies[]` Variant: trigger
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].payload` — `string`. Custom data sent to your webhook when the button is tapped. Use this to identify the user's choice.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `trigger`
- `message.quickReplies[]` Variant: requestUserLocation
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `requestUserLocation`
- `message.quickReplies[]` Variant: scheduleEvent
- `message.quickReplies[].eventDescription` — `string`, optional. Detailed description for the calendar event.
- `message.quickReplies[].eventEndTime` — `string`. End time in ISO 8601 format.
- `message.quickReplies[].eventStartTime` — `string`. Starting time in ISO 8601 format.
- `message.quickReplies[].eventTitle` — `string`. Title of the event.
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `scheduleEvent`
- `message.quickReplies[]` Variant: sendLocation
- `message.quickReplies[].type` — `string`, values: `sendLocation`
- `message.quickReplies[].name` — `string`, optional. Optional name or label for the location that will be displayed in the map app (e.g., "Central Park", "Home Office").

If not provided, the button title will be used as the location name.
- `message.quickReplies[].latLong` — `object`. Geographic coordinates of the location to share.
- `message.quickReplies[].latLong.lat` — `number`. Latitude coordinate in decimal degrees.
- `message.quickReplies[].latLong.lng` — `number`. Longitude coordinate in decimal degrees.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.text` — `string`, maximum length: 3000. Text content of the RCS message.
- `message` Variant: RCS Media Message
- `message.type` — `string`, values: `RCS_MEDIA`. Message type identifier.
- `message.id` — `string`. Unique identifier of the message. This identifier is a string that always begins with the prefix `msg_`, for example: `msg_1234567890`.

To get the message details, use the GET /messages/{id} endpoint.
- `message.media` — `string`, format: uri. URL of the media file.
- `message.quickReplies` — `RichButton[]`. List of interactive quick reply buttons in the message.

**Limit:** 10 max
- `message.quickReplies[]` Variant: openUrl
- `message.quickReplies[].type` — `string`, values: `openUrl`
- `message.quickReplies[].webviewMode` — `string`, optional, values: `HALF`, `TALL`, `FULL`. Controls how the URL is displayed when the button is tapped.

**Default behavior:** If not specified, the URL opens in the device's default browser. If you're sending deeplinks, you should use this mode as it will open the deeplink in the native app if it is installed.

**Available modes in order of size:**
- `HALF` — Half-screen webview overlay
- `TALL` — Tall webview overlay
- `FULL` — Full-screen webview
- `message.quickReplies[].payload` — `string`, format: uri. The URL to open when the button is tapped. Must be a valid HTTP or HTTPS URL.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[]` Variant: call
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].payload` — `string`. Phone number to call in E.164 format
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `call`
- `message.quickReplies[]` Variant: trigger
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].payload` — `string`. Custom data sent to your webhook when the button is tapped. Use this to identify the user's choice.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `trigger`
- `message.quickReplies[]` Variant: requestUserLocation
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `requestUserLocation`
- `message.quickReplies[]` Variant: scheduleEvent
- `message.quickReplies[].eventDescription` — `string`, optional. Detailed description for the calendar event.
- `message.quickReplies[].eventEndTime` — `string`. End time in ISO 8601 format.
- `message.quickReplies[].eventStartTime` — `string`. Starting time in ISO 8601 format.
- `message.quickReplies[].eventTitle` — `string`. Title of the event.
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `scheduleEvent`
- `message.quickReplies[]` Variant: sendLocation
- `message.quickReplies[].type` — `string`, values: `sendLocation`
- `message.quickReplies[].name` — `string`, optional. Optional name or label for the location that will be displayed in the map app (e.g., "Central Park", "Home Office").

If not provided, the button title will be used as the location name.
- `message.quickReplies[].latLong` — `object`. Geographic coordinates of the location to share.
- `message.quickReplies[].latLong.lat` — `number`. Latitude coordinate in decimal degrees.
- `message.quickReplies[].latLong.lng` — `number`. Longitude coordinate in decimal degrees.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message` Variant: RCS Cards Message
- `message.type` — `string`, values: `RCS_CARDS`. Message type identifier.
- `message.id` — `string`. Unique identifier of the message. This identifier is a string that always begins with the prefix `msg_`, for example: `msg_1234567890`.

To get the message details, use the GET /messages/{id} endpoint.
- `message.cards` — `object[]`. Collection of cards attached to the message.

**Limit:** 1 to 10
- `message.cards[].buttons` — `RichButton[]`. Action buttons attached to the card.

**Limit:** 4 max
- `message.cards[].buttons[]` Variant: openUrl
- `message.cards[].buttons[].type` — `string`, values: `openUrl`
- `message.cards[].buttons[].webviewMode` — `string`, optional, values: `HALF`, `TALL`, `FULL`. Controls how the URL is displayed when the button is tapped.

**Default behavior:** If not specified, the URL opens in the device's default browser. If you're sending deeplinks, you should use this mode as it will open the deeplink in the native app if it is installed.

**Available modes in order of size:**
- `HALF` — Half-screen webview overlay
- `TALL` — Tall webview overlay
- `FULL` — Full-screen webview
- `message.cards[].buttons[].payload` — `string`, format: uri. The URL to open when the button is tapped. Must be a valid HTTP or HTTPS URL.
- `message.cards[].buttons[].title` — `string`, maximum length: 25. Display text for the button.
- `message.cards[].buttons[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.cards[].buttons[]` Variant: call
- `message.cards[].buttons[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.cards[].buttons[].payload` — `string`. Phone number to call in E.164 format
- `message.cards[].buttons[].title` — `string`, maximum length: 25. Display text for the button.
- `message.cards[].buttons[].type` — `string`, values: `call`
- `message.cards[].buttons[]` Variant: trigger
- `message.cards[].buttons[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.cards[].buttons[].payload` — `string`. Custom data sent to your webhook when the button is tapped. Use this to identify the user's choice.
- `message.cards[].buttons[].title` — `string`, maximum length: 25. Display text for the button.
- `message.cards[].buttons[].type` — `string`, values: `trigger`
- `message.cards[].buttons[]` Variant: requestUserLocation
- `message.cards[].buttons[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.cards[].buttons[].title` — `string`, maximum length: 25. Display text for the button.
- `message.cards[].buttons[].type` — `string`, values: `requestUserLocation`
- `message.cards[].buttons[]` Variant: scheduleEvent
- `message.cards[].buttons[].eventDescription` — `string`, optional. Detailed description for the calendar event.
- `message.cards[].buttons[].eventEndTime` — `string`. End time in ISO 8601 format.
- `message.cards[].buttons[].eventStartTime` — `string`. Starting time in ISO 8601 format.
- `message.cards[].buttons[].eventTitle` — `string`. Title of the event.
- `message.cards[].buttons[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.cards[].buttons[].title` — `string`, maximum length: 25. Display text for the button.
- `message.cards[].buttons[].type` — `string`, values: `scheduleEvent`
- `message.cards[].buttons[]` Variant: sendLocation
- `message.cards[].buttons[].type` — `string`, values: `sendLocation`
- `message.cards[].buttons[].name` — `string`, optional. Optional name or label for the location that will be displayed in the map app (e.g., "Central Park", "Home Office").

If not provided, the button title will be used as the location name.
- `message.cards[].buttons[].latLong` — `object`. Geographic coordinates of the location to share.
- `message.cards[].buttons[].latLong.lat` — `number`. Latitude coordinate in decimal degrees.
- `message.cards[].buttons[].latLong.lng` — `number`. Longitude coordinate in decimal degrees.
- `message.cards[].buttons[].title` — `string`, maximum length: 25. Display text for the button.
- `message.cards[].buttons[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.cards[].media` — `Media Details`, optional. Metadata about the media file in the message.
- `message.cards[].media.fullPath` — `string`, optional. Path to the file in Pinnacle's storage.
- `message.cards[].media.mimeType` — `string`. Detected MIME type of the media file.
- `message.cards[].media.url` — `string`. Direct URL to the media file.
- `message.cards[].subtitle` — `string`, optional. Secondary text displayed below the title for additional context.
- `message.cards[].title` — `string`. Title displayed on the card.
- `message.quickReplies` — `RichButton[]`, default: []. List of interactive quick reply buttons in the message.

**Limit:** 10 max
- `message.quickReplies[]` Variant: openUrl
- `message.quickReplies[].type` — `string`, values: `openUrl`
- `message.quickReplies[].webviewMode` — `string`, optional, values: `HALF`, `TALL`, `FULL`. Controls how the URL is displayed when the button is tapped.

**Default behavior:** If not specified, the URL opens in the device's default browser. If you're sending deeplinks, you should use this mode as it will open the deeplink in the native app if it is installed.

**Available modes in order of size:**
- `HALF` — Half-screen webview overlay
- `TALL` — Tall webview overlay
- `FULL` — Full-screen webview
- `message.quickReplies[].payload` — `string`, format: uri. The URL to open when the button is tapped. Must be a valid HTTP or HTTPS URL.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[]` Variant: call
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].payload` — `string`. Phone number to call in E.164 format
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `call`
- `message.quickReplies[]` Variant: trigger
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].payload` — `string`. Custom data sent to your webhook when the button is tapped. Use this to identify the user's choice.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `trigger`
- `message.quickReplies[]` Variant: requestUserLocation
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `requestUserLocation`
- `message.quickReplies[]` Variant: scheduleEvent
- `message.quickReplies[].eventDescription` — `string`, optional. Detailed description for the calendar event.
- `message.quickReplies[].eventEndTime` — `string`. End time in ISO 8601 format.
- `message.quickReplies[].eventStartTime` — `string`. Starting time in ISO 8601 format.
- `message.quickReplies[].eventTitle` — `string`. Title of the event.
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].type` — `string`, values: `scheduleEvent`
- `message.quickReplies[]` Variant: sendLocation
- `message.quickReplies[].type` — `string`, values: `sendLocation`
- `message.quickReplies[].name` — `string`, optional. Optional name or label for the location that will be displayed in the map app (e.g., "Central Park", "Home Office").

If not provided, the button title will be used as the location name.
- `message.quickReplies[].latLong` — `object`. Geographic coordinates of the location to share.
- `message.quickReplies[].latLong.lat` — `number`. Latitude coordinate in decimal degrees.
- `message.quickReplies[].latLong.lng` — `number`. Longitude coordinate in decimal degrees.
- `message.quickReplies[].title` — `string`, maximum length: 25. Display text for the button.
- `message.quickReplies[].metadata` — `string`, optional. Optional additional data to attach to this button.
- `message` Variant: RCS Button Data
- `message.type` — `string`, values: `RCS_BUTTON_DATA`. Message type identifier.
- `message.id` — `string`. Unique identifier of the message. This identifier is a string that always begins with the prefix `msg_`, for example: `msg_1234567890`.

To get the message details, use the GET /messages/{id} endpoint.
- `message.button` — `object`. Information about the button that was clicked.
- `message.button.type` — `string`, optional, values: `CARD`, `QUICK_REPLY`. Type of button clicked.
- `CARD` for card buttons,
- `QUICK_REPLY` for quick replies.
- `null` if we cannot determine the button type. This is a rare edge case and is mainly here for backward compatibility.
- `message.button.raw` — `RichButton | string`. Raw button data. Contains the entire button that was clicked by the user. In rare cases where we cannot determine the exact button, this will return only the button title.
- `message.button.raw` Variant: variant 1
- `message.button.raw` Variant: openUrl
- `message.button.raw.type` — `string`, values: `openUrl`
- `message.button.raw.webviewMode` — `string`, optional, values: `HALF`, `TALL`, `FULL`. Controls how the URL is displayed when the button is tapped.

**Default behavior:** If not specified, the URL opens in the device's default browser. If you're sending deeplinks, you should use this mode as it will open the deeplink in the native app if it is installed.

**Available modes in order of size:**
- `HALF` — Half-screen webview overlay
- `TALL` — Tall webview overlay
- `FULL` — Full-screen webview
- `message.button.raw.payload` — `string`, format: uri. The URL to open when the button is tapped. Must be a valid HTTP or HTTPS URL.
- `message.button.raw.title` — `string`, maximum length: 25. Display text for the button.
- `message.button.raw.metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.button.raw` Variant: call
- `message.button.raw.metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.button.raw.payload` — `string`. Phone number to call in E.164 format
- `message.button.raw.title` — `string`, maximum length: 25. Display text for the button.
- `message.button.raw.type` — `string`, values: `call`
- `message.button.raw` Variant: trigger
- `message.button.raw.metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.button.raw.payload` — `string`. Custom data sent to your webhook when the button is tapped. Use this to identify the user's choice.
- `message.button.raw.title` — `string`, maximum length: 25. Display text for the button.
- `message.button.raw.type` — `string`, values: `trigger`
- `message.button.raw` Variant: requestUserLocation
- `message.button.raw.metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.button.raw.title` — `string`, maximum length: 25. Display text for the button.
- `message.button.raw.type` — `string`, values: `requestUserLocation`
- `message.button.raw` Variant: scheduleEvent
- `message.button.raw.eventDescription` — `string`, optional. Detailed description for the calendar event.
- `message.button.raw.eventEndTime` — `string`. End time in ISO 8601 format.
- `message.button.raw.eventStartTime` — `string`. Starting time in ISO 8601 format.
- `message.button.raw.eventTitle` — `string`. Title of the event.
- `message.button.raw.metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.button.raw.title` — `string`, maximum length: 25. Display text for the button.
- `message.button.raw.type` — `string`, values: `scheduleEvent`
- `message.button.raw` Variant: sendLocation
- `message.button.raw.type` — `string`, values: `sendLocation`
- `message.button.raw.name` — `string`, optional. Optional name or label for the location that will be displayed in the map app (e.g., "Central Park", "Home Office").

If not provided, the button title will be used as the location name.
- `message.button.raw.latLong` — `object`. Geographic coordinates of the location to share.
- `message.button.raw.latLong.lat` — `number`. Latitude coordinate in decimal degrees.
- `message.button.raw.latLong.lng` — `number`. Longitude coordinate in decimal degrees.
- `message.button.raw.title` — `string`, maximum length: 25. Display text for the button.
- `message.button.raw.metadata` — `string`, optional. Optional additional data to attach to this button.
- `message.button.raw` Variant: variant 2
- `message.button.payload` — `string`, optional. Extracted payload from the button's `payload` field, if provided. Provides quick access to any payload that was attached to the button.
- `message.button.metadata` — `string`, optional. Additional metadata attached to the button's `metadata` field, if provided.
- `message.button.clicks` — `integer`. Number of times the button has been clicked.
- `message.messageId` — `string`. ID of the message this button was sent in, or null if not available. To get the message details, use the GET /messages/{id} endpoint.
- `message` Variant: RCS Location Data
- `message.type` — `string`, values: `RCS_LOCATION_DATA`. Message type identifier.
- `message.id` — `string`. Unique identifier of the message. This identifier is a string that always begins with the prefix `msg_`, for example: `msg_1234567890`.

To get the message details, use the GET /messages/{id} endpoint.
- `message.data` — `object`. Location data shared by the user.
- `message.data.address` — `string`. Address corresponding to the shared location.
- `message.data.latitude` — `number`. Latitude of the shared location.
- `message.data.longitude` — `number`. Longitude of the shared location.
- `message.data.text` — `string`, optional. Text message sent with the location.
- `message.messageId` — `string`, optional. ID of the message this button was sent in, or null if not available. To get the message details, use the GET /messages/{id} endpoint.
- `originalMessageId` — `string`, optional. The unique identifier of the original RCS message that this fallback SMS/MMS was sent on behalf of. Always begins with the prefix `msg_`.

Only present on webhook events for fallback SMS/MMS messages. Use this to link the fallback back to the RCS message that could not be delivered. The `message.id` field on this event refers to the actual SMS/MMS that was sent — `originalMessageId` refers to the RCS message it replaced.

Null when the message is not a fallback.
- `fallbackMessage` — `object`, optional. Details of the fallback SMS/MMS message(s) that were actually sent to the recipient instead of the original RCS message.

Only present when the message `status` is `FALLBACK_SENT`. The `message.id` on this event refers to the original RCS message that could not be delivered. The `fallbackMessage.ids` contain the identifiers of the actual SMS/MMS messages that were sent.
- `fallbackMessage.ids` — `string[]`. Unique identifiers of the actual SMS/MMS message(s) that were sent as the fallback. Each identifier always begins with the prefix `msg_`. Multiple IDs indicate the fallback was split into multiple SMS/MMS messages.

These are the messages that were actually delivered to the recipient. To get their full details, use the GET /messages/{id} endpoint.
- `fallbackMessage.type` — `string`, values: `SMS`, `MMS`. Delivery protocol of the fallback message that was sent.
- `fallbackMessage.from` — `string`. Phone number the fallback message was sent from in E.164 format.
- `fallbackMessage.to` — `string`. Recipient's phone number in E.164 format.
- `fallbackMessage.text` — `string`, optional. Text content of the fallback message.
- `fallbackMessage.mediaUrls` — `string[]`, optional. Media URLs included in the fallback MMS message. Empty array for SMS fallbacks.

### Example

```json
{
  "type": "MESSAGE.RECEIVED",
  "conversation": {
    "id": 12345,
    "from": "+14155551234",
    "to": "+14155555678"
  },
  "status": "RECEIVED",
  "direction": "INBOUND",
  "segments": 1,
  "sentAt": "2024-01-15T09:30:00Z",
  "deliveredAt": null,
  "message": {
    "type": "SMS",
    "id": "msg_1234567890",
    "text": "Hello, I need help with my order"
  }
}
```

## Responses

### 200

Return a 200 status to indicate that the data was received successfully

## Machine-readable schema

[OpenAPI 3.1 JSON](https://docs.pinnacle.sh/openapi.json)
