List Workflows
curl --request GET \
--url https://api.xpander.ai/v1/workflows \
--header 'x-api-key: <api-key>'import requests
url = "https://api.xpander.ai/v1/workflows"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.xpander.ai/v1/workflows', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.xpander.ai/v1/workflows"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.xpander.ai/v1/workflows")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xpander.ai/v1/workflows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"name": "<string>",
"organization_id": "<string>",
"webhook_url": "<string>",
"id": "<string>",
"unique_name": "<string>",
"origin_template": "<string>",
"environment_id": "<string>",
"deployment_type": "serverless",
"prompts": [],
"is_latest": false,
"has_pending_changes": false,
"deep_planning": true,
"enforce_deep_planning": true,
"use_agent_gateway": false,
"connectivity_details": {},
"framework": "agno",
"description": "",
"tools": [],
"icon": "🚀",
"avatar": "male-avatar",
"source_nodes": [],
"attached_tools": [],
"access_scope": "personal",
"instructions": {
"role": [],
"goal": [],
"general": ""
},
"oas": {},
"graph": [],
"is_omni": false,
"skills": [],
"status": "ACTIVE",
"knowledge_bases": [],
"version": 1,
"created_by": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"using_nemo": false,
"deletable": true,
"model_provider": "anthropic",
"model_name": "claude-sonnet-4-6",
"llm_reasoning_effort": "medium",
"llm_api_base": "<string>",
"output_format": "markdown",
"voice_id": "<string>",
"output_schema": {},
"llm_credentials_key": "<string>",
"llm_credentials_key_type": "xpander",
"llm_credentials": {
"name": "<string>",
"value": "<string>",
"description": "<string>"
},
"llm_extra_headers": {},
"expected_output": "",
"agno_settings": {
"session_storage": true,
"learning": false,
"agent_memories": false,
"agentic_culture": false,
"user_memories": false,
"agentic_memory": false,
"session_summaries": false,
"num_history_runs": 50,
"max_tool_calls_from_history": 0,
"tool_call_limit": 0,
"coordinate_mode": true,
"pii_detection_enabled": false,
"pii_detection_mask": true,
"prompt_injection_detection_enabled": false,
"openai_moderation_enabled": false,
"reasoning_tools_enabled": true,
"max_plan_retries": 15
},
"on_prem_event_streaming": true,
"is_supervised": false,
"orchestration_nodes": [],
"notification_settings": {},
"task_level_strategies": {
"retry_strategy": {
"enabled": false,
"max_retries": 3
},
"iterative_strategy": {
"enabled": false,
"max_iterations": 3,
"end_condition": {
"term": "<string>",
"group_id": "<string>",
"path": "<string>",
"value": null
}
},
"stop_strategy": {
"enabled": false,
"stop_on_failure": true,
"stop_on_condition": {
"term": "<string>",
"group_id": "<string>",
"path": "<string>",
"value": null
}
},
"max_runs_per_day": 123,
"agentic_context_enabled": false,
"duplication_prevention": {
"selectors": [
"<string>"
],
"enabled": false,
"ttl_minutes": 10
},
"slackbot_formatting_instructions": "<string>"
},
"use_oidc_pre_auth": false,
"pre_auth_audiences": [],
"use_oidc_pre_auth_token_for_llm": false,
"oidc_pre_auth_token_llm_audience": "<string>",
"oidc_pre_auth_token_mcp_audience": "<string>",
"can_self_schedule": false,
"max_self_schedules": 3,
"use_dynamic_tools": false,
"workspace_tools_enabled": true
}
],
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}REST API - Workflows
List Workflows
Retrieve a paginated list of workflows
GET
/
v1
/
workflows
List Workflows
curl --request GET \
--url https://api.xpander.ai/v1/workflows \
--header 'x-api-key: <api-key>'import requests
url = "https://api.xpander.ai/v1/workflows"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.xpander.ai/v1/workflows', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.xpander.ai/v1/workflows"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.xpander.ai/v1/workflows")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xpander.ai/v1/workflows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"name": "<string>",
"organization_id": "<string>",
"webhook_url": "<string>",
"id": "<string>",
"unique_name": "<string>",
"origin_template": "<string>",
"environment_id": "<string>",
"deployment_type": "serverless",
"prompts": [],
"is_latest": false,
"has_pending_changes": false,
"deep_planning": true,
"enforce_deep_planning": true,
"use_agent_gateway": false,
"connectivity_details": {},
"framework": "agno",
"description": "",
"tools": [],
"icon": "🚀",
"avatar": "male-avatar",
"source_nodes": [],
"attached_tools": [],
"access_scope": "personal",
"instructions": {
"role": [],
"goal": [],
"general": ""
},
"oas": {},
"graph": [],
"is_omni": false,
"skills": [],
"status": "ACTIVE",
"knowledge_bases": [],
"version": 1,
"created_by": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"using_nemo": false,
"deletable": true,
"model_provider": "anthropic",
"model_name": "claude-sonnet-4-6",
"llm_reasoning_effort": "medium",
"llm_api_base": "<string>",
"output_format": "markdown",
"voice_id": "<string>",
"output_schema": {},
"llm_credentials_key": "<string>",
"llm_credentials_key_type": "xpander",
"llm_credentials": {
"name": "<string>",
"value": "<string>",
"description": "<string>"
},
"llm_extra_headers": {},
"expected_output": "",
"agno_settings": {
"session_storage": true,
"learning": false,
"agent_memories": false,
"agentic_culture": false,
"user_memories": false,
"agentic_memory": false,
"session_summaries": false,
"num_history_runs": 50,
"max_tool_calls_from_history": 0,
"tool_call_limit": 0,
"coordinate_mode": true,
"pii_detection_enabled": false,
"pii_detection_mask": true,
"prompt_injection_detection_enabled": false,
"openai_moderation_enabled": false,
"reasoning_tools_enabled": true,
"max_plan_retries": 15
},
"on_prem_event_streaming": true,
"is_supervised": false,
"orchestration_nodes": [],
"notification_settings": {},
"task_level_strategies": {
"retry_strategy": {
"enabled": false,
"max_retries": 3
},
"iterative_strategy": {
"enabled": false,
"max_iterations": 3,
"end_condition": {
"term": "<string>",
"group_id": "<string>",
"path": "<string>",
"value": null
}
},
"stop_strategy": {
"enabled": false,
"stop_on_failure": true,
"stop_on_condition": {
"term": "<string>",
"group_id": "<string>",
"path": "<string>",
"value": null
}
},
"max_runs_per_day": 123,
"agentic_context_enabled": false,
"duplication_prevention": {
"selectors": [
"<string>"
],
"enabled": false,
"ttl_minutes": 10
},
"slackbot_formatting_instructions": "<string>"
},
"use_oidc_pre_auth": false,
"pre_auth_audiences": [],
"use_oidc_pre_auth_token_for_llm": false,
"oidc_pre_auth_token_llm_audience": "<string>",
"oidc_pre_auth_token_mcp_audience": "<string>",
"can_self_schedule": false,
"max_self_schedules": 3,
"use_dynamic_tools": false,
"workspace_tools_enabled": true
}
],
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Retrieve a paginated list of workflows in your organization. Workflows are a visual orchestration layer for your AI agents — deterministic, multi-step pipelines where you arrange agents, tools, and logic nodes on a canvas to control execution order, branching, and data flow.
In the API, workflows are represented as agents with
type: "orchestration". Every node in a workflow is powered by an AI agent, so the execution path is predictable but the intelligence at each step is adaptive.
Query Parameters
Page number (starting from 1)
Items per page (maximum 50)
Response
Array of workflow objects
Show Workflow Object
Show Workflow Object
Unique identifier for the workflow (UUID)
Display name of the workflow
Brief description of the workflow’s purpose
Emoji icon representing the workflow
Current deployment status:
ACTIVE or INACTIVEOrganization UUID this workflow belongs to
Always
orchestration for workflowsDeployment method:
serverless or containerLLM provider (e.g.,
openai, anthropic)Specific model version
The workflow’s node graph — each node represents a step on the canvas (Agent, Classifier, Action, Guardrail, Summarizer, Code, etc.)
Workflow version number
Whether there are unpublished configuration changes
ISO timestamp of creation
Auto-generated webhook URL for workflow invocations
Total number of workflows across all pages
Current page number
Number of items per page
Total number of pages available
Example Request
curl -X GET -H "x-api-key: <your-api-key>" \
"https://api.xpander.ai/v1/workflows?page=1&per_page=10"
Notes
- Only workflows (
type: orchestration) are returned — regular agents are excluded - Results are filtered by API key permissions
- Use pagination to handle large result sets
- See the Workflows user guide for details on the visual canvas and node types
Authorizations
API Key for authentication
Query Parameters
Page number (starting from 1)
Required range:
x >= 1Items per page (max 50)
Required range:
1 <= x <= 50Was this page helpful?
⌘I

