> ## 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.

# Call Record Format

> How Voxfra normalizes Vapi payloads into a unified call record.

## 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](/api-reference/calls/list).

```json theme={null}
{
  "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 field         | Vapi source        |
| ------------------------ | ------------------ |
| `call_provider_call_sid` | `call.id`          |
| `call_start_time`        | `call.startedAt`   |
| `call_end_time`          | `call.endedAt`     |
| `call_duration_seconds`  | derived            |
| `caller_phone_number`    | `customer.number`  |
| `transcript`             | `transcript`       |
| `call_summary`           | `analysis.summary` |
| `recording_url`          | `recordingUrl`     |

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

```json theme={null}
{
  "success": true,
  "requestId": "req_abc456",
  "duplicate": true
}
```
