curl --request POST \
--url https://api.example.com/api/public/tools/get_flow_available_variables \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"source": "ft",
"objectName": null,
"flowPlanId": null,
"nodeId": null,
"root": null
}
'import requests
url = "https://api.example.com/api/public/tools/get_flow_available_variables"
payload = {
"source": "ft",
"objectName": None,
"flowPlanId": None,
"nodeId": None,
"root": 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({source: 'ft', objectName: null, flowPlanId: null, nodeId: null, root: null})
};
fetch('https://api.example.com/api/public/tools/get_flow_available_variables', 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/get_flow_available_variables",
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([
'source' => 'ft',
'objectName' => null,
'flowPlanId' => null,
'nodeId' => null,
'root' => 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/get_flow_available_variables"
payload := strings.NewReader("{\n \"source\": \"ft\",\n \"objectName\": null,\n \"flowPlanId\": null,\n \"nodeId\": null,\n \"root\": 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/get_flow_available_variables")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"source\": \"ft\",\n \"objectName\": null,\n \"flowPlanId\": null,\n \"nodeId\": null,\n \"root\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/get_flow_available_variables")
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 \"source\": \"ft\",\n \"objectName\": null,\n \"flowPlanId\": null,\n \"nodeId\": null,\n \"root\": 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>"
}Get Flow Available Variables
Returns canonical fully qualified variable names for flow prompts, dynamic action prompts/messages, task text, email subjects, and branch expressions.
Usage notes
- Use returned templates exactly and do not use aliases or shorthand like or .
- Calling this tool does not mean a Flow Plan should be created; for one named contact, still use find_contact_data before add_dynamic_action.
curl --request POST \
--url https://api.example.com/api/public/tools/get_flow_available_variables \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"source": "ft",
"objectName": null,
"flowPlanId": null,
"nodeId": null,
"root": null
}
'import requests
url = "https://api.example.com/api/public/tools/get_flow_available_variables"
payload = {
"source": "ft",
"objectName": None,
"flowPlanId": None,
"nodeId": None,
"root": 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({source: 'ft', objectName: null, flowPlanId: null, nodeId: null, root: null})
};
fetch('https://api.example.com/api/public/tools/get_flow_available_variables', 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/get_flow_available_variables",
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([
'source' => 'ft',
'objectName' => null,
'flowPlanId' => null,
'nodeId' => null,
'root' => 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/get_flow_available_variables"
payload := strings.NewReader("{\n \"source\": \"ft\",\n \"objectName\": null,\n \"flowPlanId\": null,\n \"nodeId\": null,\n \"root\": 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/get_flow_available_variables")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"source\": \"ft\",\n \"objectName\": null,\n \"flowPlanId\": null,\n \"nodeId\": null,\n \"root\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/get_flow_available_variables")
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 \"source\": \"ft\",\n \"objectName\": null,\n \"flowPlanId\": null,\n \"nodeId\": null,\n \"root\": 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
Variable source. Use ft for flow properties and hs for HubSpot object properties.
ft, hs Variable object/group name. Omit for flow variables; use a HubSpot object group for hs variables.
Optional flow plan id. Used with nodeId to include custom variables produced by earlier AI research nodes. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, or get_flow_workspace.
Optional node id. Example: node_email_1. Use an id from the submitted root tree or get_flow_workspace.flowPlan.root; when provided, the response includes custom variables available before this node.
Optional root tree to evaluate custom variables against instead of the persisted flow root.
Show child attributes
Show child attributes
Response
Tool result.

