---
title: Vapi API Integration on Truto
slug: vapi
category: Voice
canonical: "https://truto.one/integrations/detail/vapi/"
---

# Vapi API Integration on Truto



**Category:** Voice  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 86 tools for Vapi that AI agents can call directly.

- **list_all_vapi_assistants** — List vapi assistants. Returns: id, createdAt, updatedAt. Supports optional filtering by creation and update timestamps (gt, lt, ge, le variants for both createdAt and updatedAt).
- **create_a_vapi_assistant** — Create a new vapi assistant. Returns: id, createdAt, updatedAt.
- **get_single_vapi_assistant_by_id** — Get a single vapi assistant by id. Returns: id, createdAt, updatedAt. Required: id.
- **update_a_vapi_assistant_by_id** — Update a vapi assistant by id using a partial payload. Returns: id, createdAt, updatedAt. Required: id.
- **delete_a_vapi_assistant_by_id** — Delete a vapi assistant by id. Returns the deleted assistant object including id, createdAt, updatedAt. Required: id.
- **list_all_vapi_squads** — List vapi squads. Returns: id, createdAt, updatedAt per squad. Supports optional filtering by createdAt and updatedAt date ranges.
- **create_a_vapi_squad** — Create a new vapi squad. Returns: id, createdAt, updatedAt of the newly created squad.
- **get_single_vapi_squad_by_id** — Get a single vapi squad by id. Returns: id, createdAt, updatedAt. Required: id.
- **update_a_vapi_squad_by_id** — Update an existing vapi squad by id. Returns: id, createdAt, updatedAt of the updated squad. Required: id.
- **delete_a_vapi_squad_by_id** — Delete a vapi squad by id. Returns the deleted squad object including id, createdAt, updatedAt. Required: id.
- **list_all_vapi_calls** — List vapi calls with optional filters. Returns an array of call records each including id, type, assistantId, phoneNumberId, createdAt, and updatedAt. Filter by id, assistantId, phoneNumberId, or creation/update date ranges.
- **create_a_vapi_call** — Create a new vapi call. Returns the created call object including id, type, assistantId, phoneNumberId, createdAt, and updatedAt.
- **get_single_vapi_call_by_id** — Get a single vapi call by id. Returns: id, type, assistantId, phoneNumberId, createdAt, updatedAt. Required: id.
- **update_a_vapi_call_by_id** — Update a vapi call by id. Returns the updated call object including id, type, assistantId, phoneNumberId, createdAt, and updatedAt. Required: id.
- **delete_a_vapi_call_by_id** — Delete a vapi call by id. Returns the deleted call object including id, type, assistantId, phoneNumberId, createdAt, and updatedAt. Required: id.
- **list_all_vapi_mono_recordings** — Download the mono-channel audio recording for a vapi call. Returns a 302 redirect to a short-lived presigned URL for the audio file; the recording content is served from the redirect target. Required: id.
- **list_all_vapi_stereo_recordings** — Download the stereo recording for a vapi call by call id. Returns a redirect (302) to a short-lived presigned URL for the binary audio recording file; no structured JSON body is returned. Required: id.
- **list_all_vapi_video_recordings** — Download the video recording for a vapi call by call id. The endpoint issues a 302 redirect to a short-lived presigned URL pointing to the video file — follow the redirect to access the recording. Required: id.
- **list_all_vapi_customer_recordings** — Download the customer-side recording for a vapi call by call id. Returns an audio recording file (200 OK) or redirects to a short-lived presigned URL for the recording (302). Required: id.
- **list_all_vapi_assistant_recordings** — Download the assistant recording for a vapi call. Returns a 302 redirect to a short-lived presigned URL for the audio recording file rather than a structured JSON body. Required: id (call UUID).
- **list_all_vapi_pcaps** — Download the packet capture (pcap) file for a vapi call. Returns a 302 redirect to a short-lived presigned URL for the pcap binary file; no JSON response body is returned. Required: id (Call ID, UUID).
- **list_all_vapi_call_logs** — Download call logs for a vapi call by id. Redirects (302) to a short-lived presigned URL for the log file rather than returning a structured JSON body. Required: id.
- **list_all_vapi_chats** — List vapi chats with optional filters. Returns: id, assistantId, sessionId, createdAt, updatedAt, cost, duration. Filter by assistantId, squadId, sessionId, previousChatId, or createdAt/updatedAt date ranges.
- **create_a_vapi_chat** — Create a new vapi chat, optionally with SMS delivery via the transport field. Returns: id, assistantId, sessionId, createdAt, updatedAt, cost, duration. At least one of assistantId, assistant, sessionId, or previousChatId must be supplied; sessionId and previousChatId are mutually exclusive and sessionId cannot be combined with transport.
- **get_single_vapi_chat_by_id** — Get a single vapi chat by id. Returns: id, assistantId, sessionId, createdAt, updatedAt, cost, duration. Required: id.
- **delete_a_vapi_chat_by_id** — Delete a vapi chat by id. Returns the deleted chat object including id, assistantId, sessionId, createdAt, updatedAt, cost, duration. Required: id.
- **create_a_vapi_chat_response** — Create a chat response in vapi using the OpenAI-compatible Responses API. Returns a response object whose shape depends on streaming configuration — either a ResponseObject for non-streaming requests or one of the streaming event types (ResponseTextDeltaEvent, ResponseTextDoneEvent, ResponseCompletedEvent, ResponseErrorEvent) for streaming requests; the exact field-level schema follows the OpenAI Responses API spec.
- **list_all_vapi_campaigns** — List vapi campaigns with optional filters. Returns: id, status, createdAt, updatedAt, duration, cost. Supports filtering by id, status, and createdAt/updatedAt date ranges, and sorting by createdAt, duration, or cost.
- **create_a_vapi_campaign** — Create a new vapi campaign. Returns the created campaign including id, status, createdAt, updatedAt, duration, and cost.
- **get_single_vapi_campaign_by_id** — Get a single vapi campaign by id. Returns: id, status, createdAt, updatedAt, duration, cost. Required: id.
- **update_a_vapi_campaign_by_id** — Update a vapi campaign by id. Returns the updated campaign including id, status, createdAt, updatedAt, duration, and cost. Required: id.
- **delete_a_vapi_campaign_by_id** — Delete a vapi campaign by id. Returns the deleted campaign including id, status, createdAt, updatedAt, duration, and cost. Required: id.
- **list_all_vapi_sessions** — List vapi sessions with optional filters for assistant, squad, workflow, customer details, and date ranges. Returns: id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, cost. Supports sorting by createdAt, duration, or cost.
- **create_a_vapi_session** — Create a new vapi session. Returns the created session object including id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, and cost.
- **get_single_vapi_session_by_id** — Get a single vapi session by id. Returns: id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, cost. Required: id.
- **update_a_vapi_session_by_id** — Update a vapi session by id. Returns the updated session object including id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, and cost. Required: id.
- **delete_a_vapi_session_by_id** — Delete a vapi session by id. Returns the deleted session object including id, name, assistantId, squadId, workflowId, createdAt, updatedAt, duration, and cost. Required: id.
- **list_all_vapi_phone_numbers** — List all vapi phone numbers across supported telephony providers. Returns: id, provider, name, number, createdAt, updatedAt. Supports optional filtering by createdAt and updatedAt date ranges.
- **create_a_vapi_phone_number** — Create a new vapi phone number backed by a supported telephony provider. Returns: id, provider, name, number, createdAt, updatedAt. Required: provider.
- **get_single_vapi_phone_number_by_id** — Get a single vapi phone number by id. Returns: id, provider, name, number, createdAt, updatedAt. Required: id.
- **update_a_vapi_phone_number_by_id** — Update a vapi phone number by id. Returns: id, provider, name, number, createdAt, updatedAt. Required: id.
- **delete_a_vapi_phone_number_by_id** — Delete a vapi phone number by id. Returns the deleted phone number object including id, provider, name, number, createdAt, updatedAt. Required: id.
- **list_all_vapi_tools** — List all vapi tools. Returns: id, type, createdAt, updatedAt per item. Supports date range filters on createdAt and updatedAt via eight optional filter parameters.
- **create_a_vapi_tool** — Create a new vapi tool. Returns: id, type, createdAt, updatedAt. Required: type (discriminator that selects the tool variant and its associated fields, e.g. apiRequest, function, transferCall, sms, mcp, and others).
- **get_single_vapi_tool_by_id** — Get a single vapi tool by id. Returns: id, type, createdAt, updatedAt. Required: id.
- **update_a_vapi_tool_by_id** — Update a vapi tool by id using a partial payload. Returns: id, type, createdAt, updatedAt. Required: id, type.
- **delete_a_vapi_tool_by_id** — Delete a vapi tool by id. Returns the deleted tool object including id, type, createdAt, updatedAt. Required: id.
- **list_all_vapi_files** — List files in vapi filtered by purpose. Returns: id, purpose. Required: purpose.
- **create_a_vapi_file** — Upload a new file to vapi. Returns: id, purpose of the created file.
- **get_single_vapi_file_by_id** — Get a vapi file by id. Returns: id, purpose. Required: id.
- **update_a_vapi_file_by_id** — Update a vapi file by id. Returns: id, purpose of the updated file. Required: id.
- **delete_a_vapi_file_by_id** — Delete a vapi file by id. Returns: id, purpose of the deleted file on success (200). Required: id.
- **list_all_vapi_structured_outputs** — List vapi structured outputs with optional filtering by id, name, and creation or update date ranges. Returns: id, name, createdAt, updatedAt, duration, cost. Sortable by createdAt, duration, or cost.
- **create_a_vapi_structured_output** — Create a new structured output in vapi. Returns: id, name, createdAt, updatedAt, duration, cost.
- **get_single_vapi_structured_output_by_id** — Get a single vapi structured output by id. Returns: id, name, createdAt, updatedAt, duration, cost. Required: id.
- **update_a_vapi_structured_output_by_id** — Update a vapi structured output by id. Returns: id, name, createdAt, updatedAt, duration, cost. Required: id, schemaOverride.
- **delete_a_vapi_structured_output_by_id** — Delete a vapi structured output by id. Returns the deleted structured output including id, name, createdAt, updatedAt, duration, and cost. Required: id.
- **create_a_vapi_structured_output_run** — Run a structured output job in vapi by submitting a StructuredOutputRunDTO payload. Returns a StructuredOutput object. The request body is required; refer to the vapi API docs for the full StructuredOutputRunDTO schema, as field-level details are not enumerated in the available source.
- **list_all_vapi_reporting_insights** — List vapi reporting insights. Returns: id, type, createdAt, updatedAt. Supports filtering by createdAt and updatedAt ranges, and sorting by createdAt, duration, or cost.
- **create_a_vapi_reporting_insight** — Create a new vapi reporting insight of type bar, pie, line, or text. Returns: id, type, createdAt, updatedAt. Required: type.
- **get_single_vapi_reporting_insight_by_id** — Get a single vapi reporting insight by id. Returns: id, type, createdAt, updatedAt. Required: id.
- **update_a_vapi_reporting_insight_by_id** — Update a vapi reporting insight by id. Returns: id, type, createdAt, updatedAt. Required: id.
- **delete_a_vapi_reporting_insight_by_id** — Delete a vapi reporting insight by id. Returns the deleted insight including id, type, createdAt, updatedAt. Required: id.
- **create_a_vapi_run** — Run a vapi insight by id to trigger its report execution. Returns the insight run result. Required: id.
- **create_a_vapi_insight_preview** — Preview a vapi reporting insight by posting a chart configuration built from call table data. Accepts a discriminated union keyed on type — one of bar, pie, line, or text — each mapping to its own DTO shape. Returns: id and type-specific result attributes. Required: type.
- **list_all_vapi_evals** — List vapi Evals with optional filtering and sorting. Returns a paginated collection of eval records; each record includes id, createdAt, updatedAt, duration, and cost. Filter by id or createdAt/updatedAt date ranges; sort by createdAt, duration, or cost.
- **create_a_vapi_eval** — Create a new Eval in vapi. Returns the created eval object including id, createdAt, updatedAt, duration, and cost.
- **get_single_vapi_eval_by_id** — Get a single vapi Eval by id. Returns: id, createdAt, updatedAt, duration, cost. Required: id.
- **update_a_vapi_eval_by_id** — Update a vapi Eval by id. Returns the updated eval object including id, createdAt, updatedAt, duration, and cost. Required: id.
- **delete_a_vapi_eval_by_id** — Delete a vapi Eval by id. Returns the deleted eval object including id, createdAt, updatedAt, duration, and cost. Required: id.
- **get_single_vapi_eval_run_by_id** — Get a single vapi eval run by id. Returns the eval run object including id, createdAt, updatedAt, duration, and cost. Required: id.
- **delete_a_vapi_eval_run_by_id** — Delete a vapi eval run by id. Returns the deleted eval run object including id, createdAt, updatedAt, duration, and cost. Required: id.
- **list_all_vapi_eval_runs** — List vapi eval runs with optional filtering and sorting. Returns a collection of eval run objects, each including id, createdAt, updatedAt, duration, and cost. Supports filtering by createdAt and updatedAt date ranges and sorting by createdAt, duration, or cost.
- **create_a_vapi_eval_run** — Create a new vapi eval run. Returns the created eval run object including id, createdAt, updatedAt, duration, and cost.
- **get_single_vapi_observability_scorecard_by_id** — Get a single vapi observability scorecard by id. Returns: id, createdAt, updatedAt, duration, cost. Required: id.
- **update_a_vapi_observability_scorecard_by_id** — Update a vapi observability scorecard by id. Returns the updated scorecard including id, createdAt, updatedAt, duration, and cost. Required: id.
- **delete_a_vapi_observability_scorecard_by_id** — Delete a vapi observability scorecard by id. Returns the deleted scorecard including id, createdAt, updatedAt, duration, and cost. Required: id.
- **list_all_vapi_observability_scorecards** — List vapi observability scorecards with optional filtering by id and date ranges, and sorting by createdAt, duration, or cost. Returns: id, createdAt, updatedAt, duration, cost.
- **create_a_vapi_observability_scorecard** — Create a new vapi observability scorecard. Returns the created scorecard including id, createdAt, updatedAt, duration, and cost.
- **list_all_vapi_providers** — List vapi provider resources for a specified provider and resource type. Returns: id and provider-specific attributes. Required: provider, resource_name. Supports filtering by createdAt/updatedAt date ranges and sorting by createdAt, duration, or cost.
- **create_a_vapi_provider** — Create a new vapi provider resource for the specified provider and resource type. The request body shape is provider-specific. Returns: id and provider-specific attributes. Required: provider, resource_name.
- **get_single_vapi_provider_by_id** — Get a single vapi provider resource by id. Returns: id and provider-specific attributes. Required: provider, resource_name, id.
- **update_a_vapi_provider_by_id** — Update a vapi provider resource by id. The request body shape is provider-specific. Returns: id and provider-specific attributes. Required: provider, resource_name, id.
- **delete_a_vapi_provider_by_id** — Delete a vapi provider resource by id. Returns the deleted resource including its id and provider-specific attributes. Required: provider, resource_name, id.
- **create_a_vapi_analytics** — Create analytics queries in vapi to retrieve aggregated call and usage metrics. Returns an array of query result objects, each containing id and result. Required: queries (array of query objects each specifying table, name, and operations).
- **list_all_vapi_phone_numbers_v_2** — List phone numbers configured in vapi. Returns: id.

## How it works

1. **Link your customer's Vapi account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Vapi.** The Proxy API is a 1-to-1 mapping of the Vapi API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Embed AI voice agents into your SaaS** — Let your customers spin up branded voice assistants directly inside your product — for sales outreach, support, or scheduling — without your team rebuilding the voice stack. Truto handles auth and API quirks so you ship the integration in days.
- **Trigger outbound calls from in-app events** — CRMs, ATSs, and revenue platforms can fire Vapi calls the moment a lead is captured, a candidate applies, or a renewal nears. Your users configure once, and your backend orchestrates calls through Truto on their behalf.
- **Sync call artifacts into your platform** — Pull recordings, transcripts, call logs, and PCAPs back into your product so users get a unified record of every conversation. Useful for compliance, QA, and analytics workloads where audio retention is mandatory.
- **Productize post-call data extraction** — Use Vapi's structured outputs to feed clean, typed JSON from every call into your platform's data model — no transcript parsing, no regex, no LLM glue code on your side.
- **Offer voice QA and evals as a feature** — QA, RevOps, and contact center platforms can surface Vapi eval runs and observability scorecards inside their own dashboards, letting customers track agent performance, compliance, and latency over time.

## What you can build

- **Assistant provisioning UI** — Let your users create, update, and delete Vapi assistants from inside your product using list, create, update, and delete assistant operations.
- **Event-driven outbound calling** — Kick off Vapi calls from internal triggers (new lead, abandoned cart, appointment reminder) by calling the create call endpoint with a user-selected assistant.
- **Mid-call tool registration** — Programmatically register your customers' API endpoints as Vapi tools so their AI agents can look up records, book slots, or transfer calls in real time.
- **Structured output mapping** — Let users define structured output schemas through your UI, then run extractions on completed calls and map the typed JSON directly into your database fields.
- **Call recording and transcript vault** — Sync stereo, mono, customer, and assistant recordings along with call logs into your platform for long-term retention, search, and compliance workflows.
- **Squad-based call routing** — Build a UI where users compose multi-assistant squads — e.g., triage agent → specialist agent — and provision them via the squads endpoints.

## FAQs

### How does authentication work for Vapi through Truto?

Vapi uses API key authentication. Through Truto, your end users connect their Vapi account by supplying their private API key, and Truto stores and rotates credentials securely so your backend never handles them directly.

### Which Vapi resources can I read and write?

Truto exposes full CRUD on assistants, squads, calls, chats, campaigns, sessions, phone numbers, tools, files, structured outputs, reporting insights, evals, observability scorecards, and providers. You can also list call artifacts including mono, stereo, video, customer, and assistant recordings, PCAPs, and call logs.

### Can I download call recordings and audio artifacts?

Yes. The recording and PCAP list endpoints return short-lived presigned URLs from Vapi. You'll need to fetch and persist the binary data to your own storage if you require long-term retention for compliance.

### How do I keep call data fresh in my product?

Vapi data is fetched on-demand through Truto. For near real-time updates, poll the list calls endpoint or use Vapi's native webhooks to trigger a refetch of the specific call, recording, or structured output when a call completes.

### Can my users define their own structured output schemas?

Yes. You can build a schema editor in your product and persist it via the create and update structured output endpoints, then trigger extractions per call using the create structured output run endpoint.

### Does Truto support Vapi's evals and observability data?

Yes. You can create and manage evals, trigger eval runs, fetch run results, and read or write observability scorecards — useful for surfacing agent quality metrics inside your own analytics or QA dashboards.
