Invoke Workflow (Stream)
curl --request POST \
--url https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"input": {
"text": "",
"files": [],
"user": {
"email": "<string>",
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"additional_attributes": {},
"role": "member",
"is_super_admin": false,
"timezone": "<string>"
}
},
"id": "<string>",
"payload_extension": {},
"parent_execution_id": "<string>",
"worker_id": "<string>",
"source": "<string>",
"output_schema": {},
"run_locally": false,
"additional_context": "<string>",
"instructions_override": "<string>",
"test_run_node_id": "<string>",
"expected_output": "<string>",
"events_streaming": false,
"mcp_servers": [],
"triggering_agent_id": "<string>",
"title": "<string>",
"think_mode": "default",
"disable_attachment_injection": false,
"user_tokens": {},
"user_oidc_token": "<string>",
"return_metrics": false,
"llm_model_provider": "<string>",
"llm_model_name": "<string>"
}
'import requests
url = "https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream"
payload = {
"input": {
"text": "",
"files": [],
"user": {
"email": "<string>",
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"additional_attributes": {},
"role": "member",
"is_super_admin": False,
"timezone": "<string>"
}
},
"id": "<string>",
"payload_extension": {},
"parent_execution_id": "<string>",
"worker_id": "<string>",
"source": "<string>",
"output_schema": {},
"run_locally": False,
"additional_context": "<string>",
"instructions_override": "<string>",
"test_run_node_id": "<string>",
"expected_output": "<string>",
"events_streaming": False,
"mcp_servers": [],
"triggering_agent_id": "<string>",
"title": "<string>",
"think_mode": "default",
"disable_attachment_injection": False,
"user_tokens": {},
"user_oidc_token": "<string>",
"return_metrics": False,
"llm_model_provider": "<string>",
"llm_model_name": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: {
text: '',
files: [],
user: {
email: '<string>',
id: '<string>',
first_name: '<string>',
last_name: '<string>',
additional_attributes: {},
role: 'member',
is_super_admin: false,
timezone: '<string>'
}
},
id: '<string>',
payload_extension: {},
parent_execution_id: '<string>',
worker_id: '<string>',
source: '<string>',
output_schema: {},
run_locally: false,
additional_context: '<string>',
instructions_override: '<string>',
test_run_node_id: '<string>',
expected_output: '<string>',
events_streaming: false,
mcp_servers: [],
triggering_agent_id: '<string>',
title: '<string>',
think_mode: 'default',
disable_attachment_injection: false,
user_tokens: {},
user_oidc_token: '<string>',
return_metrics: false,
llm_model_provider: '<string>',
llm_model_name: '<string>'
})
};
fetch('https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'input' => [
'text' => '',
'files' => [
],
'user' => [
'email' => '<string>',
'id' => '<string>',
'first_name' => '<string>',
'last_name' => '<string>',
'additional_attributes' => [
],
'role' => 'member',
'is_super_admin' => false,
'timezone' => '<string>'
]
],
'id' => '<string>',
'payload_extension' => [
],
'parent_execution_id' => '<string>',
'worker_id' => '<string>',
'source' => '<string>',
'output_schema' => [
],
'run_locally' => false,
'additional_context' => '<string>',
'instructions_override' => '<string>',
'test_run_node_id' => '<string>',
'expected_output' => '<string>',
'events_streaming' => false,
'mcp_servers' => [
],
'triggering_agent_id' => '<string>',
'title' => '<string>',
'think_mode' => 'default',
'disable_attachment_injection' => false,
'user_tokens' => [
],
'user_oidc_token' => '<string>',
'return_metrics' => false,
'llm_model_provider' => '<string>',
'llm_model_name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream"
payload := strings.NewReader("{\n \"input\": {\n \"text\": \"\",\n \"files\": [],\n \"user\": {\n \"email\": \"<string>\",\n \"id\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"additional_attributes\": {},\n \"role\": \"member\",\n \"is_super_admin\": false,\n \"timezone\": \"<string>\"\n }\n },\n \"id\": \"<string>\",\n \"payload_extension\": {},\n \"parent_execution_id\": \"<string>\",\n \"worker_id\": \"<string>\",\n \"source\": \"<string>\",\n \"output_schema\": {},\n \"run_locally\": false,\n \"additional_context\": \"<string>\",\n \"instructions_override\": \"<string>\",\n \"test_run_node_id\": \"<string>\",\n \"expected_output\": \"<string>\",\n \"events_streaming\": false,\n \"mcp_servers\": [],\n \"triggering_agent_id\": \"<string>\",\n \"title\": \"<string>\",\n \"think_mode\": \"default\",\n \"disable_attachment_injection\": false,\n \"user_tokens\": {},\n \"user_oidc_token\": \"<string>\",\n \"return_metrics\": false,\n \"llm_model_provider\": \"<string>\",\n \"llm_model_name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {\n \"text\": \"\",\n \"files\": [],\n \"user\": {\n \"email\": \"<string>\",\n \"id\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"additional_attributes\": {},\n \"role\": \"member\",\n \"is_super_admin\": false,\n \"timezone\": \"<string>\"\n }\n },\n \"id\": \"<string>\",\n \"payload_extension\": {},\n \"parent_execution_id\": \"<string>\",\n \"worker_id\": \"<string>\",\n \"source\": \"<string>\",\n \"output_schema\": {},\n \"run_locally\": false,\n \"additional_context\": \"<string>\",\n \"instructions_override\": \"<string>\",\n \"test_run_node_id\": \"<string>\",\n \"expected_output\": \"<string>\",\n \"events_streaming\": false,\n \"mcp_servers\": [],\n \"triggering_agent_id\": \"<string>\",\n \"title\": \"<string>\",\n \"think_mode\": \"default\",\n \"disable_attachment_injection\": false,\n \"user_tokens\": {},\n \"user_oidc_token\": \"<string>\",\n \"return_metrics\": false,\n \"llm_model_provider\": \"<string>\",\n \"llm_model_name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": {\n \"text\": \"\",\n \"files\": [],\n \"user\": {\n \"email\": \"<string>\",\n \"id\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"additional_attributes\": {},\n \"role\": \"member\",\n \"is_super_admin\": false,\n \"timezone\": \"<string>\"\n }\n },\n \"id\": \"<string>\",\n \"payload_extension\": {},\n \"parent_execution_id\": \"<string>\",\n \"worker_id\": \"<string>\",\n \"source\": \"<string>\",\n \"output_schema\": {},\n \"run_locally\": false,\n \"additional_context\": \"<string>\",\n \"instructions_override\": \"<string>\",\n \"test_run_node_id\": \"<string>\",\n \"expected_output\": \"<string>\",\n \"events_streaming\": false,\n \"mcp_servers\": [],\n \"triggering_agent_id\": \"<string>\",\n \"title\": \"<string>\",\n \"think_mode\": \"default\",\n \"disable_attachment_injection\": false,\n \"user_tokens\": {},\n \"user_oidc_token\": \"<string>\",\n \"return_metrics\": false,\n \"llm_model_provider\": \"<string>\",\n \"llm_model_name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}REST API - Workflows
Invoke Workflow (Stream)
Invoke a workflow with real-time streaming. Returns Server-Sent Events (SSE).
POST
/
v1
/
workflows
/
{workflow_id}
/
invoke
/
stream
Invoke Workflow (Stream)
curl --request POST \
--url https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"input": {
"text": "",
"files": [],
"user": {
"email": "<string>",
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"additional_attributes": {},
"role": "member",
"is_super_admin": false,
"timezone": "<string>"
}
},
"id": "<string>",
"payload_extension": {},
"parent_execution_id": "<string>",
"worker_id": "<string>",
"source": "<string>",
"output_schema": {},
"run_locally": false,
"additional_context": "<string>",
"instructions_override": "<string>",
"test_run_node_id": "<string>",
"expected_output": "<string>",
"events_streaming": false,
"mcp_servers": [],
"triggering_agent_id": "<string>",
"title": "<string>",
"think_mode": "default",
"disable_attachment_injection": false,
"user_tokens": {},
"user_oidc_token": "<string>",
"return_metrics": false,
"llm_model_provider": "<string>",
"llm_model_name": "<string>"
}
'import requests
url = "https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream"
payload = {
"input": {
"text": "",
"files": [],
"user": {
"email": "<string>",
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"additional_attributes": {},
"role": "member",
"is_super_admin": False,
"timezone": "<string>"
}
},
"id": "<string>",
"payload_extension": {},
"parent_execution_id": "<string>",
"worker_id": "<string>",
"source": "<string>",
"output_schema": {},
"run_locally": False,
"additional_context": "<string>",
"instructions_override": "<string>",
"test_run_node_id": "<string>",
"expected_output": "<string>",
"events_streaming": False,
"mcp_servers": [],
"triggering_agent_id": "<string>",
"title": "<string>",
"think_mode": "default",
"disable_attachment_injection": False,
"user_tokens": {},
"user_oidc_token": "<string>",
"return_metrics": False,
"llm_model_provider": "<string>",
"llm_model_name": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: {
text: '',
files: [],
user: {
email: '<string>',
id: '<string>',
first_name: '<string>',
last_name: '<string>',
additional_attributes: {},
role: 'member',
is_super_admin: false,
timezone: '<string>'
}
},
id: '<string>',
payload_extension: {},
parent_execution_id: '<string>',
worker_id: '<string>',
source: '<string>',
output_schema: {},
run_locally: false,
additional_context: '<string>',
instructions_override: '<string>',
test_run_node_id: '<string>',
expected_output: '<string>',
events_streaming: false,
mcp_servers: [],
triggering_agent_id: '<string>',
title: '<string>',
think_mode: 'default',
disable_attachment_injection: false,
user_tokens: {},
user_oidc_token: '<string>',
return_metrics: false,
llm_model_provider: '<string>',
llm_model_name: '<string>'
})
};
fetch('https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'input' => [
'text' => '',
'files' => [
],
'user' => [
'email' => '<string>',
'id' => '<string>',
'first_name' => '<string>',
'last_name' => '<string>',
'additional_attributes' => [
],
'role' => 'member',
'is_super_admin' => false,
'timezone' => '<string>'
]
],
'id' => '<string>',
'payload_extension' => [
],
'parent_execution_id' => '<string>',
'worker_id' => '<string>',
'source' => '<string>',
'output_schema' => [
],
'run_locally' => false,
'additional_context' => '<string>',
'instructions_override' => '<string>',
'test_run_node_id' => '<string>',
'expected_output' => '<string>',
'events_streaming' => false,
'mcp_servers' => [
],
'triggering_agent_id' => '<string>',
'title' => '<string>',
'think_mode' => 'default',
'disable_attachment_injection' => false,
'user_tokens' => [
],
'user_oidc_token' => '<string>',
'return_metrics' => false,
'llm_model_provider' => '<string>',
'llm_model_name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream"
payload := strings.NewReader("{\n \"input\": {\n \"text\": \"\",\n \"files\": [],\n \"user\": {\n \"email\": \"<string>\",\n \"id\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"additional_attributes\": {},\n \"role\": \"member\",\n \"is_super_admin\": false,\n \"timezone\": \"<string>\"\n }\n },\n \"id\": \"<string>\",\n \"payload_extension\": {},\n \"parent_execution_id\": \"<string>\",\n \"worker_id\": \"<string>\",\n \"source\": \"<string>\",\n \"output_schema\": {},\n \"run_locally\": false,\n \"additional_context\": \"<string>\",\n \"instructions_override\": \"<string>\",\n \"test_run_node_id\": \"<string>\",\n \"expected_output\": \"<string>\",\n \"events_streaming\": false,\n \"mcp_servers\": [],\n \"triggering_agent_id\": \"<string>\",\n \"title\": \"<string>\",\n \"think_mode\": \"default\",\n \"disable_attachment_injection\": false,\n \"user_tokens\": {},\n \"user_oidc_token\": \"<string>\",\n \"return_metrics\": false,\n \"llm_model_provider\": \"<string>\",\n \"llm_model_name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {\n \"text\": \"\",\n \"files\": [],\n \"user\": {\n \"email\": \"<string>\",\n \"id\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"additional_attributes\": {},\n \"role\": \"member\",\n \"is_super_admin\": false,\n \"timezone\": \"<string>\"\n }\n },\n \"id\": \"<string>\",\n \"payload_extension\": {},\n \"parent_execution_id\": \"<string>\",\n \"worker_id\": \"<string>\",\n \"source\": \"<string>\",\n \"output_schema\": {},\n \"run_locally\": false,\n \"additional_context\": \"<string>\",\n \"instructions_override\": \"<string>\",\n \"test_run_node_id\": \"<string>\",\n \"expected_output\": \"<string>\",\n \"events_streaming\": false,\n \"mcp_servers\": [],\n \"triggering_agent_id\": \"<string>\",\n \"title\": \"<string>\",\n \"think_mode\": \"default\",\n \"disable_attachment_injection\": false,\n \"user_tokens\": {},\n \"user_oidc_token\": \"<string>\",\n \"return_metrics\": false,\n \"llm_model_provider\": \"<string>\",\n \"llm_model_name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xpander.ai/v1/workflows/{workflow_id}/invoke/stream")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": {\n \"text\": \"\",\n \"files\": [],\n \"user\": {\n \"email\": \"<string>\",\n \"id\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"additional_attributes\": {},\n \"role\": \"member\",\n \"is_super_admin\": false,\n \"timezone\": \"<string>\"\n }\n },\n \"id\": \"<string>\",\n \"payload_extension\": {},\n \"parent_execution_id\": \"<string>\",\n \"worker_id\": \"<string>\",\n \"source\": \"<string>\",\n \"output_schema\": {},\n \"run_locally\": false,\n \"additional_context\": \"<string>\",\n \"instructions_override\": \"<string>\",\n \"test_run_node_id\": \"<string>\",\n \"expected_output\": \"<string>\",\n \"events_streaming\": false,\n \"mcp_servers\": [],\n \"triggering_agent_id\": \"<string>\",\n \"title\": \"<string>\",\n \"think_mode\": \"default\",\n \"disable_attachment_injection\": false,\n \"user_tokens\": {},\n \"user_oidc_token\": \"<string>\",\n \"return_metrics\": false,\n \"llm_model_provider\": \"<string>\",\n \"llm_model_name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Invoke a workflow with real-time streaming via Server-Sent Events (SSE). Receive live updates as the pipeline progresses through each node on the canvas — including tool calls, agent reasoning, sub-agent triggers, and the final result.
Path Parameters
Workflow ID (UUID)
Query Parameters
The workflow version to invoke. Defaults to the latest deployed version.
Request Body
Same as Invoke Workflow (Sync) — see that page for full request body documentation.Response
Returns atext/event-stream response with Server-Sent Events. Each event contains a JSON payload with task update information.
Events are sent as the workflow executes, including status changes, intermediate results, and the final TaskFinished event.
Example Request
curl -N -X POST "https://api.xpander.ai/v1/workflows/<workflow-id>/invoke/stream" \
-H "Content-Type: application/json" \
-H "x-api-key: <your-api-key>" \
-d '{"input": {"text": "Generate a comprehensive report"}}'
Notes
- The stream ends with a
TaskFinishedevent type - Each SSE event is a
data:line containing a JSON object - Use
Cache-Control: no-cacheandConnection: keep-aliveheaders for best results - Ideal for building real-time UIs that show pipeline progress across nodes
Authorizations
API Key for authentication
Path Parameters
Query Parameters
The workflow version to invoke. default = latest
Body
application/json
Show child attributes
Show child attributes
Available options:
text, markdown, json, voice Available options:
default, harder Per-execution override for the LLM provider (e.g. 'openai', 'anthropic'). Falls back to the agent's configured provider when unset.
Per-execution override for the LLM model name. Falls back to the agent's configured model when unset.
Per-execution override for reasoning effort on reasoning-capable models.
Available options:
low, medium, high, xhigh Surface that created this execution (mirrored to AgentExecutionHistory.source_node_type). Falls back to SourceNodeType.SDK at persist time when unset.
Available options:
workbench, sdk, task, assistant, webhook, mcp, a2a, telegram, slack Response
Successful Response
Was this page helpful?
⌘I

