What Are Webhooks?
A webhook is an HTTP request that Safina sends automatically to a URL of your choice whenever a specific event occurs. Instead of repeatedly checking Safina for new data (polling), you receive the data the moment it is created.
In practice: A call comes in. Safina picks up, conducts the conversation, creates a summary. Within seconds, your system receives an HTTP request with all relevant data: caller name, reason for calling, urgency, contact details, action items.
You decide what happens with the data. A new contact in HubSpot? A Slack message to your team? A row in Google Sheets? A ticket in your support system? All possible, without manual effort.
What Data Does Safina Send?
Every webhook payload contains structured call data. The exact content depends on the event, but typical fields include:
- Caller information: Name, phone number, email (if captured), company
- Call details: Timestamp, duration, status (answered, missed, rejected)
- Summary: Reason for calling in 2-3 sentences, structured
- Urgency: High, medium, low
- Action items: Concrete next steps from the conversation
- Industry-specific fields: Property number, legal area, customer ID depending on your template
Sample Payload
{
"event": "call.ended",
"timestamp": "2026-01-28T14:32:00Z",
"call": {
"id": "call_abc123",
"status": "completed",
"duration_seconds": 142,
"caller": {
"phone": "+14155551234",
"name": "James Mitchell",
"company": "Mitchell & Associates"
},
"summary": "Inquiry about network installation for new office. 18 workstations, fiber connection available. Quote requested by end of week.",
"urgency": "medium",
"action_items": [
"Prepare quote for network installation",
"Call back by Friday"
],
"callback_requested": true,
"callback_time": "mornings"
}
}
Supported Events
Safina sends webhooks for the following events:
| Event | Description |
|---|---|
call.received | An incoming call is detected |
call.answered | Safina has picked up the call |
call.ended | The conversation has ended (includes summary) |
call.rejected | The call was rejected |
summary.data_query_result | Result of a data query from the summary |
You choose which events each webhook subscribes to. Only need call.ended? Subscribe to that one. Also want to know when a call comes in? Add call.received.
Authentication
Security matters, especially when call data is being transmitted. Safina supports three authentication methods for webhooks:
| Method | Description | When to Use |
|---|---|---|
| Bearer Token | Token sent in the Authorization header | Standard for most APIs |
| API Key | Key in the header or request body | Compatible with many third-party tools |
| None | No authentication token | Only for testing or internal systems |
You can also define custom HTTP headers if your system has specific requirements.
Setup in 5 Steps
1. Create a Webhook
Open the Safina app and navigate to Settings > Webhooks > New Webhook.
2. Enter Your URL
Enter the URL where Safina should send the data. This can be your own server, an n8n instance, a Zapier webhook, or a Make scenario.
3. Choose Authentication
Select the appropriate method: Bearer Token, API Key, or no authentication. Enter your credentials.
4. Subscribe to Events
Select the events that should trigger the webhook. For most use cases, call.ended is sufficient; it gives you the complete summary after every conversation.
5. Test
Click “Send Test.” Safina sends a test payload to your URL. Verify that the data arrives and is processed correctly. Only activate the webhook once the test succeeds.
Done. From now on, Safina automatically sends call data to your system whenever a matching event occurs.
Technical Details
- HTTP methods: POST (default), GET, PUT, PATCH, DELETE
- Retry logic: 3 automatic retry attempts on failure
- Timeout: 30 seconds (configurable)
- Custom headers: Any additional HTTP headers supported
- Format: JSON
Use Cases
Forward Call Data to Your CRM
Every call is automatically logged as an activity in HubSpot or Pipedrive. Contact details, reason for calling, and next steps land directly in the deal or contact record. No manual data entry.
Notify Your Team on Slack
High-urgency calls trigger a Slack message. Your team sees immediately who called and what they need, without opening the Safina app.
Log Calls in Google Sheets
Every call is automatically added as a new row in a spreadsheet. Date, caller, reason, urgency, all sorted and filterable. Ideal for reporting and analysis.
Build Custom Automations
Through webhook platforms like Zapier, Make, or n8n, you can connect Safina with over 5,000 apps. Automatic follow-up emails, calendar entries, ticket creation, all without code.
Frequently Asked Questions
What events can I subscribe to?
Safina currently supports five events: call.received, call.answered, call.ended, call.rejected, and summary.data_query_result. You can freely combine which events trigger a notification for each webhook.
What authentication methods are supported?
Three methods: Bearer Token (in the Authorization header), API Key (in the header or body), and no authentication. You can also define custom headers if your receiving system requires them.
Can I filter events?
Yes. When creating a webhook, you select exactly which events you want to receive. You can also create multiple webhooks with different event subscriptions (for example, one for your CRM that only gets call.ended and one for Slack that also gets call.received).
What happens if my server is unreachable?
Safina automatically retries delivery up to 3 times. If all attempts fail, the webhook is marked as failed. You can see the status in the app and manually trigger a resend.
Can I test webhooks without making real calls?
Yes. Safina includes a built-in test feature. You can send a test payload to your URL at any time to verify that the connection works and your system processes the data correctly.
What format is the data sent in?
JSON. The payload is structured and documented. Each event has a defined schema, so you can reliably parse the data.