Skip to main content

Overview

Voxfra supports the following voice AI providers. Each has a dedicated path segment and expects its own payload format — Voxfra normalizes all of them before storage.
ProviderPath segmentTrigger event
VapivapiEnd-of-call report
RetellretellCall ended
BlandblandCall completed
LiveKitlivekitRoom ended
ElevenLabselevenlabsConversation ended
CustomcustomAny POST payload

Vapi

Webhook URL format:
POST https://api.voxfra.com/webhook/vapi/{slug}
In your Vapi dashboard, set the Server URL for your assistant to the webhook URL above. Vapi sends an end-of-call report when the call ends. Minimum required fields:
{
  "call": {
    "id": "call_abc123",
    "status": "completed",
    "startedAt": "2026-04-14T10:00:00Z",
    "endedAt": "2026-04-14T10:05:30Z"
  },
  "transcript": "Hello, how can I help you today?...",
  "customer": {
    "number": "+15551234567"
  },
  "recordingUrl": "https://recordings.vapi.ai/call_abc123.mp3"
}
Voxfra also reads analysis.summary, analysis.sentiment, and analysis.intent if present.

Retell

Webhook URL format:
POST https://api.voxfra.com/webhook/retell/{slug}
In Retell, configure the webhook URL under Agent Settings → Webhook. Retell posts a call-ended event.

Bland

Webhook URL format:
POST https://api.voxfra.com/webhook/bland/{slug}
In Bland’s dashboard, add the webhook URL under Integrations → Webhooks for your campaign.

LiveKit

Webhook URL format:
POST https://api.voxfra.com/webhook/livekit/{slug}
In the LiveKit Cloud console, add a webhook endpoint and select the Room Ended event. LiveKit posts a room lifecycle event. Minimum required fields:
{
  "room": {
    "sid": "RM_abc123xyz",
    "name": "customer-call-001",
    "duration": 330,
    "creation_time": "2026-04-14T10:00:00Z",
    "end_time": "2026-04-14T10:05:30Z",
    "status": "completed"
  }
}

ElevenLabs

Webhook URL format:
POST https://api.voxfra.com/webhook/elevenlabs/{slug}
In ElevenLabs, configure the webhook under Conversational AI → Webhook in your agent settings.

Custom

Webhook URL format:
POST https://api.voxfra.com/webhook/custom/{slug}
For providers not listed above, or for your own backend, use the custom path. Any valid JSON payload up to 1 MB is accepted as-is and forwarded to N8N for normalization. Define your own normalization logic in N8N.

Testing your webhook

You can test delivery using curl:
curl -X POST \
  https://api.voxfra.com/webhook/vapi/YOUR_SLUG \
  -H "Content-Type: application/json" \
  -d '{
    "call": { "id": "test_call_001", "status": "completed" },
    "transcript": "Test call."
  }'
A successful response:
{ "success": true, "requestId": "req_xe9k2a7f" }