Properties
| Name | Type | Description |
|---|---|---|
| nodes | array | |
| model | object | This is the model for the workflow. This can be overridden at node level using `nodes[n].model`. |
| transcriber | object | This is the transcriber for the workflow. This can be overridden at node level using `nodes[n].transcriber`. |
| voice | object | This is the voice for the workflow. This can be overridden at node level using `nodes[n].voice`. |
| observabilityPlan | object | This is the plan for observability of workflow's calls. Currently, only Langfuse is supported. |
| backgroundSound | object | This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'. You can also provide a custom sound by providing a URL to an audio file. |
| hooks | array | This is a set of actions that will be performed on certain events. |
| credentials | array | These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. D |
| voicemailDetection | object | This is the voicemail detection plan for the workflow. |
| maxDurationSeconds | number | This is the maximum duration of the call in seconds. After this duration, the call will automatically end. Default is 1800 (30 minutes), max is 43200 (12 hours), and min is 10 seconds. |
| id | string | |
| orgId | string | |
| createdAt | string | |
| updatedAt | string | |
| name | string | |
| edges | array | |
| globalPrompt | string | |
| server | object | This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. tool.server 2. workflow.server / assistant.ser |
| compliancePlan | object | This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings. |
| analysisPlan | object | This is the plan for analysis of workflow's calls. Stored in `call.analysis`. |
| artifactPlan | object | This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`. |
| startSpeakingPlan | object | This is the plan for when the workflow nodes should start talking. You should configure this if you're running into these issues: - The assistant is too slow to start talking after the customer is don |
| stopSpeakingPlan | object | This is the plan for when workflow nodes should stop talking on customer interruption. You should configure this if you're running into these issues: - The assistant is too slow to recognize customer' |
| monitorPlan | object | This is the plan for real-time monitoring of the workflow's calls. Usage: - To enable live listening of the workflow's calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the |
| backgroundSpeechDenoisingPlan | object | This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Both can be used together. Order of precedence: - Smart den |
| credentialIds | array | These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this. |
| keypadInputPlan | object | This is the plan for keypad input handling during workflow calls. |
| voicemailMessage | string | This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "#/components/schemas/Workflow",
"title": "Workflow",
"type": "object",
"properties": {
"nodes": {
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/ConversationNode",
"title": "ConversationNode"
},
{
"$ref": "#/components/schemas/ToolNode",
"title": "ToolNode"
}
]
}
},
"model": {
"description": "This is the model for the workflow.\n\nThis can be overridden at node level using `nodes[n].model`.",
"oneOf": [
{
"$ref": "#/components/schemas/WorkflowOpenAIModel",
"title": "WorkflowOpenAIModel"
},
{
"$ref": "#/components/schemas/WorkflowAnthropicModel",
"title": "WorkflowAnthropicModel"
},
{
"$ref": "#/components/schemas/WorkflowAnthropicBedrockModel",
"title": "WorkflowAnthropicBedrockModel"
},
{
"$ref": "#/components/schemas/WorkflowGoogleModel",
"title": "WorkflowGoogleModel"
},
{
"$ref": "#/components/schemas/WorkflowCustomModel",
"title": "WorkflowCustomModel"
}
]
},
"transcriber": {
"description": "This is the transcriber for the workflow.\n\nThis can be overridden at node level using `nodes[n].transcriber`.",
"oneOf": [
{
"$ref": "#/components/schemas/AssemblyAITranscriber",
"title": "AssemblyAITranscriber"
},
{
"$ref": "#/components/schemas/AzureSpeechTranscriber",
"title": "AzureSpeechTranscriber"
},
{
"$ref": "#/components/schemas/CustomTranscriber",
"title": "CustomTranscriber"
},
{
"$ref": "#/components/schemas/DeepgramTranscriber",
"title": "DeepgramTranscriber"
},
{
"$ref": "#/components/schemas/ElevenLabsTranscriber",
"title": "ElevenLabsTranscriber"
},
{
"$ref": "#/components/schemas/GladiaTranscriber",
"title": "GladiaTranscriber"
},
{
"$ref": "#/components/schemas/GoogleTranscriber",
"title": "GoogleTranscriber"
},
{
"$ref": "#/components/schemas/SpeechmaticsTranscriber",
"title": "SpeechmaticsTranscriber"
},
{
"$ref": "#/components/schemas/TalkscriberTranscriber",
"title": "TalkscriberTranscriber"
},
{
"$ref": "#/components/schemas/OpenAITranscriber",
"title": "OpenAITranscriber"
},
{
"$ref": "#/components/schemas/CartesiaTranscriber",
"title": "CartesiaTranscriber"
},
{
"$ref": "#/components/schemas/SonioxTranscriber",
"title": "SonioxTranscriber"
}
]
},
"voice": {
"description": "This is the voice for the workflow.\n\nThis can be overridden at node level using `nodes[n].voice`.",
"oneOf": [
{
"$ref": "#/components/schemas/AzureVoice",
"title": "AzureVoice"
},
{
"$ref": "#/components/schemas/CartesiaVoice",
"title": "CartesiaVoice"
},
{
"$ref": "#/components/schemas/CustomVoice",
"title": "CustomVoice"
},
{
"$ref": "#/components/schemas/DeepgramVoice",
"title": "DeepgramVoice"
},
{
"$ref": "#/components/schemas/ElevenLabsVoice",
"title": "ElevenLabsVoice"
},
{
"$ref": "#/components/schemas/HumeVoice",
"title": "HumeVoice"
},
{
"$ref": "#/components/schemas/LMNTVoice",
"title": "LMNTVoice"
},
{
"$ref": "#/components/schemas/NeuphonicVoice",
"title": "NeuphonicVoice"
},
{
"$ref": "#/components/schemas/OpenAIVoice",
"title": "OpenAIVoice"
},
{
"$ref": "#/components/schemas/PlayHTVoice",
"title": "PlayHTVoice"
},
{
"$ref": "#/components/schemas/WellSaidVoice",
"title": "WellSaidVoice"
},
{
"$ref": "#/components/schemas/RimeAIVoice",
"title": "RimeAIVoice"
},
{
"$ref": "#/components/schemas/SmallestAIVoice",
"title": "SmallestAIVoice"
},
{
"$ref": "#/components/schemas/TavusVoice",
"title": "TavusVoice"
},
{
"$ref": "#/components/schemas/VapiVoice",
"title": "VapiVoice"
},
{
"$ref": "#/components/schemas/SesameVoice",
"title": "SesameVoice"
},
{
"$ref": "#/components/schemas/InworldVoice",
"title": "InworldVoice"
},
{
"$ref": "#/components/schemas/MinimaxVoice",
"title": "MinimaxVoice"
}
]
},
"observabilityPlan": {
"description": "This is the plan for observability of workflow's calls.\n\nCurrently, only Langfuse is supported.",
"oneOf": [
{
"$ref": "#/components/schemas/LangfuseObservabilityPlan",
"title": "Langfuse"
}
],
"allOf": [
{
"$ref": "#/components/schemas/LangfuseObservabilityPlan"
}
]
},
"backgroundSound": {
"description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
"oneOf": [
{
"type": "enum",
"enum": [
"off",
"office"
],
"example": "office"
},
{
"type": "string",
"format": "uri",
"example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
}
]
},
"hooks": {
"type": "array",
"description": "This is a set of actions that will be performed on certain events.",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/CallHookCallEnding",
"title": "CallHookCallEnding"
},
{
"$ref": "#/components/schemas/CallHookAssistantSpeechInterrupted",
"title": "CallHookAssistantSpeechInterrupted"
},
{
"$ref": "#/components/schemas/CallHookCustomerSpeechInterrupted",
"title": "CallHookCustomerSpeechInterrupted"
},
{
"$ref": "#/components/schemas/CallHookCustomerSpeechTimeout",
"title": "CallHookCustomerSpeechTimeout"
},
{
"$ref": "#/components/schemas/CallHookModelResponseTimeout",
"title": "CallHookModelResponseTimeout"
}
]
}
},
"credentials": {
"type": "array",
"description": "These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
"items": {
"oneOf": [
{
"$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
"title": "AnthropicCredential"
},
{
"$ref": "#/components/schemas/CreateAnthropicBedrockCredentialDTO",
"title": "AnthropicBedrockCredential"
},
{
"$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
"title": "AnyscaleCredential"
},
{
"$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
"title": "AssemblyAICredential"
},
{
"$ref": "#/components/schemas/CreateAzureCredentialDTO",
"title": "AzureCredential"
},
{
"$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
"title": "AzureOpenAICredential"
},
{
"$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
"title": "ByoSipTrunkCredential"
},
{
"$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
"title": "CartesiaCredential"
},
{
"$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
"title": "CerebrasCredential"
},
{
"$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
"title": "CloudflareCredential"
},
{
"$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
"title": "CustomLLMCredential"
},
{
"$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
"title": "DeepgramCredential"
},
{
"$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
"title": "DeepInfraCredential"
},
{
"$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
"title": "DeepSeekCredential"
},
{
"$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
"title": "ElevenLabsCredential"
},
{
"$ref": "#/components/schemas/CreateGcpCredentialDTO",
"title": "GcpCredential"
},
{
"$ref": "#/components/schemas/CreateGladiaCredentialDTO",
"title": "GladiaCredential"
},
{
"$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
"title": "GhlCredential"
},
{
"$ref": "#/components/schemas/CreateGoogleCredentialDTO",
"title": "GoogleCredential"
},
{
"$ref": "#/components/schemas/CreateGroqCredentialDTO",
"title": "GroqCredential"
},
{
"$ref": "#/components/schemas/CreateHumeCredentialDTO",
"title": "HumeCredential"
},
{
"$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
"title": "InflectionAICredential"
},
{
"$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
"title": "LangfuseCredential"
},
{
"$ref": "#/components/schemas/CreateLmntCredentialDTO",
"title": "LmntCredential"
},
{
"$ref": "#/components/schemas/CreateMakeCredentialDTO",
"title": "MakeCredential"
},
{
"$ref": "#/components/schemas/CreateMistralCredentialDTO",
"title": "MistralCredential"
},
{
"$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
"title": "NeuphonicCredential"
},
{
"$ref": "#/components/schemas/CreateOpenAICredentialDTO",
"title": "OpenAICredential"
},
{
"$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
"title": "OpenRouterCredential"
},
{
"$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
"title": "PerplexityAICredential"
},
{
"$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
"title": "PlayHTCredential"
},
{
"$ref": "#/components/schemas/CreateRimeAICredentialDTO",
"title": "RimeAICredential"
},
{
"$ref": "#/components/schemas/CreateRunpodCredentialDTO",
"title": "RunpodCredential"
},
{
"$ref": "#/components/schemas/CreateS3CredentialDTO",
"title": "S3Credential"
},
{
"$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
"title": "SmallestAICredential"
},
{
"$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
"title": "SpeechmaticsCredential"
},
{
"$ref": "#/components/schemas/CreateSonioxCredentialDTO",
"title": "SonioxCredential"
},
{
"$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
"title": "SupabaseCredential"
},
{
"$ref": "#/components/schemas/CreateTavusCredentialDTO",
"title": "TavusCredential"
},
{
"$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
"title": "TogetherAICredential"
},
{
"$ref": "#/components/schemas/CreateTwilioCredentialDTO",
"title": "TwilioCredential"
},
{
"$ref": "#/components/schemas/CreateVonageCredentialDTO",
"title": "VonageCredential"
},
{
"$ref": "#/components/schemas/CreateWebhookCredentialDTO",
"title": "WebhookCredential"
},
{
"$ref": "#/components/schemas/CreateCustomCredentialDTO",
"title": "CustomCredential"
},
{
"$ref": "#/components/schemas/CreateXAiCredentialDTO",
"title": "XAiCredential"
},
{
"$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
"title": "GoogleCalendarOAuth2ClientCredential"
},
{
"$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
"title": "GoogleCalendarOAuth2AuthorizationCredential"
},
{
"$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
"title": "GoogleSheetsOAuth2AuthorizationCredential"
},
{
"$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
"title": "SlackOAuth2AuthorizationCredential"
},
{
"$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
"title": "GoHighLevelMCPCredential"
},
{
"$ref": "#/components/schemas/CreateInworldCredentialDTO",
"title": "InworldCredential"
},
{
"$ref": "#/components/schemas/CreateMinimaxCredentialDTO",
"title": "MinimaxCredential"
},
{
"$ref": "#/components/schemas/CreateWellSaidCredentialDTO",
"title": "WellSaidCredential"
},
{
"$ref": "#/components/schemas/CreateEmailCredentialDTO",
"title": "EmailCredential"
},
{
"$ref": "#/components/schemas/CreateSlackWebhookCredentialDTO",
"title": "SlackWebhookCredential"
}
],
"discriminator": {
"propertyName": "provider",
"mapping": {
"11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
"anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
"anthropic-bedrock": "#/components/schemas/CreateAnthropicBedrockCredentialDTO",
"anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
"assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
"azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
"azure": "#/components/schemas/CreateAzureCredentialDTO",
"byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
"cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
"cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
"cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
"custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
"deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
"deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
"deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
"gcp": "#/components/schemas/CreateGcpCredentialDTO",
"gladia": "#/components/schemas/CreateGladiaCredentialDTO",
"gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
"google": "#/components/schemas/CreateGoogleCredentialDTO",
"groq": "#/components/schemas/CreateGroqCredentialDTO",
"inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
"langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
"lmnt": "#/components/schemas/CreateLmntCredentialDTO",
"make": "#/components/schemas/CreateMakeCredentialDTO",
"openai": "#/components/schemas/CreateOpenAICredentialDTO",
"openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
"perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
"playht": "#/components/schemas/CreatePlayHTCredentialDTO",
"rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
"runpod": "#/components/schemas/CreateRunpodCredentialDTO",
"s3": "#/components/schemas/CreateS3CredentialDTO",
"supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
"smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
"tavus": "#/components/schemas/CreateTavusCredentialDTO",
"together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
"twilio": "#/components/schemas/CreateTwilioCredentialDTO",
"vonage": "#/components/schemas/CreateVonageCredentialDTO",
"webhook": "#/components/schemas/CreateWebhookCredentialDTO",
"custom-credential": "#/components/schemas/CreateCustomCredentialDTO",
"xai": "#/components/schemas/CreateXAiCredentialDTO",
"neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
"hume": "#/components/schemas/CreateHumeCredentialDTO",
"mistral": "#/components/schemas/CreateMistralCredentialDTO",
"speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
"soniox": "#/components/schemas/CreateSonioxCredentialDTO",
"google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
"google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
"google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
"slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
"ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
"inworld": "#/components/schemas/CreateInworldCredentialDTO",
"minimax": "#/components/schemas/CreateMinimaxCredentialDTO",
"wellsaid": "#/components/schemas/CreateWellSaidCredentialDTO",
"email": "#/components/schemas/CreateEmailCredentialDTO",
"slack-webhook": "#/components/schemas/CreateSlackWebhookCredentialDTO"
}
}
}
},
"voicemailDetection": {
"description": "This is the voicemail detection plan for the workflow.",
"oneOf": [
{
"type": "string",
"enum": [
"off"
]
},
{
"$ref": "#/components/schemas/GoogleVoicemailDetectionPlan",
"title": "Google"
},
{
"$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan",
"title": "OpenAI"
},
{
"$ref": "#/components/schemas/TwilioVoicemailDetectionPlan",
"title": "Twilio"
},
{
"$ref": "#/components/schemas/VapiVoicemailDetectionPlan",
"title": "Vapi"
}
]
},
"maxDurationSeconds": {
"type": "number",
"description": "This is the maximum duration of the call in seconds.\n\nAfter this duration, the call will automatically end.\n\nDefault is 1800 (30 minutes), max is 43200 (12 hours), and min is 10 seconds.",
"minimum": 10,
"maximum": 43200,
"example": 600
},
"id": {
"type": "string"
},
"orgId": {
"type": "string"
},
"createdAt": {
"format": "date-time",
"type": "string"
},
"updatedAt": {
"format": "date-time",
"type": "string"
},
"name": {
"type": "string",
"maxLength": 80
},
"edges": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Edge"
}
},
"globalPrompt": {
"type": "string",
"maxLength": 5000
},
"server": {
"description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. tool.server\n2. workflow.server / assistant.server\n3. phoneNumber.server\n4. org.server",
"allOf": [
{
"$ref": "#/components/schemas/Server"
}
]
},
"compliancePlan": {
"description": "This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings.",
"allOf": [
{
"$ref": "#/components/schemas/CompliancePlan"
}
]
},
"analysisPlan": {
"description": "This is the plan for analysis of workflow's calls. Stored in `call.analysis`.",
"allOf": [
{
"$ref": "#/components/schemas/AnalysisPlan"
}
]
},
"artifactPlan": {
"description": "This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`.",
"allOf": [
{
"$ref": "#/components/schemas/ArtifactPlan"
}
]
},
"startSpeakingPlan": {
"description": "This is the plan for when the workflow nodes should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
"allOf": [
{
"$ref": "#/components/schemas/StartSpeakingPlan"
}
]
},
"stopSpeakingPlan": {
"description": "This is the plan for when workflow nodes should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
"allOf": [
{
"$ref": "#/components/schemas/StopSpeakingPlan"
}
]
},
"monitorPlan": {
"description": "This is the plan for real-time monitoring of the workflow's calls.\n\nUsage:\n- To enable live listening of the workflow's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the workflow's calls, set `monitorPlan.controlEnabled` to `true`.",
"allOf": [
{
"$ref": "#/components/schemas/MonitorPlan"
}
]
},
"backgroundSpeechDenoisingPlan": {
"description": "This enables filtering of noise and background speech while the user is talking.\n\nFeatures:\n- Smart denoising using Krisp\n- Fourier denoising\n\nBoth can be used together. Order of precedence:\n- Smart denoising\n- Fourier denoising",
"allOf": [
{
"$ref": "#/components/schemas/BackgroundSpeechDenoisingPlan"
}
]
},
"credentialIds": {
"description": "These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
"type": "array",
"items": {
"type": "string"
}
},
"keypadInputPlan": {
"description": "This is the plan for keypad input handling during workflow calls.",
"allOf": [
{
"$ref": "#/components/schemas/KeypadInputPlan"
}
]
},
"voicemailMessage": {
"type": "string",
"description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.",
"maxLength": 1000
}
},
"required": [
"nodes",
"id",
"orgId",
"createdAt",
"updatedAt",
"name",
"edges"
]
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/vapi-workflow"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.