Guides

Node reference

Every node type available in the Vollo workflow builder — its configuration fields, defaults, and output handles. Nodes are grouped into seven categories. This reference matches workflow schema version 1.

Nodes are connected by edges from an output handle on the source node to the input of the target node. Most nodes have a single next output; branching nodes expose one handle per outcome (for example true/false, or answered/no_answer/failed), and a few build their handles dynamically from configuration. Fields typed template accept {{variable}} interpolation; fields typed expression use the safe expression grammar.

Flow#

Start#

type: start · min 1 per workflow · max 1 per workflow

Entry point of every workflow. Execution begins here when a call is answered or a session connects. Exactly one per workflow.

Outputs

next

This node has no configuration fields.

End#

type: end

Terminates the workflow cleanly. The session or call is wrapped up and a workflow.completed event is emitted.

Outputs

terminal — no outputs

This node has no configuration fields.

Branch#

type: branch

Routes execution down one of several labeled branches. Each branch has an expression; the first branch whose condition evaluates to true wins.

Outputs

dynamic

Output handles are created from the node's configuration (one per branch, intent, case, or exit intent).

FieldTypeRequiredDefaultNotes
branchesarrayRequiredAt least 2 items. Each item: key, label, condition.
default_branchstringOptional

Condition#

type: condition

Evaluates a single expression and routes to the true or false handle.

Outputs

truefalse
FieldTypeRequiredDefaultNotes
expressionexpressionRequired

Switch#

type: switch

Compares a variable against a list of case values and routes to the matching case's handle, with an optional default.

Outputs

dynamic

Output handles are created from the node's configuration (one per branch, intent, case, or exit intent).

FieldTypeRequiredDefaultNotes
variablestringRequired
casesarrayRequiredAt least 1 item. Each item: value, label.
default_casebooleanOptionaltrue

Delay#

type: delay

Pauses workflow execution for a fixed number of seconds without playing audio.

Outputs

next
FieldTypeRequiredDefaultNotes
secondsnumberRequiredMin 0.1 · max 300.

Loop#

type: loop

Repeats the subgraph connected to its loop handle until the exit condition is true or the iteration cap is reached, then continues via done.

Outputs

loopdone
FieldTypeRequiredDefaultNotes
max_iterationsnumberRequiredMin 1 · max 100.
exit_conditionexpressionOptional

Voice#

Greeting#

type: greeting

Speaks an opening line as soon as the node is reached. By default it cannot be barged in on, so the caller hears the full greeting.

Outputs

next
FieldTypeRequiredDefaultNotes
texttemplateRequired
interruptiblebooleanOptionalfalse

Speak#

type: speak

Synthesizes and plays a text-to-speech utterance. Interruptible by default so callers can barge in.

Outputs

next
FieldTypeRequiredDefaultNotes
texttemplateRequired
interruptiblebooleanOptionaltrue
voice_overridestringOptional

Listen#

type: listen

Captures one user utterance via speech-to-text and stores the transcript in a variable.

Outputs

next
FieldTypeRequiredDefaultNotes
save_to_variablestringRequired
timeout_secondsnumberOptional10Min 1 · max 120.
languagestringOptional

Wait#

type: wait

Keeps the line open in silence for a fixed interval — useful after asking the caller to find something.

Outputs

next
FieldTypeRequiredDefaultNotes
secondsnumberRequiredMin 0.5 · max 60.

Transfer to Human#

type: transfer

Attempts a warm transfer of the live conversation to a human at a phone number or SIP URI.

Outputs

transferredfailed
FieldTypeRequiredDefaultNotes
destinationtemplateRequiredtel:+E164 or SIP URI.
announcementtemplateOptional
play_dialtonebooleanOptionaltrue

Hangup#

type: hangup

Ends the call or session, optionally speaking a farewell first.

Outputs

terminal — no outputs
FieldTypeRequiredDefaultNotes
farewelltemplateOptional

AI#

Agent#

type: agent

Runs a full conversational AI agent — LLM, speech-to-text, and text-to-speech — either referencing a saved Agent or configured inline. Each exit intent you define becomes an output handle the LLM can signal to leave the node.

Outputs

dynamic

Output handles are created from the node's configuration (one per branch, intent, case, or exit intent).

FieldTypeRequiredDefaultNotes
agent_idagent_refOptionalReference a saved Agent, or configure inline.
system_prompttemplateRequired unless agent_id is set
llm_providerenumOptionalOne of openai, anthropic, google, openrouter.
llm_modelstringOptional
temperaturenumberOptionalMin 0 · max 2.
stt_providerenumOptionalOne of deepgram.
stt_languagestringOptional
tts_providerenumOptionalOne of cartesia.
tts_voicestringOptional
toolstool_refsOptional
knowledge_base_idsknowledge_refsOptional
mcp_server_idsmcp_refsOptional
greetingtemplateOptional
max_turnsnumberOptionalMin 1 · max 200.
timeout_secondsnumberOptionalMin 10 · max 3600.
exit_intentsarrayOptionalEach item: key, label, description. Each exit intent becomes an output handle; the LLM signals it via an exit tool.

Handoff#

type: handoff

Transfers the conversation to a different saved Agent, optionally summarizing the conversation so far as context for the receiving agent.

Outputs

next
FieldTypeRequiredDefaultNotes
target_agent_idagent_refRequired
context_summarybooleanOptionaltrueSummarize conversation for the receiving agent.
announcementtemplateOptional

LLM Completion#

type: llm

Makes a single non-conversational LLM completion call and stores the result in a variable. Nothing is spoken.

Outputs

next
FieldTypeRequiredDefaultNotes
prompttemplateRequired
system_prompttemplateOptional
providerenumOptionalOne of openai, anthropic, google, openrouter.
modelstringOptional
temperaturenumberOptionalMin 0 · max 2.
save_to_variablestringRequired
json_modebooleanOptionalfalse

Intent Detection#

type: intent

Classifies an utterance into one of your defined intents. Each intent becomes an output handle; unmatched input follows the fallback intent.

Outputs

dynamic

Output handles are created from the node's configuration (one per branch, intent, case, or exit intent).

FieldTypeRequiredDefaultNotes
input_variablestringOptionalDefaults to the last user utterance.
intentsarrayRequiredAt least 2 items. Each item: key, label, description.
fallback_intentstringOptional
save_to_variablestringOptional

Classification#

type: classification

Classifies the value of a variable into one of your defined classes and stores the winning class key.

Outputs

next
FieldTypeRequiredDefaultNotes
input_variablestringRequired
classesarrayRequiredAt least 2 items. Each item: key, label.
save_to_variablestringRequired

Summarization#

type: summarization

Summarizes the conversation so far (or a single variable) into a variable, capped at a word budget.

Outputs

next
FieldTypeRequiredDefaultNotes
scopeenumOptionalconversationOne of conversation, variable.
input_variablestringRequired if scope is variable
save_to_variablestringRequired
max_wordsnumberOptional120Min 10 · max 500.

Sentiment#

type: sentiment

Scores the sentiment of the conversation (or a variable) and stores the result — positive, neutral, or negative.

Outputs

next
FieldTypeRequiredDefaultNotes
scopeenumOptionalconversationOne of conversation, variable.
input_variablestringRequired if scope is variable
save_to_variablestringRequired

Data#

Set Variable#

type: set_variable

Assigns one or more variables. Values are templates, so they may interpolate other variables.

Outputs

next
FieldTypeRequiredDefaultNotes
assignmentsarrayRequiredAt least 1 item. Each item: variable, value.

Get Variable#

type: get_variable

Copies a variable (with an optional fallback default) into another variable.

Outputs

next
FieldTypeRequiredDefaultNotes
variablestringRequired
save_to_variablestringRequired
default_valuestringOptional

Transform#

type: transform

Applies a built-in transformation — case changes, trimming, type coercion, JSON encode/decode, digit extraction, or E.164 normalization — to a variable.

Outputs

next
FieldTypeRequiredDefaultNotes
input_variablestringRequired
operationenumRequiredOne of uppercase, lowercase, trim, number, boolean, json_parse, json_stringify, extract_digits, e164.
save_to_variablestringRequired

JSON Path#

type: json

Extracts a value from a JSON variable using a dot path and stores it in a variable.

Outputs

next
FieldTypeRequiredDefaultNotes
input_variablestringRequired
pathstringRequiredDot path, e.g. data.items.0.name.
save_to_variablestringRequired
default_valuestringOptional

Integrations#

HTTP Request#

type: http_request

Calls an external HTTP API. Response fields can be mapped into workflow variables; failures route to the error handle.

Outputs

successerror
FieldTypeRequiredDefaultNotes
methodenumRequiredOne of GET, POST, PUT, PATCH, DELETE.
urltemplateRequired
headerskey_valueOptional
querykey_valueOptional
bodytemplateOptional
body_typeenumOptionaljsonOne of json, form, raw.
timeout_secondsnumberOptional10Min 1 · max 60.
retriesnumberOptional0Min 0 · max 5.
authenumOptionalnoneOne of none, bearer, basic, header.
auth_secret_keysecret_refRequired unless auth is none
response_mappingarrayOptionalEach item: path, variable.
save_status_tostringOptional

Webhook#

type: webhook

Posts a JSON payload to your endpoint mid-workflow. Defaults to the standard event envelope and supports HMAC signing.

Outputs

successerror
FieldTypeRequiredDefaultNotes
urltemplateRequired
payloadtemplateOptionalJSON template; defaults to the standard event envelope.
headerskey_valueOptional
authenumOptionalnoneOne of none, bearer, basic, header, hmac.
auth_secret_keysecret_refRequired unless auth is none
timeout_secondsnumberOptional10Min 1 · max 30.
retriesnumberOptional2Min 0 · max 5.
response_mappingarrayOptionalEach item: path, variable.

Function Tool#

type: function

Invokes a saved Function Tool defined in your workspace and stores its result.

Outputs

successerror
FieldTypeRequiredDefaultNotes
tool_idtool_refRequired
argumentskey_valueOptional
save_to_variablestringOptional

MCP Tool#

type: mcp_tool

Calls a named tool on a connected MCP server and stores its result.

Outputs

successerror
FieldTypeRequiredDefaultNotes
mcp_server_idmcp_refRequired
tool_namestringRequired
argumentskey_valueOptional
save_to_variablestringOptional
timeout_secondsnumberOptional30Min 1 · max 120.

API Tool#

type: api_tool

Invokes a saved API Tool (a declaratively configured HTTP tool) and stores its result.

Outputs

successerror
FieldTypeRequiredDefaultNotes
tool_idtool_refRequired
argumentskey_valueOptional
save_to_variablestringOptional

Knowledge#

type: knowledge_search

Runs a semantic search against a knowledge base and stores the top matches. Routes to found or not_found.

Outputs

foundnot_found
FieldTypeRequiredDefaultNotes
knowledge_base_idknowledge_refRequired
querytemplateRequired
top_knumberOptional4Min 1 · max 20.
save_to_variablestringRequired
min_scorenumberOptionalMin 0 · max 1.

RAG Answer#

type: rag

Retrieves relevant knowledge-base passages and generates a grounded answer, optionally speaking it immediately.

Outputs

next
FieldTypeRequiredDefaultNotes
knowledge_base_idknowledge_refRequired
questiontemplateRequired
top_knumberOptional4Min 1 · max 20.
save_to_variablestringRequired
speak_answerbooleanOptionalfalse

type: document_search

Searches a knowledge base at document granularity and stores the best match.

Outputs

foundnot_found
FieldTypeRequiredDefaultNotes
knowledge_base_idknowledge_refRequired
querytemplateRequired
save_to_variablestringRequired

Telephony#

Dial#

type: dial

Places an outbound leg to a phone number from one of your provisioned caller IDs and routes on the outcome.

Outputs

answeredno_answerfailed
FieldTypeRequiredDefaultNotes
to_numbertemplateRequired
from_phone_number_idphone_number_refRequired
timeout_secondsnumberOptional30Min 5 · max 120.

Transfer Call#

type: transfer_call

Blind-transfers the active call to another destination via SIP.

Outputs

transferredfailed
FieldTypeRequiredDefaultNotes
destinationtemplateRequired
play_dialtonebooleanOptionaltrue

Collect DTMF#

type: dtmf

Collects DTMF keypad digits from the caller, ended by a terminator key or timeout.

Outputs

collectedtimeout
FieldTypeRequiredDefaultNotes
prompttemplateOptional
num_digitsnumberOptional1Min 1 · max 32.
terminatorstringOptional#
timeout_secondsnumberOptional10Min 1 · max 60.
save_to_variablestringRequired

Call Recording#

type: call_recording

Starts or stops recording of the active call.

Outputs

next
FieldTypeRequiredDefaultNotes
actionenumRequiredOne of start, stop.

Call Status#

type: call_status

Snapshots the current call state (direction, numbers, duration so far) into a variable as JSON.

Outputs

next
FieldTypeRequiredDefaultNotes
save_to_variablestringRequired

Config field types#

The tables above use the following field types:

TypeMeaning
string, number, booleanPlain scalar values.
templateText with {{variable}} interpolation. See Templates.
expressionA safe boolean expression. See Expressions.
enumOne of a fixed set of values, listed in the Notes column.
arrayA list of objects; the item shape is listed in the Notes column.
key_valueA map of string keys to template values (headers, query params, arguments).
secret_refThe key of a workflow secret variable. The value is stored encrypted and never returned by the API.
agent_ref, tool_ref/tool_refs, mcp_ref/mcp_refs, knowledge_ref/knowledge_refs, phone_number_refThe ID of a saved Agent, Function/API Tool, MCP server, knowledge base, or phone number in your workspace (plural forms accept a list).
Validation

Run POST /workflows/{id}/validate (or press Validate in the builder) to check a draft against these schemas before publishing. Unknown variables referenced by templates are reported as warnings; missing required fields, bad enum values, and out-of-range numbers are errors.