Outbound Webhooks
Outbound Webhooks send your account events to a web address you control, the moment they happen. A new message or a new contact can update your CRM or start an automation in a tool like n8n, Make, or Zapier, with no one copying data by hand.
Before You Start
- Your plan - Webhooks depend on your plan. If yours doesn't include them, the page shows Webhooks are not in your plan yet with a View plans button.
- Your role - You need permission to manage integrations.
- A receiving address - You need an HTTPS address that can accept a
POSTrequest. Your automation tool or developer can give you one.
Add an Endpoint
An endpoint is the address that receives your events. Your organization can have up to 5.
- Click Integrations in the sidebar, then click Configure on Outbound Webhook. The Webhooks page opens.
- Click Add endpoint.
- Under Name, give it a name you'll recognise, for example "My CRM webhook".
- Under Endpoint URL, paste the address. It must start with
https://. Custom ports and private or internal addresses are rejected. - Under Channel filter, leave All channels or pick specific devices. See Channel Filter.
- Under Events, tick the events you want, or tick Select all.
- Click Create endpoint.
- In Save your signing secret, click Copy, store the secret somewhere safe, then click I have saved it.
Events You Can Choose
Tick events one at a time, by group, or all at once. The key in code is the event name your server receives.
| Group | Events |
|---|---|
| Tokens & usage | Token usage threshold reached (tokens.usage_threshold_reached), Tokens exhausted (tokens.exhausted) |
| Product activation | Channel connected (channel.connected), Channel disconnected (channel.disconnected), Chatbot created (chatbot.created), Chatbot published (chatbot.published), Chatbot connected to channel (chatbot.connected_to_channel), Chatbot disconnected from channel (chatbot.disconnected_from_channel) |
| Labels | Label assigned (label.assigned), Label removed (label.removed), Label created (label.created), Label deleted (label.deleted) |
| Contacts | Contact created (contact.created), Contact updated (contact.updated), Contact deleted (contact.deleted), Contact import completed (contact.import_completed), Contacts merged (contact.merged), Contact merge reverted (contact.merge_reverted) |
| Messages | Message received (message.received), Message sent (message.sent), Message failed (message.failed) |
| Conversations | Conversation started (conversation.started), Conversation window closing (conversation.window_closing) |
| AI handover | AI handover requested (ai.handover_requested), AI handover resolved (ai.handover_resolved) |
| Broadcasts | Broadcast scheduled (blast.scheduled), Broadcast started (blast.started), Broadcast paused (blast.paused), Broadcast completed (blast.completed), Broadcast failed (blast.failed), Broadcast cancelled (blast.cancelled), Broadcast unsubscribed (blast.unsubscribed) |
An endpoint subscribed to all events also receives events added in the future.
Deliveries carry customer details, such as message content and phone numbers. Only use an address you trust.
Channel Filter
Use Channel filter when an endpoint should only hear about certain WhatsApp devices. With All channels, nothing is filtered out, and devices you connect later are included.
Events badged Whole account always arrive, because they don't belong to one device.
Label assigned and Label removed only pass the filter when the label changed inside a conversation on a device you picked. A label changed from the Contacts page or the REST API is not delivered to a filtered endpoint. Use All channels if you need every label change.
Send a Test Event
- On the endpoint, click the send icon (Send test event).
- Pick one event.
- Click Send test event.
- Open the Delivery Log tab to see the result.
The test sends a sample payload in the same shape as the real event. The endpoint must be switched on, because a paused endpoint sends nothing. If you send too many tests in a short time, wait a minute and try again.
Verify a Delivery
Anyone can find or guess a web address, so your server should check that each request really came from Reply.la. This part is for your developer.
Each delivery is a POST with a JSON body and this header:
X-Replyla-Signature: t=UNIX_SECONDS,v1=SIGNATURE
- Read
tandv1from the header. - Reject the request if
tis more than 300 seconds away from your server's clock. - Build the signed text: the value of
t, a full stop, then the raw request body. - Compute an HMAC SHA256 of that text, using the endpoint's signing secret as the key.
- Compare your result with
v1using a constant time comparison. - Only then, read the body.
The Docs tab on the Webhooks page has the full reference: the request format, sample code in Node and PHP, and the exact payload of every event. Click Copy all as Markdown to hand it to a developer or an AI agent.
Your server should also:
- Answer with any
2xxstatus within 10 seconds, or the attempt counts as failed. - Ignore duplicates by checking
occurrence_key. The same event can arrive more than once, and events can arrive out of order.
Delivery Log and Retries
If your server doesn't answer with a 2xx, Reply.la tries again automatically, up to 3 attempts per event: about 30 seconds after the first attempt, then about 2 minutes after the second.
The Delivery Log tab shows the Event, Delivery, Endpoint, Status, Attempts, and Time of each attempt. History is kept for 14 days.
| Status | Meaning |
|---|---|
| Queued | Waiting to be sent. |
| Retrying | An attempt failed, and another one is coming. |
| Delivered | Your server answered with a 2xx. |
| Failed | All attempts ran out. |
- Find a delivery - Use Search event or endpoint, or filter by status, endpoint, or event.
- See what happened - Click View detail to see the request Reply.la sent and the response your server gave.
- Send it again - Click Retry delivery on a Failed row, after you fix your server.
- See one endpoint - On the Endpoints tab, click View delivery history on the endpoint.
Manage an Endpoint
Each endpoint on the Endpoints tab shows its status, address, and events.
| Status | Meaning |
|---|---|
| Active | Events are being delivered. |
| Paused | You switched it off. Switch it on to resume delivery. |
| Auto-disabled | Reply.la turned it off after repeated delivery failures. Fix your server, then switch it back on. |
- The switch - Turn the endpoint on or off.
- Edit endpoint - Change the name, address, channel filter, or events, then click Save changes.
- Rotate - Get a new signing secret. The old secret stops working immediately, so deliveries fail until you update your server.
- Delete endpoint - Remove the endpoint and its delivery history. This cannot be undone.
Common Questions
Last updated: 5 November 2026