Webhook Setup
Configure webhooks to receive real-time event notifications from Fonify in your external systems.
Webhook Setup
Webhooks let you receive real-time notifications when events happen in your Fonify workspace. When a call completes, a campaign finishes, or a booking is created, Fonify sends an HTTP POST request to your configured endpoint with the event data.
Use Cases
Webhooks are useful for integrating Fonify with your existing systems:
- CRM updates: Sync call outcomes and contact data to your CRM
- Analytics pipelines: Stream call data to your data warehouse
- Custom notifications: Trigger Slack messages, emails, or SMS based on events
- Workflow automation: Start follow-up workflows in tools like Zapier or Make
Creating a Webhook
Go to Settings > Webhooks and click Add Webhook.
- Name: A descriptive label (e.g., "CRM Sync" or "Slack Notifications")
- URL: The HTTPS endpoint that will receive webhook payloads
- Secret (optional): A shared secret used to sign payloads for verification
Always use HTTPS endpoints. Fonify does not send webhooks to plain HTTP URLs.
Choose which events trigger this webhook:
| Event | Description |
|---|---|
call.completed | A call has ended (includes outcome, duration, transcript-related results, and call metadata) |
call.failed | A call failed to connect |
campaign.started | A campaign began dialing |
campaign.completed | All contacts in a campaign have been processed |
campaign.paused | A campaign was paused |
contact.created | A new contact was added |
contact.updated | A contact's data was modified |
booking.created | An appointment was booked during a call |
booking.cancelled | An appointment was cancelled |
ticket.created | A support ticket was generated |
Click Save. The webhook is active immediately and will fire on the next matching event.
Payload Format
Webhook payloads are sent as JSON in the request body. Every payload includes a standard envelope:
{
"event": "call.completed",
"timestamp": "2026-03-22T14:30:00Z",
"workspace_id": "ws_abc123",
"data": {
"call_id": "call_xyz789",
"contact_id": "ct_456",
"campaign_id": "cmp_012",
"duration_seconds": 142,
"outcome": "answered",
"sentiment": "positive"
}
}The data object varies by event type. See the API documentation for the full schema of each event payload.
Verifying Webhook Signatures
If you set a secret when creating the webhook, Fonify signs every payload with an HMAC-SHA256 signature. The signature is included in the X-Fonify-Signature header.
Compute HMAC-SHA256(raw_request_body, your_secret) and compare with the X-Fonify-Signature header value. Reject the request if they do not match.
Tip
Always verify webhook signatures in production to ensure payloads are genuinely from Fonify.
Retry Policy
If your endpoint returns a non-2xx status code or times out (30 seconds), Fonify retries up to 5 times with increasing delays (1 min, 5 min, 30 min, 2 hours, 12 hours). After 5 failures, the delivery is marked as failed. You can manually retry from the webhook logs.
Logs, Testing, and Management
View delivery history from Settings > Webhooks by clicking on any webhook. Logs show successful deliveries, failures with error details, and pending retries. Logs are retained for 30 days.
Use Send Test Event to verify your endpoint before real events flow. You can also edit, disable (pause without deleting), or delete any webhook at any time.