Voice
Vapi
API integration
Ship Voice features without building the integration. Full Vapi API access via Proxy and 80+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Talk to usUse Cases
Why integrate with Vapi
Common scenarios for SaaS companies building Vapi integrations for their customers.
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
Ship these features with Truto + Vapi
Concrete product features your team can ship faster by leveraging Truto’s Vapi integration instead of building from scratch.
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.
SuperAI
Vapi AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
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.
Why Truto
Why use Truto’s MCP server for Vapi
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 500+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with Vapi in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Vapi account
Use Truto’s frontend SDK to connect your customer’s Vapi account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Vapi
Truto’s Proxy API is a 1-to-1 mapping of the Vapi API. You call us, we call Vapi, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Vapi’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Vapi on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
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.
Vapi
Get Vapi integrated into your app
Our team understands what it takes to make a Vapi integration successful. A short, crisp 30 minute call with folks who understand the problem.