Overview
Webhooks are HTTP callbacks that Notifyer sends to your server when a message event occurs. They cover:- Incoming messages — a contact writes to your business
- Outgoing messages — your business sends a message, including:
- Hand-typed replies in the WhatsApp Business app on a phone
- Messages sent from the Notifyer chat inbox (with the teammate’s name)
- Messages sent by Make, Zapier, n8n, the API, or a bot
- Click-to-WhatsApp ads — when the inbound message came from a Facebook, Instagram, or WhatsApp Status ad, a
referralobject identifies the creative, platform, and click (ctwa_clid)
Webhook Configuration
Managing Endpoints
Access Webhook Settings
Configure Endpoint
Endpoint Requirements
Your webhook endpoint must:- Accept HTTP POST requests
- Process JSON payloads
- Return a 2xx status code within 10 seconds
- Implement idempotency handling (see best practices below)
Incoming and outgoing WhatsApp messages
Notifyer delivers both incoming and outgoing messages to your webhook or automation trigger — including messages typed by hand in the WhatsApp Business app on your phone. This is possible because Notifyer supports Meta WhatsApp Coexistence. You keep using WhatsApp Business on your phone; those hand-typed replies still reach an external webhook and can start an automation. They are not limited to the Notifyer web inbox.Trigger n8n (or any webhook) from WhatsApp messages — including replies typed in the WhatsApp Business app
Direction, sending system, and team member
Use these three fields to tell what happened and who sent it:true when a contact sent a message to your business. false when your business sent a message to the contact (outgoing). Filter on this field to run logic only for one direction.true when a person sent the message (WhatsApp Business app or Notifyer chat inbox). false when a bot or automation sent it. Combine with send_by to see both whether a human sent it and which teammate or system did.Example payload: message typed on the phone
This is the JSON Notifyer POSTs when someone types a reply in the WhatsApp Business app.incoming_message is false, send_by is "WhatsApp App", and was_message_by_human is true.
last_message_of_bot is the last message your business sent — whether a human typed it in the WhatsApp Business app or the Notifyer inbox, or a bot/automation sent it. last_messages is a JSON string of the last ~20 messages (parse it before iterating). phone_number may arrive as a number rather than a string.Webhook payload
When a message is received or sent on your connected number, Notifyer sends aPOST request to your endpoint with a JSON body.
Sample payloads
Payload Fields
type (user or bot), content, timestamp, and content_type. Includes messages from the WhatsApp Business app, the Notifyer inbox, automations, and templates.+). On outgoing events this is the person your business messaged. May arrive as a number or a string.true when the contact sent this message to your business. false when your business sent it (outgoing). Outgoing events include messages typed in the WhatsApp Business app, sent from the Notifyer chat inbox, or sent by Make, Zapier, n8n, the API, or a bot."WhatsApp App" when typed in the WhatsApp Business app; the logged-in teammate’s name when sent from the Notifyer chat inbox; the automation or app name for Make, Zapier, n8n, API, or a bot. Empty on incoming messages.true when a person sent the message (WhatsApp Business app or Notifyer chat inbox). false when a bot or automation sent it.Click-to-WhatsApp ads
When someone taps Send message on a Click-to-WhatsApp ad (Facebook, Instagram, or WhatsApp Status) and writes to your number, Meta attaches areferral object to that inbound message. Notifyer passes it through to your custom webhook and to n8n, Make, and Zapier triggers.
Use it to optimize campaigns: see which creative, which platform, and which ad produced the lead, then label the conversation, route it to the right team, or send ctwa_clid to Meta’s Conversions API.
referral is typically present only on the first inbound message after the ad click. Later messages in the same chat usually omit it. Persist ctwa_clid and source_id (keyed on the contact’s phone) as soon as they arrive.ctwa_clid. Organic posts use source_type: "post" instead of "ad".What each field is for
Referral object
Look forreferral as a top-level field on the Notifyer payload, or at entry[].changes[].value.messages[].referral if the delivery includes the Cloud API envelope.
"ad" when the lead tapped an ad. "post" when they came from an organic post.:fire:."image" or "video".media_type is "image". These URLs can expire — copy any asset you need to keep.media_type is "video".action_source: "business_messaging", messaging_channel: "whatsapp") so purchases and qualified leads attribute back to the ad.Cloud API envelope example
This is the Meta WhatsApp Business Account shape. The attribution lives onmessages[].referral. Contact identifiers in this example are anonymized; the referral fields match a real Instagram Click-to-WhatsApp ad.
Webhook Management API
You can programmatically manage your webhook endpoints using our API.Create Webhook Endpoint
POST https://api.insightssystem.com/api:qh9OQ3OW/webhook/dev/create
Register a new webhook endpoint to receive incoming message notifications. Send a valid Bearer token (same credential used for the dashboard).
Request Body
true, your endpoint receives messages contacts send to your business.true, your endpoint also receives messages your business sends — including hand-typed replies in the WhatsApp Business app, Notifyer chat inbox messages, and messages sent by Make, Zapier, n8n, the API, or a bot. Set this to true if an automation must react to messages typed on the phone.
waiting_duration to the maximum delay window you need. When schedule_activity is false, set waiting_duration to 0.
schedule_activity is true. Set to 0 when schedule activity is off.Dashboard presets: 15, 30, 60, 1800, 3600, 18000, 36000, 86400, 172800, 259200, 432000, 604800, 1209600, 2592000, 5184000 (15 seconds → 2 months). Prefer these values if mirroring the app UI.true, enables request signing. The server returns a signature_secret once in the response — copy and store it immediately, as it will not be shown again.
Response
Returns a JSON object for the created webhook row.true, the endpoint receives messages your business sends, including WhatsApp Business app replies.active_signature was true: a one-time secret string — copy and store it immediately, it will not be retrievable again. When active_signature was false: null.Webhook Signature Verification
When a webhook is created withactive_signature: true, every request our system sends to your endpoint will include an X-Webhook-Signature header. Use it to confirm the request genuinely came from us and was not tampered with.
signature_secret returned at creation time. Compare it in your endpoint handler to validate each incoming request.
active_signature was false when the webhook was created, this header will not be present in requests sent to your endpoint.Troubleshooting
Webhook Not Receiving Events
Webhook Not Receiving Events
- Verify your endpoint is publicly accessible
- Check for HTTP 4xx or 5xx responses
- Ensure proper SSL certificate configuration
- Verify your webhook is enabled in the dashboard
- Confirm outgoing is enabled if you expect events for messages you send (including the WhatsApp Business app)
No referral / Click-to-WhatsApp fields on the payload
No referral / Click-to-WhatsApp fields on the payload
referralis usually only on the first inbound message after the ad click. Storectwa_clidandsource_idimmediately.- Organic messages (not from an ad or post) have no
referralobject. - WhatsApp Status ad placements may omit
ctwa_clideven when other referral fields are present. - Confirm you are looking at
referral(Notifyer payload) ormessages[].referral(Cloud API envelope), not a Facebook Lead Ad form submission — that is a different Meta product.
"Same webhook exist" error when creating a webhook
"Same webhook exist" error when creating a webhook
webhooks URL that is already registered, the API will return a “Same webhook exist” error.To resolve this:- Check your existing webhooks in the Developer → Incoming Webhooks tab of the dashboard to confirm whether the URL is already registered.
- If you want to update settings on an existing webhook (e.g. toggle
incoming, changewaiting_duration), use the update/edit endpoint instead of re-creating it. - If you genuinely need a fresh webhook at the same URL, delete the existing one first, then create a new one.
FAQs
Do webhooks include Click-to-WhatsApp ad details?
Do webhooks include Click-to-WhatsApp ad details?
referral object (source_id, source_url, source_type, headline, body, media_type, creative URLs, and ctwa_clid). Use it to see which creative and platform produced the lead. Full reference: Click-to-WhatsApp ads.Do webhooks include messages typed in the WhatsApp Business app?
Do webhooks include messages typed in the WhatsApp Business app?
incoming_message: false, send_by: "WhatsApp App", and was_message_by_human: true. They are POSTed to your webhook — they are not limited to the Notifyer web UI.How do I tell which teammate sent an outgoing message?
How do I tell which teammate sent an outgoing message?
send_by. When the message was sent from the Notifyer chat inbox, send_by is that user’s name (for example "Axel Meta"). When it was typed in the WhatsApp Business app, send_by is "WhatsApp App". was_message_by_human is true in both human cases.How do I handle different message types?
How do I handle different message types?
message_type (text, image, audio, video, document, location). For audio, the transcription appears in the text fields when available.Do I need to respond to every webhook request?
Do I need to respond to every webhook request?
How can I test webhook delivery?
How can I test webhook delivery?