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

# Vapi

> Reference guide for connecting Vapi to Voxfra.

## Overview

Vapi is the current production webhook integration supported by Voxfra.

Use Voxfra when you want Vapi call events to land inside a multi-tenant control layer instead of flowing directly into ad hoc downstream automations.

## Endpoint format

```text theme={null}
POST https://api.voxfra.com/webhook/vapi/{slug}
```

* `vapi` is the active provider segment.
* `{slug}` maps the request to the correct organization and client.

## Recommended Vapi configuration

### Set the server URL at the assistant level

We recommend configuring the Voxfra webhook URL at the **assistant** level in Vapi. That gives you a predictable boundary for the assistant that should write into a specific Voxfra client endpoint.

### Send end-of-call reports

Voxfra expects the `end-of-call-report` message type as the primary event for ingestion.

### Keep the payload rich

If available in your Vapi configuration, keep these fields enabled:

* transcript
* recording URL
* analysis summary
* sentiment
* intent

These are not all required, but they make the resulting call record more useful for downstream workflows and analytics.

## Minimum event shape

```json theme={null}
{
  "call": {
    "id": "call_abc123",
    "status": "completed",
    "startedAt": "2026-04-14T10:00:00Z",
    "endedAt": "2026-04-14T10:05:30Z"
  },
  "customer": {
    "number": "+15551234567"
  },
  "transcript": "Hello, how can I help you today?",
  "recordingUrl": "https://recordings.vapi.ai/call_abc123.mp3"
}
```

## What Voxfra adds around Vapi

Vapi gives you the conversation endpoint. Voxfra gives you the operational boundary around that endpoint.

That usually means:

* stable tenant or client routing
* repeatable onboarding per client or location
* cleaner downstream workflow context
* clearer tracing and governance around ingestion

## Testing delivery

```bash theme={null}
curl -X POST \
  https://api.voxfra.com/webhook/vapi/YOUR_SLUG \
  -H "Content-Type: application/json" \
  -d '{
    "call": {
      "id": "test_call_001",
      "status": "completed",
      "startedAt": "2026-04-14T10:00:00Z",
      "endedAt": "2026-04-14T10:05:30Z"
    },
    "customer": { "number": "+15551234567" },
    "transcript": "Test call"
  }'
```

## Troubleshooting

### 404 responses

The slug is invalid or inactive. Regenerate the endpoint in Voxfra and update the Vapi server URL.

### Missing call record fields

Check whether Vapi is sending the relevant fields in the end-of-call report, especially transcript and analysis properties.

### Duplicate actions downstream

Confirm your downstream workflow respects the idempotency behavior documented in the webhook integration overview.

## Related pages

* [Webhook Integration Overview](/webhook-integration/overview)
* [Setup Guide](/webhook-integration/setup-guide)
* [Call Record Format](/webhook-integration/payload)
