Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.voxfra.com/llms.txt

Use this file to discover all available pages before exploring further.

Normalized call record

Voxfra normalizes each Vapi payload into a unified call record. This is what you see in the admin console and when querying the Management API.
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "organization_id": "00000000-0000-0000-0000-000000000001",
  "client_id": "00000000-0000-0000-0000-000000000002",
  "created_at": "2026-04-14T10:05:31.204Z",
  "call_start_time": "2026-04-14T10:00:00Z",
  "call_end_time": "2026-04-14T10:05:30Z",
  "call_duration_seconds": 330,
  "caller_phone_number": "+15551234567",
  "caller_full_name": null,
  "call_summary": "Customer inquired about vehicle pricing.",
  "transcript": "Hello, how can I help you today?...",
  "transfer_flag": false,
  "hangup_reason": null,
  "recording_url": "https://recordings.vapi.ai/call_abc123.mp3",
  "phone_call_provider": "vapi",
  "call_provider_call_sid": "call_abc123"
}

Current field mapping

Normalized fieldVapi source
call_provider_call_sidcall.id
call_start_timecall.startedAt
call_end_timecall.endedAt
call_duration_secondsderived
caller_phone_numbercustomer.number
transcripttranscript
call_summaryanalysis.summary
recording_urlrecordingUrl
Fields that Vapi does not supply are stored as null. Additional provider mappings will be documented here as they are released.

Idempotency

Voxfra deduplicates webhooks by call ID within a 24-hour window. If your provider retries delivery:
  • The second request returns 200 immediately
  • No duplicate record is written
  • The duplicate: true flag is set in the response body
{
  "success": true,
  "requestId": "req_abc456",
  "duplicate": true
}