Get the fields a workflow's conditions can read
curl --request GET \
--url https://api.cal.com/v2/workflows/{workflowId}/condition-fields \
--header 'Authorization: <authorization>' \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/workflows/{workflowId}/condition-fields"
headers = {
"cal-api-version": "<cal-api-version>",
"Authorization": "<authorization>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'cal-api-version': '<cal-api-version>', Authorization: '<authorization>'}
};
fetch('https://api.cal.com/v2/workflows/{workflowId}/condition-fields', 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.cal.com/v2/workflows/{workflowId}/condition-fields",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"cal-api-version: <cal-api-version>"
],
]);
$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.cal.com/v2/workflows/{workflowId}/condition-fields"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cal-api-version", "<cal-api-version>")
req.Header.Add("Authorization", "<authorization>")
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.cal.com/v2/workflows/{workflowId}/condition-fields")
.header("cal-api-version", "<cal-api-version>")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/workflows/{workflowId}/condition-fields")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cal-api-version"] = '<cal-api-version>'
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"truncated": true,
"fields": [
{
"id": "company-size",
"label": "Company size",
"type": "select",
"operators": [
{
"id": "select_equals",
"label": "Equals"
}
],
"options": [
{
"value": "enterprise",
"label": "Enterprise"
}
],
"missingFrom": [
"Intro call"
],
"hasTypeConflict": false
}
],
"activeOn": [
"Intro call",
"Demo"
],
"isActiveOnAll": true
}
}Workflows
Get the fields a workflow's conditions can read
List the fields a conditional path on this workflow can be written against, with the comparisons each one accepts and how both read in the Cal.com app. The catalog comes from what the workflow is active on — booking questions on its active event types — so it also reports the entities that do not ask for a field. Not available to third-party OAuth access tokens.
GET
/
v2
/
workflows
/
{workflowId}
/
condition-fields
Get the fields a workflow's conditions can read
curl --request GET \
--url https://api.cal.com/v2/workflows/{workflowId}/condition-fields \
--header 'Authorization: <authorization>' \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/workflows/{workflowId}/condition-fields"
headers = {
"cal-api-version": "<cal-api-version>",
"Authorization": "<authorization>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'cal-api-version': '<cal-api-version>', Authorization: '<authorization>'}
};
fetch('https://api.cal.com/v2/workflows/{workflowId}/condition-fields', 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.cal.com/v2/workflows/{workflowId}/condition-fields",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"cal-api-version: <cal-api-version>"
],
]);
$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.cal.com/v2/workflows/{workflowId}/condition-fields"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cal-api-version", "<cal-api-version>")
req.Header.Add("Authorization", "<authorization>")
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.cal.com/v2/workflows/{workflowId}/condition-fields")
.header("cal-api-version", "<cal-api-version>")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/workflows/{workflowId}/condition-fields")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cal-api-version"] = '<cal-api-version>'
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"truncated": true,
"fields": [
{
"id": "company-size",
"label": "Company size",
"type": "select",
"operators": [
{
"id": "select_equals",
"label": "Equals"
}
],
"options": [
{
"value": "enterprise",
"label": "Enterprise"
}
],
"missingFrom": [
"Intro call"
],
"hasTypeConflict": false
}
],
"activeOn": [
"Intro call",
"Demo"
],
"isActiveOnAll": true
}
}Headers
Must be set to 2026-09-22 to use this version of the workflow endpoints.
Example:
"2026-09-22"
value must be Bearer <token> where <token> is api key prefixed with cal_, managed user access token, or OAuth access token
Path Parameters
Was this page helpful?