What You Receive
Every webhook delivery contains the following fields:| Field | Type | Description |
|---|---|---|
call_id | string | Unique identifier for the call |
from_number | string | Caller’s phone number in E.164 format |
to_number | string | The number that was called |
agent_id | string | ID of the AI agent that handled the call |
duration_seconds | integer | Total call duration in seconds |
start_time | ISO 8601 | Timestamp when the call started |
end_time | ISO 8601 | Timestamp when the call ended |
recording_url | string | URL to the call recording audio file |
transcript | string | Full conversation transcript with speaker labels |
call_outcome | string | answered, voicemail, or failed |
summary | string | AI-generated summary of the call |
Configuring a Webhook
Go to Settings → Webhooks → Add Webhook
Open your VoiceInfra dashboard, navigate to Settings → Webhooks, and click Add Webhook.
Enter your endpoint URL
Paste the URL of your server endpoint. The endpoint must be publicly accessible over HTTPS and respond with an HTTP
200 status code within the timeout window.Set a webhook secret (recommended)
Enter a secret string of your choice. VoiceInfra uses this secret to sign every payload with HMAC-SHA256 and sends the signature in the
X-VoiceInfra-Signature header. Verify this signature in your handler to confirm the request is authentic.Test the webhook
Click Test to send a sample payload to your endpoint immediately. Check your server logs to confirm it received the request and returned
200. Fix any connectivity issues before enabling.Verifying Webhook Signatures
Always verify theX-VoiceInfra-Signature header before processing a payload. This ensures the request came from VoiceInfra and was not tampered with in transit.
Use
hmac.compare_digest instead of == to prevent timing attacks when comparing signature strings.Example Webhook Payload
Delivery Logs
Every webhook delivery is recorded in your dashboard. Access the logs at Settings → Webhooks → View Logs to see:- Timestamp — exact time the delivery was attempted
- HTTP status code — the response code returned by your endpoint
- Response time — how long your endpoint took to respond
- Full payload — the complete JSON body that was sent
- Response body — your endpoint’s response (useful for debugging)
Multiple Endpoints
Configure as many webhook endpoints as you need — one per system is a common pattern:- CRM endpoint — receives call data and logs Activities in Salesforce or HubSpot
- Analytics endpoint — feeds call metadata into your data warehouse or BI tool
- Notification endpoint — posts a summary to Slack or Teams when calls complete
Frequently Asked Questions
When exactly is the webhook triggered?
When exactly is the webhook triggered?
The webhook fires when the call completes — that is, when both parties have hung up. Post-call processing (transcript generation, AI summary) happens in the seconds immediately after hang-up, and the webhook is sent once that processing is complete.
Is the webhook secret required?
Is the webhook secret required?
No, but it is strongly recommended. Without a secret, you cannot verify that a request came from VoiceInfra. Any party that discovers your endpoint URL could send fake payloads. Set a secret and always validate the signature before acting on a payload.
Can I have multiple webhook endpoints?
Can I have multiple webhook endpoints?
Yes. Add as many endpoints as you need in Settings → Webhooks. Each endpoint receives every call payload independently.
What happens if my endpoint is down when a call completes?
What happens if my endpoint is down when a call completes?
VoiceInfra retries failed deliveries automatically. Check the delivery logs in your dashboard to see retry status. Once your endpoint recovers and returns
200, the delivery is marked successful.Does the transcript include both sides of the conversation?
Does the transcript include both sides of the conversation?
Yes. The transcript field contains the full conversation with speaker labels — both the caller’s words and the AI agent’s responses are included.
Can I disable a webhook without deleting it?
Can I disable a webhook without deleting it?
Yes. Toggle the webhook to Disabled in the dashboard. Your configuration is saved and no payloads are sent while disabled. Re-enable it at any time to resume delivery.