Webhooks

Read Receipts Webhook

Signed webhook sent on every delivery-status change (sent, delivered, read, failed) of a WhatsApp message you send

Docs

postWebhookread-receipts

Payload

eventstring

The event type. Value: message_status

whatsapp_message_idinteger

Numeric identifier of the message — the same whatsapp_message_id returned when you sent the message. Use this to correlate the status update with the original send.

message_sidstring

Provider message identifier for messages sent over Twilio, or null

meta_message_idstring nullable

Provider message identifier (WhatsApp wamid) for messages sent over the Meta Cloud API, or null

conversation_idstring

Unique identifier (UUID) of the conversation the message belongs to, or null

assistant_idstring

Unique identifier (UUID) of the assistant connected to the sender, or null

tostring

The recipient phone number

fromstring

The sender phone number

directionstring

Message direction. Value: outbound

status'sent' | 'delivered' | 'read' | 'failed' | 'undelivered'

The new delivery status. Possible values: sent, delivered, read, failed, undelivered

error_codeinteger nullable

Provider error code when status is failed or undelivered, otherwise null

error_messagestring nullable

Raw provider error message when the message failed, otherwise null

error_descriptionstring nullable

Human-readable description of the error, otherwise null

timestampstring

ISO 8601 timestamp of when the platform recorded the status change, in the WhatsApp number owner's configured timezone

provider_timestampstring

ISO 8601 timestamp of the carrier's own event time, in the owner's configured timezone. Present for messages sent over the Meta Cloud API; null over Twilio (Twilio's status callback does not include an event time). Prefer this when present — it is the carrier's authoritative time.

Response

Bestätige den Empfang mit 2xx. Antwortet dein Endpunkt nicht mit 2xx, wiederholt Famulor die Zustellung.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.