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.
How it works
Voxfra currently accepts inbound webhooks from Vapi on a per-client basis. Each client in your organization gets a unique Vapi webhook URL. When a call ends, Vapi posts the call report to that URL and Voxfra handles validation, normalization, and storage.
For the provider-specific reference, see Vapi.
POST https://api.voxfra.com/webhook/vapi/{slug}
| Part | Description |
|---|
provider | Currently vapi |
slug | Client-specific identifier that maps to your organization and client |
Example:
POST https://api.voxfra.com/webhook/vapi/abc-motors-vapi-xe9k2a7f
Authentication
Each webhook URL uses a unique slug as its authentication mechanism. The slug is:
- Unique across the entire platform
- Scoped to exactly one organization + client + provider combination
- Revocable from the admin console at any time
No request headers are required for basic delivery. For additional security, you can optionally enable HMAC signature verification when creating or updating a webhook endpoint — Voxfra will validate the provider’s request signature before processing the payload.
Processing flow
When a webhook arrives:
- Slug resolved — maps to the correct organization and client
- Schema validated — provider-specific payload checked; returns
400 on mismatch
- Idempotency checked — duplicate call IDs within a 24-hour window are accepted but not reprocessed
- Normalized and stored — call data is extracted, normalized into a unified format, and written to Voxfra
- Available — the call appears in the admin console and via the Management API
Limits
| Parameter | Limit |
|---|
| Rate limit | 1,000 requests / minute per endpoint |
| Body size | 1 MB |
| Idempotency window | 24 hours (by call ID) |
Managing webhook URLs
Webhook endpoints are managed in the Voxfra admin console under Settings → Webhooks → Inbound for each client. You can:
- Create a new URL for a provider
- Copy the URL to paste into your provider’s dashboard
- View
last_used_at and request_count per endpoint
- Toggle an endpoint inactive without revoking it
- Revoke and replace a URL if it’s compromised
- Configure an IP allowlist or HMAC secret per endpoint
Each client can have one active Vapi webhook endpoint at a time. Additional provider support will be documented here as it becomes available.
Responses
A successful ingestion returns:
{
"success": true,
"requestId": "req_xe9k2a7f"
}
All error responses include a requestId for tracing:
| Status | Meaning |
|---|
200 | Accepted and processed |
400 | Payload failed schema validation |
404 | Slug not found or endpoint inactive |
429 | Rate limit exceeded — check Retry-After header |
500 | Internal error — contact support with requestId |