Skip to main content
The Meta WhatsApp Business API (WABA) sends events directly to an endpoint you register in the Facebook App. When you connect a WhatsApp number in Timely.ai, our platform receives those events, processes them, and transforms them into the workspace’s internal webhooks. This page documents the raw format that Meta sends — useful for debugging, direct integrations, or when you need to understand what arrives before any transformation.

Configure the webhook in the Facebook App

1

Access the Meta App Dashboard

Go to developers.facebook.com → your App → WhatsAppSettingsWebhook.
2

Enter the callback URL

Paste the URL of the endpoint that will receive the events. In production, always use HTTPS with a valid certificate.If you are testing locally, use ngrok or Hookdeck to expose your server:
3

Set the Verify Token

Choose a random, secure string (e.g. my_secret_token_123). Meta makes a GET request to your endpoint at setup time with the parameters hub.mode, hub.verify_token, and hub.challenge. Your server must respond with the value of hub.challenge if the token matches.
Node.js
4

Select fields

Enable at least messages to receive messages and statuses. Other useful fields: message_template_status_update, phone_number_quality_update.

Difference between Meta webhook and Timely webhook

If you use Timely as an intermediary (the default case), you do not need to register a webhook with Meta — Timely handles that for you. This documentation is for cases where you connect WABA directly or need to debug the full flow.

Signature validation

Meta signs each request with the App Secret of your Facebook App using HMAC-SHA256. The header sent is X-Hub-Signature-256.
Node.js
Never process a Meta webhook without validating X-Hub-Signature-256. The App Secret is in your Facebook App dashboard — never expose it in source code or logs.

Payload: received text message

Payload: sent message status

Statuses arrive when the message changes state: sentdeliveredread.

Payload: media message (image, audio, document)

To download the media, make a GET https://graph.facebook.com/v19.0/{MEDIA_ID} request with your access token. Timely.ai performs this download automatically and stores the public URL in the media_url field of the normalized message.

Key payload fields

Next steps

Platform webhooks

Understand Timely.ai’s normalized outbound webhooks.

Channels — API Reference

Manage WhatsApp channels via API.