Initiate Call
curl --request POST \
--url https://api.peachdeskai.com/api/v1/public/agent/{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/{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/{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/{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/{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/{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/{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 API Trigger Node
Initiate an outbound call using an API Trigger node UUID
POST
/
api
/
v1
/
public
/
agent
/
{uuid}
Initiate Call
curl --request POST \
--url https://api.peachdeskai.com/api/v1/public/agent/{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/{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/{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/{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/{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/{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/{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 through an API Trigger node.
The
uuid comes from the API Trigger node in your agent. Add the node to your workflow and copy its auto-generated trigger_path.
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 an API Trigger node UUID (
trigger_path). Do not pass a workflow UUID here. If you want to execute by workflow UUID, use Trigger an outbound call by workflow UUID 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

