Initiate Call By Workflow Uuid
curl --request POST \
--url https://api.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"to_number": "<string>",
"initial_context": {},
"telephony_configuration_id": 123,
"dynamic_variables": {},
"from_number": "<string>",
"metadata": {}
}
'import requests
url = "https://api.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}"
payload = {
"to_number": "<string>",
"initial_context": {},
"telephony_configuration_id": 123,
"dynamic_variables": {},
"from_number": "<string>",
"metadata": {}
}
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({
to_number: '<string>',
initial_context: {},
telephony_configuration_id: 123,
dynamic_variables: {},
from_number: '<string>',
metadata: {}
})
};
fetch('https://api.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}', 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.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}",
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([
'to_number' => '<string>',
'initial_context' => [
],
'telephony_configuration_id' => 123,
'dynamic_variables' => [
],
'from_number' => '<string>',
'metadata' => [
]
]),
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.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}"
payload := strings.NewReader("{\n \"to_number\": \"<string>\",\n \"initial_context\": {},\n \"telephony_configuration_id\": 123,\n \"dynamic_variables\": {},\n \"from_number\": \"<string>\",\n \"metadata\": {}\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.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"to_number\": \"<string>\",\n \"initial_context\": {},\n \"telephony_configuration_id\": 123,\n \"dynamic_variables\": {},\n \"from_number\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}")
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 \"to_number\": \"<string>\",\n \"initial_context\": {},\n \"telephony_configuration_id\": 123,\n \"dynamic_variables\": {},\n \"from_number\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"status": "<string>",
"workflow_run_id": 123,
"workflow_run_name": "<string>",
"call_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Calls
Trigger an Outbound Call by Workflow UUID
Initiate an outbound call using a workflow’s stable Agent UUID
POST
/
api
/
v1
/
public
/
agent
/
workflow
/
{workflow_uuid}
Initiate Call By Workflow Uuid
curl --request POST \
--url https://api.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"to_number": "<string>",
"initial_context": {},
"telephony_configuration_id": 123,
"dynamic_variables": {},
"from_number": "<string>",
"metadata": {}
}
'import requests
url = "https://api.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}"
payload = {
"to_number": "<string>",
"initial_context": {},
"telephony_configuration_id": 123,
"dynamic_variables": {},
"from_number": "<string>",
"metadata": {}
}
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({
to_number: '<string>',
initial_context: {},
telephony_configuration_id: 123,
dynamic_variables: {},
from_number: '<string>',
metadata: {}
})
};
fetch('https://api.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}', 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.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}",
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([
'to_number' => '<string>',
'initial_context' => [
],
'telephony_configuration_id' => 123,
'dynamic_variables' => [
],
'from_number' => '<string>',
'metadata' => [
]
]),
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.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}"
payload := strings.NewReader("{\n \"to_number\": \"<string>\",\n \"initial_context\": {},\n \"telephony_configuration_id\": 123,\n \"dynamic_variables\": {},\n \"from_number\": \"<string>\",\n \"metadata\": {}\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.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"to_number\": \"<string>\",\n \"initial_context\": {},\n \"telephony_configuration_id\": 123,\n \"dynamic_variables\": {},\n \"from_number\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.peachdeskai.com/api/v1/public/agent/workflow/{workflow_uuid}")
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 \"to_number\": \"<string>\",\n \"initial_context\": {},\n \"telephony_configuration_id\": 123,\n \"dynamic_variables\": {},\n \"from_number\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"status": "<string>",
"workflow_run_id": 123,
"workflow_run_name": "<string>",
"call_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Use this endpoint when you want to execute a workflow directly by its stable Agent UUID instead of through an API Trigger node.
The
workflow_uuid is the workflow’s Agent UUID. It is different from an API Trigger node’s trigger_path.
To find and copy the Agent UUID in the UI, see Agent UUID.
Use workflow_run_id from the response to later retrieve call details, recordings, and transcripts.
Pass initial_context to inject runtime data as template variables into the agent’s prompt. See Using initial context.
Pass telephony_configuration_id to route the call through a specific telephony configuration instead of your organization’s default. The id is shown on each row in Telephony configurations (https://app.peachdeskai.com/telephony-configurations for hosted or http://localhost:3010/telephony-configurations for local).
Pass from_number to pin which of your numbers the recipient sees as the caller ID. Give it in E.164 form (+14155551212). It must be an active outbound number on the resolved telephony configuration; a number your organization does not own is rejected with 400 from_number_not_found. When omitted, Peachdesk rotates automatically across the outbound numbers on that configuration so one number is not used for every call. See Caller ID selection.
Pass metadata to attach an opaque object that Peachdesk echoes back verbatim as call.metadata on the call webhooks, for correlating the call with your own records. Unlike dynamic_variables, metadata is not rendered into the agent’s prompt. See Dynamic variables and metadata.
The destination is the required to_number field. Give it in E.164 form (+14155550123).
This route expects a workflow UUID. Do not pass an API Trigger node UUID here. If you want to execute via an API Trigger node, use Trigger an outbound call instead.
Your telephony provider must be configured before outbound calls will connect. See Telephony for setup instructions.
Authorizations
Organization API key (bibha_...). Takes precedence over the session credential, and is refused outright on user-session-only and super-admin routes.
Path Parameters
Body
application/json

