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

# messenger.message.updated

> Occurs when a saved ordinary Messenger outbound message snapshot is available, including submission results and matched receipts.

Use `messenger.message.updated` to handle this event at your webhook endpoint.

## Triggers

Occurs when a saved ordinary Messenger outbound message snapshot is available, including submission results and matched receipts.

Subscribe to `messenger.message.updated` when you [configure your webhook endpoint](https://docs.ycloud.com/en/api-reference/guides/api-fundamentals/configure-webhooks.md).

This event includes submission results and matched receipts for a saved ordinary outbound message. Correlate snapshots by message `id`. Unknown intermediate receipt times can be omitted.

## Syntax

YCloud sends an HTTP `POST` request to your configured webhook URL. The following shape shows one payload variant. Angle-bracket values are placeholders; their types are listed under **Parameters**. Optional fields and other variants are described below.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "<ID>",
  "type": "messenger.message.updated",
  "apiVersion": "<API_VERSION>",
  "createTime": "<CREATE_TIME>",
  "messengerMessage": {
    "id": "<ID>",
    "metaMessageId": "<META_MESSAGE_ID>",
    "from": "<FROM>",
    "to": "<TO>",
    "type": "<TYPE>",
    "text": {
      "body": "<BODY>"
    },
    "status": "<STATUS>",
    "createTime": "<CREATE_TIME>",
    "updateTime": "<UPDATE_TIME>",
    "readTime": "<READ_TIME>"
  }
}
```

## Parameters

Validate the `YCloud-Signature` HTTP header before you process the JSON body. See [signature validation](https://docs.ycloud.com/en/api-reference/guides/api-fundamentals/configure-webhooks.md).

### Event envelope

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | Unique ID for the event. Minimum length: `6`. Maximum length: `128`. |
| `type` | string | Yes | Always `messenger.message.updated`. |
| `apiVersion` | string | Yes | The API version used to render this event. |
| `createTime` | string (date-time) | Yes | The time at which this event was created, formatted in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339). e.g., `2022-06-01T12:00:00.000Z`. |

### Event payload

| Parameter | Type | Required | Description |
| - | - | - | - |
| `messengerMessage` | object | No | Event-specific `messengerMessage` payload. |

The four common envelope fields are required. Payload fields depend on the event variant. In each object table, **Required** applies when its parent object is present. Optional fields can be omitted; a sample does not make a field required.

#### messengerMessage

| Parameter | Type | Required | Description |
| - | - | - | - |
| `id` | string | Yes | YCloud outbound ID, a decimal string; never serialize it as a JSON number. |
| `metaMessageId` | string | No | Omitted when no Meta ID is confirmed. |
| `from` | string | Yes | Facebook Page ID. |
| `to` | string | Yes | Peer PSID for this Page. |
| `reactions` | object\[] | No | Active reactions reconstructed when retrieving an outbound message. Returns \[] when no saved active reaction exists, including after withdrawal. Customer status webhooks omit this field; receiving a reaction does not change the message delivery status or updateTime. |
| `type` | string | Yes | Values: `text`. |
| `text` | object | Yes | Object fields are listed below. |
| `status` | string | Yes | Current stored facts: read > delivered > sent > submission result. Unknown means unconfirmed or in progress, never a definitive failure. Missing receipts do not imply failure and no intermediate state is fabricated.Values: `unknown`, `accepted`, `rejected`, `sent`, `delivered`, `read`. |
| `errorCode` | string | No | Locally recorded submission error, when present. A confirmed rejection may be MESSENGER\_MESSAGE\_REJECTED(#100:2018276), MESSENGER\_MESSAGE\_REJECTED(#100), or the legacy MESSENGER\_MESSAGE\_REJECTED when diagnostics are unavailable. MESSENGER\_MESSAGE\_RESULT\_UNKNOWN means the submission outcome is unconfirmed. Never contains the raw Meta error body or credentials. |
| `createTime` | string (date-time) | Yes | Local creation time in UTC RFC 3339 with millisecond precision. |
| `updateTime` | string (date-time) | Yes | Local update time in UTC RFC 3339 with millisecond precision. |
| `sendTime` | string (date-time) | No | Confirmed send time in UTC RFC 3339 with millisecond precision; omitted when unknown. |
| `deliverTime` | string (date-time) | No | Confirmed delivery time in UTC RFC 3339 with millisecond precision; omitted when unknown. |
| `readTime` | string (date-time) | No | Confirmed read time in UTC RFC 3339 with millisecond precision; omitted when unknown. |

> [accordion] messengerMessage.reactions\[]
>
> | Parameter | Type | Required | Description |
> | - | - | - | - |
> | `psid` | string | Yes | Page-scoped ID of the user who reacted. |
> | `reaction` | string | No | Provider reaction description, when available. Clients should tolerate new values. |
> | `emoji` | string | No | Reaction emoji, when available. |
> | `updateTime` | string (date-time) | Yes | Source interaction time in UTC RFC 3339 with millisecond precision; independent of the message updateTime. |

> [accordion] messengerMessage.text
>
> | Parameter | Type | Required | Description |
> | - | - | - | - |
> | `body` | string | Yes | Nonblank text. Leading and trailing spaces are preserved and included when comparing a repeated request.Minimum length: `1`. |

## Example

The following JSON is the body delivered to your receiver. IDs, phone numbers, and other account values are illustrative.

Use the message ID to correlate snapshots; unknown intermediate receipt times are omitted.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "evt_89abcdef0123456789abcdef",
  "type": "messenger.message.updated",
  "apiVersion": "v2",
  "createTime": "2026-10-20T02:00:03.000Z",
  "messengerMessage": {
    "id": "1308528868252065792",
    "metaMessageId": "m_EXAMPLE_OUT_001",
    "from": "422500000000000",
    "to": "100800000000000",
    "type": "text",
    "text": {
      "body": "How can I help you?"
    },
    "status": "read",
    "createTime": "2026-10-20T02:00:00.000Z",
    "updateTime": "2026-10-20T02:00:03.000Z",
    "readTime": "2026-10-20T02:00:03.000Z"
  }
}
```

After verifying the signature and durably accepting the event, return a `2xx` response. Process slow work asynchronously.

```http theme={"theme":{"light":"github-light","dark":"github-dark"}}
HTTP/1.1 200 OK
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.