curl --request POST \
--url https://api.goyappr.com/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sales Agent",
"system_prompt": "You are a friendly sales representative...",
"type": "prompt",
"description": "<string>",
"voice": "Rachel",
"background_sound_volume": 0.3,
"language": "he",
"temperature": 0.5,
"greeting_message": "שלום! איך אוכל לעזור?",
"agent_speaks_first": true,
"lead_memory_enabled": true,
"vad_stop_secs": 0.5,
"vad_start_secs": 0.2,
"vad_confidence": 0.7,
"silence_timeout_secs": 60,
"max_continuous_speech_secs": 120,
"max_call_duration_secs": 600,
"webhook_url": "<string>",
"webhook_events": [],
"webhook_headers": {
"Authorization": "Bearer sk_live_…",
"X-Source": "yappr"
},
"idempotency_key": "<string>"
}
'import requests
url = "https://api.goyappr.com/agents"
payload = {
"name": "Sales Agent",
"system_prompt": "You are a friendly sales representative...",
"type": "prompt",
"description": "<string>",
"voice": "Rachel",
"background_sound_volume": 0.3,
"language": "he",
"temperature": 0.5,
"greeting_message": "שלום! איך אוכל לעזור?",
"agent_speaks_first": True,
"lead_memory_enabled": True,
"vad_stop_secs": 0.5,
"vad_start_secs": 0.2,
"vad_confidence": 0.7,
"silence_timeout_secs": 60,
"max_continuous_speech_secs": 120,
"max_call_duration_secs": 600,
"webhook_url": "<string>",
"webhook_events": [],
"webhook_headers": {
"Authorization": "Bearer sk_live_…",
"X-Source": "yappr"
},
"idempotency_key": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Sales Agent',
system_prompt: 'You are a friendly sales representative...',
type: 'prompt',
description: '<string>',
voice: 'Rachel',
background_sound_volume: 0.3,
language: 'he',
temperature: 0.5,
greeting_message: 'שלום! איך אוכל לעזור?',
agent_speaks_first: true,
lead_memory_enabled: true,
vad_stop_secs: 0.5,
vad_start_secs: 0.2,
vad_confidence: 0.7,
silence_timeout_secs: 60,
max_continuous_speech_secs: 120,
max_call_duration_secs: 600,
webhook_url: '<string>',
webhook_events: [],
webhook_headers: {Authorization: 'Bearer sk_live_…', 'X-Source': 'yappr'},
idempotency_key: '<string>'
})
};
fetch('https://api.goyappr.com/agents', 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.goyappr.com/agents",
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([
'name' => 'Sales Agent',
'system_prompt' => 'You are a friendly sales representative...',
'type' => 'prompt',
'description' => '<string>',
'voice' => 'Rachel',
'background_sound_volume' => 0.3,
'language' => 'he',
'temperature' => 0.5,
'greeting_message' => 'שלום! איך אוכל לעזור?',
'agent_speaks_first' => true,
'lead_memory_enabled' => true,
'vad_stop_secs' => 0.5,
'vad_start_secs' => 0.2,
'vad_confidence' => 0.7,
'silence_timeout_secs' => 60,
'max_continuous_speech_secs' => 120,
'max_call_duration_secs' => 600,
'webhook_url' => '<string>',
'webhook_events' => [
],
'webhook_headers' => [
'Authorization' => 'Bearer sk_live_…',
'X-Source' => 'yappr'
],
'idempotency_key' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.goyappr.com/agents"
payload := strings.NewReader("{\n \"name\": \"Sales Agent\",\n \"system_prompt\": \"You are a friendly sales representative...\",\n \"type\": \"prompt\",\n \"description\": \"<string>\",\n \"voice\": \"Rachel\",\n \"background_sound_volume\": 0.3,\n \"language\": \"he\",\n \"temperature\": 0.5,\n \"greeting_message\": \"שלום! איך אוכל לעזור?\",\n \"agent_speaks_first\": true,\n \"lead_memory_enabled\": true,\n \"vad_stop_secs\": 0.5,\n \"vad_start_secs\": 0.2,\n \"vad_confidence\": 0.7,\n \"silence_timeout_secs\": 60,\n \"max_continuous_speech_secs\": 120,\n \"max_call_duration_secs\": 600,\n \"webhook_url\": \"<string>\",\n \"webhook_events\": [],\n \"webhook_headers\": {\n \"Authorization\": \"Bearer sk_live_…\",\n \"X-Source\": \"yappr\"\n },\n \"idempotency_key\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.goyappr.com/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sales Agent\",\n \"system_prompt\": \"You are a friendly sales representative...\",\n \"type\": \"prompt\",\n \"description\": \"<string>\",\n \"voice\": \"Rachel\",\n \"background_sound_volume\": 0.3,\n \"language\": \"he\",\n \"temperature\": 0.5,\n \"greeting_message\": \"שלום! איך אוכל לעזור?\",\n \"agent_speaks_first\": true,\n \"lead_memory_enabled\": true,\n \"vad_stop_secs\": 0.5,\n \"vad_start_secs\": 0.2,\n \"vad_confidence\": 0.7,\n \"silence_timeout_secs\": 60,\n \"max_continuous_speech_secs\": 120,\n \"max_call_duration_secs\": 600,\n \"webhook_url\": \"<string>\",\n \"webhook_events\": [],\n \"webhook_headers\": {\n \"Authorization\": \"Bearer sk_live_…\",\n \"X-Source\": \"yappr\"\n },\n \"idempotency_key\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goyappr.com/agents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Sales Agent\",\n \"system_prompt\": \"You are a friendly sales representative...\",\n \"type\": \"prompt\",\n \"description\": \"<string>\",\n \"voice\": \"Rachel\",\n \"background_sound_volume\": 0.3,\n \"language\": \"he\",\n \"temperature\": 0.5,\n \"greeting_message\": \"שלום! איך אוכל לעזור?\",\n \"agent_speaks_first\": true,\n \"lead_memory_enabled\": true,\n \"vad_stop_secs\": 0.5,\n \"vad_start_secs\": 0.2,\n \"vad_confidence\": 0.7,\n \"silence_timeout_secs\": 60,\n \"max_continuous_speech_secs\": 120,\n \"max_call_duration_secs\": 600,\n \"webhook_url\": \"<string>\",\n \"webhook_events\": [],\n \"webhook_headers\": {\n \"Authorization\": \"Bearer sk_live_…\",\n \"X-Source\": \"yappr\"\n },\n \"idempotency_key\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"type": "prompt",
"flow_config": {
"nodes": [
{
"id": "<string>",
"type": "start",
"name": "<string>",
"position": {
"x": 123,
"y": 123
},
"agent_speaks_first": true,
"greeting": "<string>",
"is_literal": false,
"next_step_id": "<string>",
"auto_advance": true
}
],
"flow_config_version": "1",
"metadata": {
"custom_metadata_keys": [
"<string>"
]
}
},
"system_prompt": "<string>",
"description": "<string>",
"voice": "Michal",
"background_sound": "call_center",
"background_sound_volume": 0.3,
"language": "he",
"temperature": 1,
"greeting_message": "<string>",
"agent_speaks_first": true,
"vad_stop_secs": 0.5,
"vad_start_secs": 0.2,
"vad_confidence": 0.7,
"silence_timeout_secs": 60,
"max_continuous_speech_secs": 120,
"max_call_duration_secs": 600,
"lead_memory_enabled": true,
"is_active": true,
"webhook_url": "<string>",
"webhook_events": [
"call.started"
],
"webhook_headers": {
"Authorization": "Bearer sk_live_…",
"X-Source": "yappr"
},
"extraction_parameters": [
{
"name": "customerName",
"description": "The caller's full name as mentioned during the conversation"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "<string>",
"code": "<string>"
}Create Agent
All field names must be snake_case. The API will reject camelCase field names with a 400 error listing the correct snake_case alternatives. The underlying model is managed internally and cannot be configured.
curl --request POST \
--url https://api.goyappr.com/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sales Agent",
"system_prompt": "You are a friendly sales representative...",
"type": "prompt",
"description": "<string>",
"voice": "Rachel",
"background_sound_volume": 0.3,
"language": "he",
"temperature": 0.5,
"greeting_message": "שלום! איך אוכל לעזור?",
"agent_speaks_first": true,
"lead_memory_enabled": true,
"vad_stop_secs": 0.5,
"vad_start_secs": 0.2,
"vad_confidence": 0.7,
"silence_timeout_secs": 60,
"max_continuous_speech_secs": 120,
"max_call_duration_secs": 600,
"webhook_url": "<string>",
"webhook_events": [],
"webhook_headers": {
"Authorization": "Bearer sk_live_…",
"X-Source": "yappr"
},
"idempotency_key": "<string>"
}
'import requests
url = "https://api.goyappr.com/agents"
payload = {
"name": "Sales Agent",
"system_prompt": "You are a friendly sales representative...",
"type": "prompt",
"description": "<string>",
"voice": "Rachel",
"background_sound_volume": 0.3,
"language": "he",
"temperature": 0.5,
"greeting_message": "שלום! איך אוכל לעזור?",
"agent_speaks_first": True,
"lead_memory_enabled": True,
"vad_stop_secs": 0.5,
"vad_start_secs": 0.2,
"vad_confidence": 0.7,
"silence_timeout_secs": 60,
"max_continuous_speech_secs": 120,
"max_call_duration_secs": 600,
"webhook_url": "<string>",
"webhook_events": [],
"webhook_headers": {
"Authorization": "Bearer sk_live_…",
"X-Source": "yappr"
},
"idempotency_key": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Sales Agent',
system_prompt: 'You are a friendly sales representative...',
type: 'prompt',
description: '<string>',
voice: 'Rachel',
background_sound_volume: 0.3,
language: 'he',
temperature: 0.5,
greeting_message: 'שלום! איך אוכל לעזור?',
agent_speaks_first: true,
lead_memory_enabled: true,
vad_stop_secs: 0.5,
vad_start_secs: 0.2,
vad_confidence: 0.7,
silence_timeout_secs: 60,
max_continuous_speech_secs: 120,
max_call_duration_secs: 600,
webhook_url: '<string>',
webhook_events: [],
webhook_headers: {Authorization: 'Bearer sk_live_…', 'X-Source': 'yappr'},
idempotency_key: '<string>'
})
};
fetch('https://api.goyappr.com/agents', 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.goyappr.com/agents",
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([
'name' => 'Sales Agent',
'system_prompt' => 'You are a friendly sales representative...',
'type' => 'prompt',
'description' => '<string>',
'voice' => 'Rachel',
'background_sound_volume' => 0.3,
'language' => 'he',
'temperature' => 0.5,
'greeting_message' => 'שלום! איך אוכל לעזור?',
'agent_speaks_first' => true,
'lead_memory_enabled' => true,
'vad_stop_secs' => 0.5,
'vad_start_secs' => 0.2,
'vad_confidence' => 0.7,
'silence_timeout_secs' => 60,
'max_continuous_speech_secs' => 120,
'max_call_duration_secs' => 600,
'webhook_url' => '<string>',
'webhook_events' => [
],
'webhook_headers' => [
'Authorization' => 'Bearer sk_live_…',
'X-Source' => 'yappr'
],
'idempotency_key' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.goyappr.com/agents"
payload := strings.NewReader("{\n \"name\": \"Sales Agent\",\n \"system_prompt\": \"You are a friendly sales representative...\",\n \"type\": \"prompt\",\n \"description\": \"<string>\",\n \"voice\": \"Rachel\",\n \"background_sound_volume\": 0.3,\n \"language\": \"he\",\n \"temperature\": 0.5,\n \"greeting_message\": \"שלום! איך אוכל לעזור?\",\n \"agent_speaks_first\": true,\n \"lead_memory_enabled\": true,\n \"vad_stop_secs\": 0.5,\n \"vad_start_secs\": 0.2,\n \"vad_confidence\": 0.7,\n \"silence_timeout_secs\": 60,\n \"max_continuous_speech_secs\": 120,\n \"max_call_duration_secs\": 600,\n \"webhook_url\": \"<string>\",\n \"webhook_events\": [],\n \"webhook_headers\": {\n \"Authorization\": \"Bearer sk_live_…\",\n \"X-Source\": \"yappr\"\n },\n \"idempotency_key\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.goyappr.com/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sales Agent\",\n \"system_prompt\": \"You are a friendly sales representative...\",\n \"type\": \"prompt\",\n \"description\": \"<string>\",\n \"voice\": \"Rachel\",\n \"background_sound_volume\": 0.3,\n \"language\": \"he\",\n \"temperature\": 0.5,\n \"greeting_message\": \"שלום! איך אוכל לעזור?\",\n \"agent_speaks_first\": true,\n \"lead_memory_enabled\": true,\n \"vad_stop_secs\": 0.5,\n \"vad_start_secs\": 0.2,\n \"vad_confidence\": 0.7,\n \"silence_timeout_secs\": 60,\n \"max_continuous_speech_secs\": 120,\n \"max_call_duration_secs\": 600,\n \"webhook_url\": \"<string>\",\n \"webhook_events\": [],\n \"webhook_headers\": {\n \"Authorization\": \"Bearer sk_live_…\",\n \"X-Source\": \"yappr\"\n },\n \"idempotency_key\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goyappr.com/agents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Sales Agent\",\n \"system_prompt\": \"You are a friendly sales representative...\",\n \"type\": \"prompt\",\n \"description\": \"<string>\",\n \"voice\": \"Rachel\",\n \"background_sound_volume\": 0.3,\n \"language\": \"he\",\n \"temperature\": 0.5,\n \"greeting_message\": \"שלום! איך אוכל לעזור?\",\n \"agent_speaks_first\": true,\n \"lead_memory_enabled\": true,\n \"vad_stop_secs\": 0.5,\n \"vad_start_secs\": 0.2,\n \"vad_confidence\": 0.7,\n \"silence_timeout_secs\": 60,\n \"max_continuous_speech_secs\": 120,\n \"max_call_duration_secs\": 600,\n \"webhook_url\": \"<string>\",\n \"webhook_events\": [],\n \"webhook_headers\": {\n \"Authorization\": \"Bearer sk_live_…\",\n \"X-Source\": \"yappr\"\n },\n \"idempotency_key\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"type": "prompt",
"flow_config": {
"nodes": [
{
"id": "<string>",
"type": "start",
"name": "<string>",
"position": {
"x": 123,
"y": 123
},
"agent_speaks_first": true,
"greeting": "<string>",
"is_literal": false,
"next_step_id": "<string>",
"auto_advance": true
}
],
"flow_config_version": "1",
"metadata": {
"custom_metadata_keys": [
"<string>"
]
}
},
"system_prompt": "<string>",
"description": "<string>",
"voice": "Michal",
"background_sound": "call_center",
"background_sound_volume": 0.3,
"language": "he",
"temperature": 1,
"greeting_message": "<string>",
"agent_speaks_first": true,
"vad_stop_secs": 0.5,
"vad_start_secs": 0.2,
"vad_confidence": 0.7,
"silence_timeout_secs": 60,
"max_continuous_speech_secs": 120,
"max_call_duration_secs": 600,
"lead_memory_enabled": true,
"is_active": true,
"webhook_url": "<string>",
"webhook_events": [
"call.started"
],
"webhook_headers": {
"Authorization": "Bearer sk_live_…",
"X-Source": "yappr"
},
"extraction_parameters": [
{
"name": "customerName",
"description": "The caller's full name as mentioned during the conversation"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
Your Yappr API key (e.g. ypr_live_...). Generate one in the dashboard under Settings → API Keys.
Body
"Sales Agent"
"You are a friendly sales representative..."
prompt (default): single system_prompt drives the call. flow: requires flow_config. Immutable post-create.
prompt, flow Required when type='flow'. Must be omitted when type='prompt'. See concepts/flow-agents for the full graph spec.
Show child attributes
Show child attributes
The persona the agent speaks in, and the only thing that selects between Yappr's two voice families — there is no separate engine field, and engine / engine_voice are rejected if you send them.
Keren, Eitan, Hila, Ido, Boaz, Tali, Erez, Efrat are the second family, available to every workspace. Agents on these voices handle their own turn-taking and expressiveness, so temperature, vad_stop_secs, vad_start_secs and vad_confidence are rejected on them, and they cannot be used on a type='flow' agent. Any other name returns 400 listing every voice you may use.
Michal, Yonatan, David, Rachel, Gil, Noa, Maya, Adam, Shira, Avigail, Amir, Liat, Omer, Tamar, Tom, Benny, Nir, Natan, Yael, Dvora, Yosef, Shir, Anat, Ariel, Roi, Shlomo, Dana, Alon, Ruth, Yuval, Keren, Eitan, Hila, Ido, Boaz, Tali, Erez, Efrat Ambient background sound mixed under the agent's voice during calls. Null means silent (default).
call_center, open_office, cafe, outdoor Volume of the background sound, 0.0–0.6. Capped to protect turn-taking.
0 <= x <= 0.6he, en 0 <= x <= 2"שלום! איך אוכל לעזור?"
Inject matched lead's long-term memory into system prompt at call time
0.05 <= x <= 50.05 <= x <= 20 <= x <= 110 <= x <= 9000 = disabled
0 <= x <= 3000 = no cap of the agent's own; the platform still ends the call after 65 minutes (3900 s)
0 <= x <= 3600call.started, call.answered, call.ended, call.failed, call.no_answer, call.dnc_blocked, transcript.ready, call.analyzed Custom HTTP headers sent with every webhook delivery for this agent (e.g. an auth token). Flat name → string-value map, or null to clear. Headers that would override request routing or HTTP framing (Host, Content-Length, Transfer-Encoding, Connection, Expect, Keep-Alive, TE, Trailer, Upgrade, Proxy-*) are rejected with 400.
Show child attributes
Show child attributes
{
"Authorization": "Bearer sk_live_…",
"X-Source": "yappr"
}
If a key is supplied and a prior request used the same key, the existing agent is returned instead of creating a duplicate.
Response
Agent created
prompt (default, legacy): a single system_prompt drives the call; the LLM decides when to call attached tools. flow: the call is driven by a flow_config graph of conversation, tool-call, and routing nodes. type is immutable post-create — to change types, create a new agent.
prompt, flow The flow graph. Required when type='flow', must be omitted/null when type='prompt'.
Show child attributes
Show child attributes
The persona the agent speaks in, and the only thing that selects between Yappr's two voice families — there is no separate engine field, and engine / engine_voice are rejected if you send them.
Keren, Eitan, Hila, Ido, Boaz, Tali, Erez, Efrat are the second family, available to every workspace. Agents on these voices handle their own turn-taking and expressiveness, so temperature, vad_stop_secs, vad_start_secs and vad_confidence are rejected on them, and they cannot be used on a type='flow' agent. Any other name returns 400 listing every voice you may use.
Always the name the agent actually speaks in, whichever family it is on.
Michal, Yonatan, David, Rachel, Gil, Noa, Maya, Adam, Shira, Avigail, Amir, Liat, Omer, Tamar, Tom, Benny, Nir, Natan, Yael, Dvora, Yosef, Shir, Anat, Ariel, Roi, Shlomo, Dana, Alon, Ruth, Yuval, Keren, Eitan, Hila, Ido, Boaz, Tali, Erez, Efrat Ambient background sound mixed under the agent's voice during calls. Null means silent (default).
call_center, open_office, cafe, outdoor Volume of the background sound, 0.0–0.6. Capped to protect turn-taking.
0 <= x <= 0.6he, en 0 <= x <= 2Seconds of silence before VAD confirms speech has stopped
0.05 <= x <= 5Seconds of speech before VAD confirms speech has started
0.05 <= x <= 2Minimum confidence threshold for voice detection
0 <= x <= 1Seconds of caller silence before auto-hangup. Prevents idle calls wasting credits.
10 <= x <= 900Max seconds one party can speak non-stop before auto-hangup. Catches answering machines. 0 = disabled.
0 <= x <= 300Hard cap on total call duration regardless of activity. 0 = no cap of the agent's own; the platform still ends the call after 65 minutes (3900 s), with the disconnect reason Platform call limit reached.
0 <= x <= 3600When true, the matched lead's long-term memory context is injected into the system prompt at call time.
Events posted to webhook_url as {event, timestamp, agent_id, company_id, call_id, data}.
call.failed and call.no_answer carry data.hangup_cause when the cause is known. For a call
from a number in your own Telnyx account that Telnyx
refused while it rang, call.failed has data.hangup_cause:
carrier_rejected— Telnyx refused the call (SIP 401, 403 or 407).carrier_number_invalid— Telnyx could not route the number called (SIP 404, 484 or 604).
The SIP code is not in the webhook; the carrier account keeps the last one in last_error.sip_code.
One Telnyx refused before it rang sends no webhook when POST /calls was placing it (the
request answers 422); from the queue it sends call.failed with data.error_reason instead.
call.started, call.answered, call.ended, call.failed, call.no_answer, call.dnc_blocked, transcript.ready, call.analyzed Custom HTTP headers sent with every webhook delivery for this agent (e.g. an auth token). Flat name → string-value map, or null to clear. Headers that would override request routing or HTTP framing (Host, Content-Length, Transfer-Encoding, Connection, Expect, Keep-Alive, TE, Trailer, Upgrade, Proxy-*) are rejected with 400.
Show child attributes
Show child attributes
{
"Authorization": "Bearer sk_live_…",
"X-Source": "yappr"
}
AI extraction parameters — after each call, values are extracted from the transcript and included in the call.analyzed webhook payload (and stored on the call log).
Show child attributes
Show child attributes