Skip to content

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 us
Vapi

Use Cases

Why integrate with Vapi

Common scenarios for SaaS companies building Vapi integrations for their customers.

01

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.

02

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.

03

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.

04

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.

05

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.

01

Assistant provisioning UI

Let your users create, update, and delete Vapi assistants from inside your product using list, create, update, and delete assistant operations.

02

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.

03

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.

04

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.

05

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.

06

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

01

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.

02

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.

03

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.

04

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.