Run outbound voice AI phone calls with Vapi. Call a customer with a saved assistant or a one-off assistant built from a first message, system prompt, model, and voice, pass per-call variables, schedule calls, and ask Vapi for a summary, structured data, and a success evaluation after each call. Read calls, transcripts, recordings, and costs, list assistants and phone numbers, and start workflows when a call ends.
Place an outbound phone call with a Vapi voice assistant, now or within a scheduled window. Use a saved assistant ID, or describe a one-off assistant with a first message, system prompt, model, and voice. Returns the call ID and initial status.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Vapi private API key (Vapi dashboard → API Keys) |
phoneNumberId | string | Yes | ID of the Vapi phone number that places the call (from List Phone Numbers) |
customerNumber | string | Yes | Phone number to call, in E.164 format (e.g. +14155551234) |
customerName | string | No | Customer name, for your reference (max 40 characters) |
customerEmail | string | No | Customer email, for your reference (max 40 characters) |
customerExternalId | string | No | Your ID for the customer, e.g. a CRM contact ID (max 40 characters) |
assistantId | string | No | ID of a saved assistant. When set, the assistant fields below override it for this call only. When empty, they define a one-off assistant and model provider and model are required |
firstMessage | string | No | First thing the assistant says when the call connects |
systemPrompt | string | No | System prompt that tells the assistant how to run the call |
modelProvider | string | No | LLM provider: openai or anthropic |
model | string | No | Model ID exactly as Vapi lists it for the provider, e.g. gpt-4.1, gpt-4o-mini, claude-sonnet-4-6 |
voiceProvider | string | No | Voice provider: 11labs, vapi, or cartesia |
voiceId | string | No | Voice ID for the provider, e.g. a Vapi voice name such as Elliot or an ElevenLabs or Cartesia voice ID |
maxDurationSeconds | number | No | Hang up after this many seconds (10-43200, Vapi default 600) |
summaryPrompt | string | No | Instructions for the post-call summary, replacing Vapi's default 2-3 sentence summary prompt |
structuredDataSchema | json | No | JSON Schema of the data to extract from the call after it ends, e.g. {"type":"object","properties":{"interested":{"type":"boolean"}}} |
successEvaluationRubric | string | No | Rubric for the post-call success evaluation: NumericScale, DescriptiveScale, Checklist, Matrix, PercentageScale, LikertScale, AutomaticRubric, PassFail |
variableValues | json | No | Values for the assistant template variables, e.g. {"name": "Asha"} fills {{ name }} in the prompt and first message |
serverUrl | string | No | URL that receives this call's webhooks, such as a Vapi End of Call Report trigger URL |
serverSecret | string | No | Secret sent to the server URL in the X-Vapi-Secret header, matching the trigger secret token |
name | string | No | Call name, for your reference (max 40 characters) |
scheduleEarliestAt | string | No | Schedule the call for no earlier than this ISO 8601 date-time |
scheduleLatestAt | string | No | Latest ISO 8601 date-time the scheduled call can start |
| Parameter | Type | Description |
|---|
id | string | Call or assistant ID |
type | string | Call type |
status | string | Call status |
endedReason | string | Why the call ended |
endedMessage | string | More context on the ended reason |
name | string | Call or assistant name |
assistantId | string | Assistant used by the call |
phoneNumberId | string | Phone number used by the call |
customerNumber | string | Customer phone number |
customerName | string | Customer name |
createdAt | string | Creation timestamp |
updatedAt | string | Last update timestamp |
startedAt | string | When the call started |
endedAt | string | When the call ended |
cost | number | Total call cost in USD |
costBreakdown | json | Call cost in USD by component (transport, stt, llm, tts, vapi, total) |
transcript | string | Call transcript |
recordingUrl | string | Mono recording URL |
stereoRecordingUrl | string | Stereo recording URL |
summary | string | AI call summary |
structuredData | json | Data extracted from the call |
successEvaluation | string | Success evaluation of the call |
calls | json | Calls (id, status, endedReason, customerNumber, startedAt, endedAt, cost, transcript, summary, structuredData, ...) |
assistants | json | Assistants (id, name, firstMessage, modelProvider, model, voiceProvider, voiceId, serverUrl, ...) |
phoneNumbers | json | Phone numbers (id, provider, number, name, status, assistantId, serverUrl) |
firstMessage | string | Assistant first message |
firstMessageMode | string | Who speaks first |
modelProvider | string | Assistant LLM provider |
model | string | Assistant LLM model |
systemPrompt | string | Assistant system prompt |
voiceProvider | string | Assistant voice provider |
voiceId | string | Assistant voice ID |
maxDurationSeconds | number | Assistant maximum call length |
serverUrl | string | Assistant server URL |
serverMessages | json | Message types sent to the server URL |
Permanently delete a Vapi call and its data, including recordings. Returns the deleted call. This does not hang up a live call.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Vapi private API key (Vapi dashboard → API Keys) |
callId | string | Yes | ID of the call to delete |
| Parameter | Type | Description |
|---|
id | string | Call or assistant ID |
type | string | Call type |
status | string | Call status |
endedReason | string | Why the call ended |
endedMessage | string | More context on the ended reason |
name | string | Call or assistant name |
assistantId | string | Assistant used by the call |
phoneNumberId | string | Phone number used by the call |
customerNumber | string | Customer phone number |
customerName | string | Customer name |
createdAt | string | Creation timestamp |
updatedAt | string | Last update timestamp |
startedAt | string | When the call started |
endedAt | string | When the call ended |
cost | number | Total call cost in USD |
costBreakdown | json | Call cost in USD by component (transport, stt, llm, tts, vapi, total) |
transcript | string | Call transcript |
recordingUrl | string | Mono recording URL |
stereoRecordingUrl | string | Stereo recording URL |
summary | string | AI call summary |
structuredData | json | Data extracted from the call |
successEvaluation | string | Success evaluation of the call |
calls | json | Calls (id, status, endedReason, customerNumber, startedAt, endedAt, cost, transcript, summary, structuredData, ...) |
assistants | json | Assistants (id, name, firstMessage, modelProvider, model, voiceProvider, voiceId, serverUrl, ...) |
phoneNumbers | json | Phone numbers (id, provider, number, name, status, assistantId, serverUrl) |
firstMessage | string | Assistant first message |
firstMessageMode | string | Who speaks first |
modelProvider | string | Assistant LLM provider |
model | string | Assistant LLM model |
systemPrompt | string | Assistant system prompt |
voiceProvider | string | Assistant voice provider |
voiceId | string | Assistant voice ID |
maxDurationSeconds | number | Assistant maximum call length |
serverUrl | string | Assistant server URL |
serverMessages | json | Message types sent to the server URL |
Get a saved Vapi assistant by ID: model, system prompt, voice, first message, max duration, and server URL.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Vapi private API key (Vapi dashboard → API Keys) |
assistantId | string | Yes | ID of the assistant |
| Parameter | Type | Description |
|---|
id | string | Call or assistant ID |
type | string | Call type |
status | string | Call status |
endedReason | string | Why the call ended |
endedMessage | string | More context on the ended reason |
name | string | Call or assistant name |
assistantId | string | Assistant used by the call |
phoneNumberId | string | Phone number used by the call |
customerNumber | string | Customer phone number |
customerName | string | Customer name |
createdAt | string | Creation timestamp |
updatedAt | string | Last update timestamp |
startedAt | string | When the call started |
endedAt | string | When the call ended |
cost | number | Total call cost in USD |
costBreakdown | json | Call cost in USD by component (transport, stt, llm, tts, vapi, total) |
transcript | string | Call transcript |
recordingUrl | string | Mono recording URL |
stereoRecordingUrl | string | Stereo recording URL |
summary | string | AI call summary |
structuredData | json | Data extracted from the call |
successEvaluation | string | Success evaluation of the call |
calls | json | Calls (id, status, endedReason, customerNumber, startedAt, endedAt, cost, transcript, summary, structuredData, ...) |
assistants | json | Assistants (id, name, firstMessage, modelProvider, model, voiceProvider, voiceId, serverUrl, ...) |
phoneNumbers | json | Phone numbers (id, provider, number, name, status, assistantId, serverUrl) |
firstMessage | string | Assistant first message |
firstMessageMode | string | Who speaks first |
modelProvider | string | Assistant LLM provider |
model | string | Assistant LLM model |
systemPrompt | string | Assistant system prompt |
voiceProvider | string | Assistant voice provider |
voiceId | string | Assistant voice ID |
maxDurationSeconds | number | Assistant maximum call length |
serverUrl | string | Assistant server URL |
serverMessages | json | Message types sent to the server URL |
Get a Vapi call by ID: status, ended reason, transcript, recording, summary, structured data, success evaluation, and cost. Analysis and recording fields are filled once the call has ended.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Vapi private API key (Vapi dashboard → API Keys) |
callId | string | Yes | ID of the call, as returned by Create Call |
| Parameter | Type | Description |
|---|
id | string | Call or assistant ID |
type | string | Call type |
status | string | Call status |
endedReason | string | Why the call ended |
endedMessage | string | More context on the ended reason |
name | string | Call or assistant name |
assistantId | string | Assistant used by the call |
phoneNumberId | string | Phone number used by the call |
customerNumber | string | Customer phone number |
customerName | string | Customer name |
createdAt | string | Creation timestamp |
updatedAt | string | Last update timestamp |
startedAt | string | When the call started |
endedAt | string | When the call ended |
cost | number | Total call cost in USD |
costBreakdown | json | Call cost in USD by component (transport, stt, llm, tts, vapi, total) |
transcript | string | Call transcript |
recordingUrl | string | Mono recording URL |
stereoRecordingUrl | string | Stereo recording URL |
summary | string | AI call summary |
structuredData | json | Data extracted from the call |
successEvaluation | string | Success evaluation of the call |
calls | json | Calls (id, status, endedReason, customerNumber, startedAt, endedAt, cost, transcript, summary, structuredData, ...) |
assistants | json | Assistants (id, name, firstMessage, modelProvider, model, voiceProvider, voiceId, serverUrl, ...) |
phoneNumbers | json | Phone numbers (id, provider, number, name, status, assistantId, serverUrl) |
firstMessage | string | Assistant first message |
firstMessageMode | string | Who speaks first |
modelProvider | string | Assistant LLM provider |
model | string | Assistant LLM model |
systemPrompt | string | Assistant system prompt |
voiceProvider | string | Assistant voice provider |
voiceId | string | Assistant voice ID |
maxDurationSeconds | number | Assistant maximum call length |
serverUrl | string | Assistant server URL |
serverMessages | json | Message types sent to the server URL |
List the saved voice assistants in the Vapi account with their model, voice, first message, and server URL.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Vapi private API key (Vapi dashboard → API Keys) |
limit | number | No | Maximum number of items to return (0-1000, default 100) |
createdAtGt | string | No | Only items whose createdAt is after this ISO 8601 date-time |
createdAtLt | string | No | Only items whose createdAt is before this ISO 8601 date-time |
createdAtGe | string | No | Only items whose createdAt is at or after this ISO 8601 date-time |
createdAtLe | string | No | Only items whose createdAt is at or before this ISO 8601 date-time |
updatedAtGt | string | No | Only items whose updatedAt is after this ISO 8601 date-time |
updatedAtLt | string | No | Only items whose updatedAt is before this ISO 8601 date-time |
updatedAtGe | string | No | Only items whose updatedAt is at or after this ISO 8601 date-time |
updatedAtLe | string | No | Only items whose updatedAt is at or before this ISO 8601 date-time |
| Parameter | Type | Description |
|---|
assistants | array | Assistants in the account |
List Vapi calls, optionally filtered by call ID, assistant, phone number, and created or updated time.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Vapi private API key (Vapi dashboard → API Keys) |
id | string | No | Only the call with this ID |
assistantId | string | No | Only calls that used this assistant |
phoneNumberId | string | No | Only calls that used this Vapi phone number |
limit | number | No | Maximum number of items to return (0-1000, default 100) |
createdAtGt | string | No | Only items whose createdAt is after this ISO 8601 date-time |
createdAtLt | string | No | Only items whose createdAt is before this ISO 8601 date-time |
createdAtGe | string | No | Only items whose createdAt is at or after this ISO 8601 date-time |
createdAtLe | string | No | Only items whose createdAt is at or before this ISO 8601 date-time |
updatedAtGt | string | No | Only items whose updatedAt is after this ISO 8601 date-time |
updatedAtLt | string | No | Only items whose updatedAt is before this ISO 8601 date-time |
updatedAtGe | string | No | Only items whose updatedAt is at or after this ISO 8601 date-time |
updatedAtLe | string | No | Only items whose updatedAt is at or before this ISO 8601 date-time |
| Parameter | Type | Description |
|---|
calls | array | Calls matching the filters |
List the phone numbers in the Vapi account. Use a number ID as the phone number for Create Call.
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Vapi private API key (Vapi dashboard → API Keys) |
limit | number | No | Maximum number of items to return (0-1000, default 100) |
createdAtGt | string | No | Only items whose createdAt is after this ISO 8601 date-time |
createdAtLt | string | No | Only items whose createdAt is before this ISO 8601 date-time |
createdAtGe | string | No | Only items whose createdAt is at or after this ISO 8601 date-time |
createdAtLe | string | No | Only items whose createdAt is at or before this ISO 8601 date-time |
updatedAtGt | string | No | Only items whose updatedAt is after this ISO 8601 date-time |
updatedAtLt | string | No | Only items whose updatedAt is before this ISO 8601 date-time |
updatedAtGe | string | No | Only items whose updatedAt is at or after this ISO 8601 date-time |
updatedAtLe | string | No | Only items whose updatedAt is at or before this ISO 8601 date-time |
| Parameter | Type | Description |
|---|
phoneNumbers | array | Phone numbers in the account |
A Trigger is a block that starts a workflow when an event happens in this service.
Trigger workflow when a Vapi call ends and its report is ready, with transcript, summary, structured data, success evaluation, recording, and cost
| Parameter | Type | Required | Description |
|---|
secretToken | string | No | When set, deliveries must carry this token in the secret header. A "Bearer " prefix is accepted. |
secretHeaderName | string | No | Header that carries the secret token. Defaults to X-Vapi-Secret. |
hmacSecret | string | No | When set, deliveries must carry a valid HMAC signature in x-signature, computed over "{timestamp}.{body}" with the timestamp from x-timestamp. |
hmacAlgorithm | string | No | Must match the algorithm on the Vapi HMAC credential. |
| Parameter | Type | Description |
|---|
callId | string | Call ID |
status | string | Call status (ended once the report is sent) |
endedReason | string | Why the call ended (e.g. customer-ended-call, assistant-ended-call, voicemail) |
transcript | string | Call transcript |
summary | string | AI call summary (analysisPlan) |
structuredData | json | Data extracted with the structured-data schema (analysisPlan) |
successEvaluation | string | Success evaluation per the configured rubric (analysisPlan) |
recordingUrl | string | Mono recording URL |
stereoRecordingUrl | string | Stereo recording URL |
cost | number | Total call cost in USD |
startedAt | string | When the call started (ISO 8601) |
endedAt | string | When the call ended (ISO 8601) |
customerNumber | string | Customer phone number |
customerName | string | Customer name |
callType | string | Call type (inboundPhoneCall, outboundPhoneCall, webCall, vapi.websocketCall) |
assistantId | string | Saved assistant used by the call |
phoneNumberId | string | Vapi phone number used |
payload | json | The full end-of-call-report message as Vapi sent it |