curl --request POST \
--url https://api.example.com/api/public/tools/list_flow_plans \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"limit": null,
"cursor": null,
"isDraft": null,
"name": null,
"searchQuery": null,
"sourceless": null,
"flowPlanIds": null,
"audienceSources": null,
"includeMetrics": false,
"includeCost": false,
"orderBy": null,
"orderDirection": null
}
'import requests
url = "https://api.example.com/api/public/tools/list_flow_plans"
payload = {
"limit": None,
"cursor": None,
"isDraft": None,
"name": None,
"searchQuery": None,
"sourceless": None,
"flowPlanIds": None,
"audienceSources": None,
"includeMetrics": False,
"includeCost": False,
"orderBy": None,
"orderDirection": None
}
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({
limit: null,
cursor: null,
isDraft: null,
name: null,
searchQuery: null,
sourceless: null,
flowPlanIds: null,
audienceSources: null,
includeMetrics: false,
includeCost: false,
orderBy: null,
orderDirection: null
})
};
fetch('https://api.example.com/api/public/tools/list_flow_plans', 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.example.com/api/public/tools/list_flow_plans",
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([
'limit' => null,
'cursor' => null,
'isDraft' => null,
'name' => null,
'searchQuery' => null,
'sourceless' => null,
'flowPlanIds' => null,
'audienceSources' => null,
'includeMetrics' => false,
'includeCost' => false,
'orderBy' => null,
'orderDirection' => null
]),
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.example.com/api/public/tools/list_flow_plans"
payload := strings.NewReader("{\n \"limit\": null,\n \"cursor\": null,\n \"isDraft\": null,\n \"name\": null,\n \"searchQuery\": null,\n \"sourceless\": null,\n \"flowPlanIds\": null,\n \"audienceSources\": null,\n \"includeMetrics\": false,\n \"includeCost\": false,\n \"orderBy\": null,\n \"orderDirection\": null\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.example.com/api/public/tools/list_flow_plans")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"limit\": null,\n \"cursor\": null,\n \"isDraft\": null,\n \"name\": null,\n \"searchQuery\": null,\n \"sourceless\": null,\n \"flowPlanIds\": null,\n \"audienceSources\": null,\n \"includeMetrics\": false,\n \"includeCost\": false,\n \"orderBy\": null,\n \"orderDirection\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/list_flow_plans")
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 \"limit\": null,\n \"cursor\": null,\n \"isDraft\": null,\n \"name\": null,\n \"searchQuery\": null,\n \"sourceless\": null,\n \"flowPlanIds\": null,\n \"audienceSources\": null,\n \"includeMetrics\": false,\n \"includeCost\": false,\n \"orderBy\": null,\n \"orderDirection\": null\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}List Flow Plans
List compact flow plans for the caller’s team.
Usage notes
- Does not return the flow root/tree.
- Metrics and estimated per-enrollment cost are optional; request includeMetrics/includeCost only when needed.
- Supports sorting by created, name, enrollments, replies, opportunities, or awaiting.
- For top/most/highest flow questions, sort by the requested metric and use limit=5 unless the customer asks for more.
curl --request POST \
--url https://api.example.com/api/public/tools/list_flow_plans \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"limit": null,
"cursor": null,
"isDraft": null,
"name": null,
"searchQuery": null,
"sourceless": null,
"flowPlanIds": null,
"audienceSources": null,
"includeMetrics": false,
"includeCost": false,
"orderBy": null,
"orderDirection": null
}
'import requests
url = "https://api.example.com/api/public/tools/list_flow_plans"
payload = {
"limit": None,
"cursor": None,
"isDraft": None,
"name": None,
"searchQuery": None,
"sourceless": None,
"flowPlanIds": None,
"audienceSources": None,
"includeMetrics": False,
"includeCost": False,
"orderBy": None,
"orderDirection": None
}
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({
limit: null,
cursor: null,
isDraft: null,
name: null,
searchQuery: null,
sourceless: null,
flowPlanIds: null,
audienceSources: null,
includeMetrics: false,
includeCost: false,
orderBy: null,
orderDirection: null
})
};
fetch('https://api.example.com/api/public/tools/list_flow_plans', 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.example.com/api/public/tools/list_flow_plans",
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([
'limit' => null,
'cursor' => null,
'isDraft' => null,
'name' => null,
'searchQuery' => null,
'sourceless' => null,
'flowPlanIds' => null,
'audienceSources' => null,
'includeMetrics' => false,
'includeCost' => false,
'orderBy' => null,
'orderDirection' => null
]),
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.example.com/api/public/tools/list_flow_plans"
payload := strings.NewReader("{\n \"limit\": null,\n \"cursor\": null,\n \"isDraft\": null,\n \"name\": null,\n \"searchQuery\": null,\n \"sourceless\": null,\n \"flowPlanIds\": null,\n \"audienceSources\": null,\n \"includeMetrics\": false,\n \"includeCost\": false,\n \"orderBy\": null,\n \"orderDirection\": null\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.example.com/api/public/tools/list_flow_plans")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"limit\": null,\n \"cursor\": null,\n \"isDraft\": null,\n \"name\": null,\n \"searchQuery\": null,\n \"sourceless\": null,\n \"flowPlanIds\": null,\n \"audienceSources\": null,\n \"includeMetrics\": false,\n \"includeCost\": false,\n \"orderBy\": null,\n \"orderDirection\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/list_flow_plans")
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 \"limit\": null,\n \"cursor\": null,\n \"isDraft\": null,\n \"name\": null,\n \"searchQuery\": null,\n \"sourceless\": null,\n \"flowPlanIds\": null,\n \"audienceSources\": null,\n \"includeMetrics\": false,\n \"includeCost\": false,\n \"orderBy\": null,\n \"orderDirection\": null\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}Authorizations
Body
Max flow plans to return. Defaults to 10 and is capped at 25. For top/most/highest flow questions, use 5 unless the customer asks for more.
Cursor from a previous list_flow_plans response.
Filter by draft state. true returns drafts, false returns published flows, omit for both.
Exact flow plan name filter.
Search flow plans by name.
Filter to flows without a linked source.
Optional flow plan ids to return. Use exact flowPlanId values returned by create_flow_plan, list_flow_plans, get_flow_workspace, or add_dynamic_action.
Optional audience source filters for linked audience flows, for example manual, hubspot, or sales_navigator.
hubspot, csv, manual, system, sales_navigator Include metric values in each row. Adds an extra metrics query; keep false for lightweight discovery unless the customer asks for metric values.
Include estimated single-enrollment cost in each row. This calculates cost per returned flow; keep false unless the customer asks about cost or credits.
Sort key: created, name, enrollments, replies, opportunities, or awaiting. Defaults to created.
created, enrollments, replies, opportunities, name, awaiting, null Sort direction: ascending or descending. Defaults to descending.
ascending, descending, null Response
Tool result.

