Skip to main content
ubscribe to receive a notification whenever the status of an outgoing message changes, letting you track the full message lifecycle (e.g. “Sent” to “Delivered” to “Seen”). The messageStatus field contains one of: Event name: messageStatusChanged\ Required token scopes:
  • Create scenarios
  • Manage scenarios on behalf of user
see Authentication

Subscribe

Send the body below to Import Subscription. You only need to change:
  • url (required) - Located under data.actions[0].params.url. Replace {{yourWebhookURL}} with the destination URL that should receive the events.
  • asStatus - Keep "active" to enable the subscription immediately, or "inactive" to save it as an inactive revision.
Import body
A 201 response returns your new subscription - save its _id to manage it later. You can also add an optional authorUid root field (a Texter user UID) to attribute the subscription to a specific user.

Payload

When the event fires, your URL receives an HTTP POST with eventName: "messageStatusChanged" and the following eventData:
Chat
The chat associated with the message. See the Chat object for all fields.
number
The new status - see the status codes table above.
string | null
Error message - only present when status is 4 or 5, otherwise null.
number
When the status changed (Unix epoch milliseconds).
string[]
Unique IDs assigned to the message(s) by the external provider.
Example payload

How to identify the message

Because this event is triggered by the external provider (e.g. Meta/WhatsApp), the payload does not contain the internal message._id. Instead, it provides the externalId. To find the specific message in your system:
  1. Take the _id from the chat object in the payload.
  2. Call Get Messages of a Chat.
  3. Find the message whose channelInfo.id matches one of the values in the externalId array.

Manage this subscription