Skip to main content
Webhooks allow you to receive real-time HTTP notifications for WhatsApp events, including incoming messages and delivery status updates.

Creating a Webhook

Create a webhook for your application to start receiving WhatsApp events. Via Dashboard
  1. Navigate to your application’s Webhooks page
  2. Click “Create Webhook”
  3. Enter your webhook URL
  4. Select WhatsApp-related events
  5. (Optional) Add custom headers for authentication
  6. Save the webhook
Via API
Create Webhook

WhatsApp Events

Event Payloads

Message Received

messages.whatsapp.received

Message Sent

messages.whatsapp.sent

Message Delivered

messages.whatsapp.delivered

Message Read

messages.whatsapp.read

Message Failed

messages.whatsapp.failed
The error object uses the same format as API error responses, making it easy to handle errors consistently across your application. The error.code maps Meta’s error codes to Chirp’s standardized error codes, and the error.provider field preserves the original provider error details for debugging.

Enriched failures (account_restricted, display_name_not_approved)

When Meta’s failure reason is vague — an account_restricted or display_name_not_approved status — Chirp calls Meta’s Health Status API at ingest time and attaches the blocked entity plus Meta’s suggested remediation to the webhook body. See Health Status Enrichment for the full schema and handling guide.
messages.whatsapp.failed (enriched)
Enrichment is best-effort. If Chirp’s Health Status lookup fails, you still get the base error.code and error.messageadditional_info and provider.health_status will simply be absent. Treat them as hints, not invariants.

Response Requirements

Your webhook endpoint should:
  1. Respond within 5 seconds - Return 200 OK quickly
  2. Process asynchronously - Don’t block on long-running tasks
  3. Handle duplicates - Events may be delivered multiple times
Webhook Handler

Security Best Practices

Validate Request Origin

Use custom headers to verify requests are from Chirp:
Validate Webhook

Use HTTPS

Always use HTTPS URLs for webhook endpoints. HTTP is not supported.

Retry Behavior

If your webhook fails (non-200 status or timeout):
  • Chirp retries delivery with exponential backoff
  • Maximum 5 retry attempts
  • Failed webhooks are logged in your dashboard

Testing Webhooks

Use the Playground
  1. Configure a webhook on your test application
  2. Send test messages using the Playground
  3. Your webhook receives events in real-time
  4. View webhook delivery logs in the dashboard
Local Development Use tunneling tools for local testing:
  • ngrok - Create public URLs for local servers
  • webhook.site - Inspect webhook payloads
  • localtunnel - Simple local tunneling

Managing Webhooks

List Webhooks
Update Webhook
Delete Webhook