Skip to main content
To receive inbound WhatsApp messages and delivery events in real time, register a webhook: an HTTPS endpoint on your system that Pilot Status calls with a JSON POST for each event.

Create a webhook

Go to the Webhooks page (/webhooks) in the dashboard, click New Webhook, enter your URL, and pick the events you want. Webhooks are scoped per number.
Event gating is explicit: an empty events list dispatches nothing — there is no implicit “subscribe to all”. Use "*" to receive every event. On PATCH, events replaces the entire list (no merge), and the webhook’s number cannot be changed after creation.
To pause deliveries without deleting, PATCH with { "active": false }. The signing secret is never returned by any endpoint — to validate deliveries with it, see Verify the signature.

Example payload — message.received

For media messages, mediaLink is a durable, publicly-fetchable URL to the media re-hosted on Pilot Status storage — for all providers (Evolution GO, Evolution v2, Meta Cloud API), including WhatsApp end-to-end-encrypted media decrypted server-side — alongside mediaType, mediaCaption, and mediaFilename. See the Events reference for every event and field.

Receiver examples

Return 200 quickly and process the event asynchronously; deduplicate by data.id since retries can deliver an event more than once.

Replying to a received message

Reply with POST /v1/messages/send using the sender’s number as the destination:
message.reply fires when a contact quotes one of your messages — use quotedMessageId to match it against the messageId from your original message.sent. message.read only fires when the recipient has read receipts enabled.