Receive real-time notifications when WhatsApp events happen in your WhatsAble account — configure, manage, and handle webhook endpoints directly from the dashboard.
Use this file to discover all available pages before exploring further.
Webhooks let your external server react to WhatsApp activity the moment it happens — no polling required. Register an HTTPS endpoint once and WhatsAble pushes a JSON payload to it automatically.
A webhook is an HTTP endpoint you host that WhatsAble calls every time a relevant event occurs in your account. Instead of repeatedly asking “did anything happen?”, your server receives a real-time POST request with the full event payload the instant the event fires.Common things you can do with WhatsAble webhooks:
Trigger n8n, Make, or Zapier scenarios the moment someone messages your WhatsAble bot number
Build AI agents that react to WhatsApp messages in real time
Pipe incoming customer messages into your CRM or support desk
Click New Webhook in the top toolbar of the Webhooks page.
2
Enter your Endpoint URL
Paste the full URL of your server endpoint into the Endpoint URL field.
The URL must begin with http:// or https://. HTTPS is strongly recommended for production.
3
Save
Click Create Webhook. WhatsAble stores the endpoint and begins routing eligible events to it immediately.
Use the search bar or scroll through the table to locate the endpoint you want to remove.
2
Open the action menu
Click the ⋮ icon in the Actions column of that row.
3
Confirm deletion
Select Delete and confirm in the dialog that appears. Deletion is permanent and cannot be undone.
Deleting a webhook immediately stops all future event deliveries to that endpoint. Make sure nothing critical depends on the endpoint before removing it.
{ "last_messages": [ { "type": "user", "content": "Can I reschedule my appointment for Thursday?", "timestamp": "2025-06-09T22:08:11.990Z", "content_type": "text" }, { "type": "bot", "content": "Of course! Let me pull up available slots for you.", "timestamp": "2025-06-09T21:45:30.417Z", "content_type": "text" } ], "conversation_paragraph": "User (10:08:11 PM): Can I reschedule my appointment for Thursday? ; Bot (9:45:30 PM): Of course! Let me pull up available slots for you.", "phone_number": "14155552671", "recipient_name": "Alex Martinez", "user_id": "9232fcef-a570-4a2c-b46b-6cab53aec304", "last_message_of_user": "Can I reschedule my appointment for Thursday?", "last_message_of_bot": "Of course! Let me pull up available slots for you.", "message_type": "text", "user_last_message_time": 1749506891, "bot_last_message_time": 1749504330, "attachment_url": null, "note": "", "note_automation": "", "labels": "appointments, rescheduling"}
Temporary URL to the media file. Present only when content_type is not text. URLs expire after 24 hours — download the file promptly if you need to retain it.
Human-readable plain-text transcript of the recent exchange. Useful for passing directly to an LLM or storing as a summary without parsing the full last_messages array.
Text of the customer’s most recent message. For image, video, and document messages this contains the caption if one was provided, otherwise an empty string.
Comma-separated list of labels assigned to the conversation (e.g. "sales, premium-inquiry"). Use these to route events to different handlers in your webhook server.
The WhatsAble dashboard manages webhooks through three authenticated internal endpoints. All requests require a valid Bearer token from the active session.
Returns all webhooks registered by the authenticated user, sorted newest first.Authentication:Authorization: Bearer <access_token>Response: Array of webhook objects.
Permanently removes a webhook. The server verifies ownership before deleting — you cannot delete another account’s webhooks.Authentication:Authorization: Bearer <access_token>Query parameter:
Parameter
Type
Required
Description
id
number
Yes
The id of the webhook to delete
Response:
{ "success": true }
Error codes:
Status
Meaning
400
id query parameter not provided
401
No valid session token
403
The webhook exists but belongs to a different account
When you’re done testing and ready to go live, follow these steps to switch from your test webhook URL to your production endpoint.
Do not edit your existing test credential. Editing a credential that was used for testing can break the connection. Always create a new credential for production.
1
Pin your test data
In your automation tool (n8n, Make, etc.), pin the sample payload you received during testing. This keeps the data structure available to configure downstream nodes even after you swap the endpoint.
2
Copy your production webhook URL
In your automation platform, switch to the Production URL for your trigger node and copy it.
3
Create a new credential — do not edit the existing one
In WhatsAble, go to Operations → Webhooks and click New Webhook. Paste the production URL and save.In your automation tool, create a new credential (e.g. WhatsAble Bot – Production) rather than overwriting the test credential. Enter the production webhook URL and your API key, then save.
4
Update the trigger to use the new credential
In your automation trigger node, switch the credential selection from the test credential to the new production one. Your workflow is now live.
Keep your test credential and test webhook intact — you’ll want them next time you need to iterate or debug without touching the live flow.
Always verify webhook signatures and use HTTPS endpoints. HTTP may be acceptable for local development only. WhatsAble shows a reminder banner on the webhook page: “Always verify webhook signatures and use HTTPS endpoints for secure communication.”
Respond fast, process async
Return 200 OK immediately, then process the payload in a background job or queue. Long-running synchronous handlers risk timing out before the work is done.
Handle duplicate deliveries
Network retries can cause the same event to arrive more than once. Use the user_last_message_time + phone_number combination as an idempotency key to detect and skip duplicates.
Download media promptly
attachment_url and media_url inside last_messages expire after 24 hours. Download and store media files as soon as you receive the webhook — do not rely on the URL remaining valid later.
Route by labels and message_type
Use the labels field and message_type to dispatch events to different handlers. For example, route "document" types to a contract-processing queue and messages labelled "support" to your helpdesk integration.
Log everything
Store the raw payload for every incoming event before processing it. Logs are invaluable for debugging and replaying missed events.
This is the most common issue when setting up the WhatsAble bot trigger. When configuring the WhatsApp trigger node in n8n or Make, you must explicitly select Incoming Messages as the event type. The option can be easy to miss, especially if the interface has changed recently.What to check:
Open the trigger node settings in your automation tool
Look for an event type or trigger type selector
Make sure Incoming Messages (or equivalent) is selected — not “All Events” or left blank
Save and re-activate the trigger
If it still doesn’t fire after sending a test message, move on to the duplicate webhook check below.
Already tried everything and it still doesn't work
Before spending more time debugging, open Operations → Webhooks in the WhatsAble dashboard and check how many webhooks you have registered. It’s easy to accumulate duplicate entries from previous test attempts. Multiple webhooks registered to different URLs (or stale test URLs) can cause unexpected behaviour.Fix: Delete any old or duplicate webhook entries, keep only the one that matches your current trigger URL, then test again.
Webhook not receiving events
Confirm the endpoint is publicly accessible (not localhost or behind a firewall)
Check your server logs for incoming POST requests
Verify the webhook is listed and saved correctly in the dashboard
Ensure your server returns a 2xx response — otherwise deliveries may be dropped
Media URLs returning 404 or expired
attachment_url and media_url values are temporary and expire within 24 hours of generation. If you receive a 404, the file has expired. Download media immediately on receipt and store it in your own storage.
Getting 403 when deleting a webhook
The DELETE endpoint enforces ownership checks. You can only delete webhooks that belong to the currently authenticated user. Make sure you are using the correct account session token.
Duplicate events arriving
WhatsAble may redeliver events if your server did not respond with a 2xx in time. Build idempotency into your handler using phone_number + user_last_message_time as a composite key.