Configuring a webhook
You need the Owner or Admin role.Add a webhook
Click Add webhook, paste the public HTTPS URL of your endpoint, and pick the event types you want to receive.
Save the signing secret
Flowella generates a unique signing secret for the webhook. Copy it — you will use it to verify incoming requests.
Event types
You can subscribe to any of these product events:| Event | When it fires |
|---|---|
message.received | An inbound WhatsApp message has arrived from a contact |
message.sent | Flowella has accepted your outbound message and submitted it to Meta |
message.delivered | Meta confirmed the message was delivered to the recipient’s device |
message.read | The recipient opened the message |
message.failed | Meta returned a failure for the message |
conversation.opened | A conversation has moved into the open state |
conversation.closed | A conversation has been closed |
optout.created | A contact opted out on a specific channel |
template.status_updated | Meta changed a template’s status (approved, rejected, paused, disabled) |
webhook.test is sent only when you click Send test — you do not subscribe to it explicitly.
Request format
Flowella POSTs a JSON body to your URL with these headers:Verifying signatures
Every request includes anX-Flowella-Signature header. The value is the HMAC-SHA256 hex digest of the raw UTF-8 request body keyed with your webhook’s signing secret.
Verify before processing:
Responses, retries, and timeouts
- Timeout: Flowella waits up to 10 seconds for your endpoint to respond.
- Success: any
2xxresponse is treated as successful delivery. - Retries: failed deliveries are retried up to 3 attempts with backoff.
- Auto-disable: if a webhook accumulates 10 consecutive failures, Flowella deactivates it. You will need to re-enable it from Settings → Webhooks after fixing your endpoint.
Idempotency
Webhooks may be retried, so the same logical event can arrive more than once. To process safely:- Use the
data.idof the event (or a derived key likeevent + data.messageId) as an idempotency key. - Keep a short-lived cache of processed keys (a few hours is enough for retries).
- Treat duplicates as no-ops.
Listing and managing deliveries
Settings → Webhooks shows recent delivery attempts per webhook, including:- Timestamp
- Event type
- Response status
- A truncated response body (up to ~1 KB) for debugging
Local development
The simplest way to develop against webhooks locally is to forward a public tunnel (for example, ngrok or Cloudflare Tunnel) to your dev server and point the webhook URL at the tunnel host. Use Send test to fire payloads on demand without waiting for real WhatsApp activity.Related
Settings → Webhooks
Configure endpoints, signing secrets, and retries in the app.
API introduction
Auth, errors, pagination, and rate limits for the REST API.
API keys
Create and rotate the bearer tokens your endpoint may need.
Notification events
The same events delivered into the in-app feed and email.

