{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "#/components/schemas/CreateWorkflowDTO",
"title": "CreateWorkflowDTO",
"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
},
"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",
"name",
"edges"
]
}