Resource
Webhooks
Real-time events: message statuses, inbound conversations, campaign progress, workflow runs and flow submissions.
#Payload shape
Every event share the same envelope:
JSON
#Signature verification
Every outbound request includes an X-Zaptick-Signature header and an X-Zaptick-Timestamp. The SDK ships a helper so you never have to implement HMAC comparison yourself:
TypeScript
#Retries and replays
Zaptick considers a webhook successful only on 2xx responses. On failure we retry with exponential backoff: after 30s, 2m, 10m, 1h, 6h and 24h, then give up. Every attempt — successful or not — shows up in the dashboard at /dashboard/deliveries, where you can replay any delivery on demand.
#Event catalog
| Event | Description |
|---|---|
| message.sent | Fired when a message leaves our system en route to Meta. |
| message.delivered | Meta confirmed delivery to the handset. |
| message.read | The user opened the message. |
| message.failed | Delivery failed permanently. `data.error` carries the reason. |
| conversation.incoming | User sent a new inbound message. |
| conversation.resolved | An agent marked a conversation as resolved. |
| campaign.launched | A campaign was pushed into the send queue. |
| campaign.completed | All recipients processed (success + failures). |
| workflow.started | A workflow run entered its first step. |
| workflow.completed | A workflow run finished. |
| flow.submitted | A user submitted a WhatsApp Flow. |
#Managing endpoints via API
Dashboard-only right now
CRUD for webhook endpoints over the public API is still shipping. Today, create and manage endpoints via
/dashboard/webhooks. The SDK surface at zaptick.webhooks.* is live code but reserved for the imminent public CRUD endpoint.