Delivery semantics
Automate Chats delivers webhook events with the following constraints:- Protocol: HTTP
POSTrequests sending JSON payloads. - Delivery: Best-effort single attempt. The system does not retry failed deliveries.
- Timeout: The server waits a maximum of 5 seconds for a response.
- Payload size limit: The maximum payload size is 256 KB.
- Status codes: Your server must return a
2xxHTTP status code to acknowledge receipt.
Headers sent
Every webhook request includes the following custom HTTP headers:Content-Type:application/jsonX-Webhook-Id: The unique ID of the configured webhook.X-Workspace-Id: The ID of your Automate Chats workspace.X-Event-Key: The event key that triggered this request.
Supported events
Configure your webhook to listen for the following events:Message events
incoming: Triggered when you receive an inbound WhatsApp message from a customer. This saves the message, updates the conversation, and starts chatbot or AI assistant sessions if active.sent: Triggered when an outbound message is successfully sent and accepted by WhatsApp/Meta. This also records billing and pricing details in our system.delivered: Triggered when Meta confirms the customer’s device received the message.read: Triggered when the customer reads your message.failed: Triggered when an outbound message fails to deliver (e.g., number not on WhatsApp, expired 24h conversation window).
Template events
template: Triggered when a WhatsApp message template status or category changes (e.g., when Meta approves or rejects a template, or modifies its category). This updates your local template records and notifies your team.
Contact events
contact.created: Triggered when a new contact is registered in your workspace (manually, via CSV import, or automatically when a new customer sends an inbound message).contact.updated: Triggered when contact details are edited or when a soft-deleted contact is restored.
Conversation events
conversation.assigned: Triggered when a conversation is assigned to an agent or a team (manually, via chatbots, or by the AI assistant).conversation.status_changed: Triggered when a conversation status changes (e.g., marked open, resolved, or closed, which also exits any active chatbot sessions).
General payload structure
Each webhook payload uses a standard JSON envelope:Event payloads
API reference
Configure and manage your webhooks using the/external-webhooks endpoints. You must authorize all API calls using your workspace key in the X-API-Key header.
Create a webhook
Register a new webhook URL and select the events you wish to receive.- HTTP Method:
POST - Path:
/api/external-webhooks
Request body
| Field | Type | Description |
|---|---|---|
title | string | A descriptive name for the webhook. |
url | string | The target HTTP/HTTPS URL that will receive the payloads. |
status | string | Set to "active" or "inactive". |
events | array | A list of event keys (e.g., ["incoming", "failed"]). |
secret | string | (Optional) A custom secret token to verify payload integrity. |
Request example
List webhooks
Retrieve a list of webhooks configured for your workspace.- HTTP Method:
GET - Path:
/api/external-webhooks
Query parameters
| Parameter | Type | Description |
|---|---|---|
page | integer | (Optional) Page number for pagination. Default is 1. |
limit | integer | (Optional) Number of records per page (max 100). Default is 10. |
Request example
Update a webhook
Modify an existing webhook’s subscription events, target URL, status, or secret.- HTTP Method:
PATCH - Path:
/api/external-webhooks/:id
Request example
Delete a webhook
Remove a webhook configuration from your workspace.- HTTP Method:
DELETE - Path:
/api/external-webhooks/:id
