Vapi
Send Vapi end-of-call reports to Voxmith
Voxmith accepts Vapi's standard end-of-call-report payload and turns its transcript into a conversation with events for each caller and assistant exchange. Vapi already provides the transcript, so Voxmith does not run speech-to-text again. Internal Vapi function calls are also captured as nested tool events.
Configure the webhook
Configure the Vapi assistant or phone number server with:
URL: https://api.voxmith.com/api/voice/v1/webhooks/vapi
Method: POST
Header: X-Org-Id: <your-voxmith-org-id>
Server message: end-of-call-reportGet your organization ID from app.voxmith.com. It must be a UUID.
If the assistant or phone number already sends events to another server URL, forward the unchanged Vapi request body from that server to Voxmith. Vapi selects one server URL for each event rather than broadcasting it to every configured URL.
Required data
The report must contain:
message.typeequal toend-of-call-report.- A stable call ID in
message.call.id. - The caller number in
message.call.customer.numberormessage.customer.number. - Structured turns in
message.artifact.messages, or a transcript inmessage.artifact.transcriptormessage.transcript.
The call ID becomes the Voxmith conversation ID, the caller number becomes the user ID, and the Vapi assistant name becomes the agent name. AI, Assistant, and Bot transcript labels map to the agent; User, Customer, and Caller map to the user.
Repeated deliveries map to the same conversation but can duplicate its events. Avoid manually replaying a successful report; retry only reports that received a non-2xx response.
Internal tool calls
When message.artifact.messages or message.artifact.messagesOpenAIFormatted contains a Vapi function call, Voxmith keeps the existing synthetic TOOL CALL: <name> agent event and stores the exact function call beneath it as a child tool event. The child records the Vapi tool name, arguments, result, success state, source call ID and type, timestamp, and measured call-to-result latency. Calls from the two Vapi message representations are correlated by tool-call ID rather than captured twice.
Tool arguments and results can contain sensitive application data. Only return fields that are appropriate to retain in your Voxmith organization; redact credentials and secrets in the Vapi tool implementation before they enter the end-of-call report.
Response
{
"status": "accepted",
"session_id": "01a01158-b8d1-7000-aafb-c3bd72914986",
"user_id": "+15559876543",
"event_count": 3
}The conversation metadata includes available Vapi call status, timing, end reason, cost, summary, structured analysis, assistant and phone-number identifiers, and safe recording or log URLs. Voxmith also attaches Vapi's completed total cost to exactly one event so the conversation cost appears without being multiplied by the number of exchanges. The call is timestamped from Vapi's startedAt value.
Troubleshooting
422for a missing header: addX-Org-Idto the Vapi server configuration or forwarded request.400for the organization ID: confirmX-Org-Idis a valid UUID.400for the event type: enableend-of-call-reportin Vapi's server messages.400for identity: ensuremessage.call.idand the caller number are present.422for an empty transcript: ensure Vapi transcript artifacts are enabled for the call.
Next steps
- Conversations: review complete Vapi calls.
- Events: inspect each caller and assistant exchange.
- Intents: understand why callers contacted the agent.