Convert text to speech and play it on the call until the required DTMF signals are gathered to build interactive menus.
You can pass a list of valid digits along with an ‘invalid_payload’, which will be played back at the beginning of each prompt. Speech will be interrupted when a DTMF signal is received. The Answer command must be issued before the gather_using_speak command.
Expected Webhooks:
call.dtmf.received (you may receive many of these webhooks)
call.gather.ended
POST
/
calls
/
{call_control_id}
/
actions
/
gather_using_speak
JavaScript
import Telnyx from 'telnyx';const client = new Telnyx({ apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted});const response = await client.calls.actions.gatherUsingSpeak('call_control_id', { payload: 'say this on call', voice: 'male',});console.log(response.data);
import os
from telnyx import Telnyx
client = Telnyx(
api_key=os.environ.get("TELNYX_API_KEY"), # This is the default and can be omitted
)
response = client.calls.actions.gather_using_speak(
call_control_id="call_control_id",
payload="say this on call",
voice="male",
)
print(response.data)
package main
import (
"context"
"fmt"
"github.com/team-telnyx/telnyx-go"
"github.com/team-telnyx/telnyx-go/option"
)
func main() {
client := telnyx.NewClient(
option.WithAPIKey("My API Key"),
)
response, err := client.Calls.Actions.GatherUsingSpeak(
context.TODO(),
"call_control_id",
telnyx.CallActionGatherUsingSpeakParams{
Payload: "say this on call",
Voice: "male",
},
)
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", response.Data)
}
package com.telnyx.sdk.example;
import com.telnyx.sdk.client.TelnyxClient;
import com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;
import com.telnyx.sdk.models.calls.actions.ActionGatherUsingSpeakParams;
import com.telnyx.sdk.models.calls.actions.ActionGatherUsingSpeakResponse;
public final class Main {
private Main() {}
public static void main(String[] args) {
TelnyxClient client = TelnyxOkHttpClient.fromEnv();
ActionGatherUsingSpeakParams params = ActionGatherUsingSpeakParams.builder()
.callControlId("call_control_id")
.payload("say this on call")
.voice("male")
.build();
ActionGatherUsingSpeakResponse response = client.calls().actions().gatherUsingSpeak(params);
}
}
require "telnyx"
telnyx = Telnyx::Client.new(api_key: "My API Key")
response = telnyx.calls.actions.gather_using_speak("call_control_id", payload: "say this on call", voice: "male")
puts(response)
<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Telnyx\Client;
use Telnyx\Core\Exceptions\APIException;
$client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API Key');
try {
$response = $client->calls->actions->gatherUsingSpeak(
'call_control_id',
payload: 'say this on call',
voice: 'male',
clientState: 'aGF2ZSBhIG5pY2UgZGF5ID1d',
commandID: '891510ac-f3e4-11e8-af5b-de00688a4901',
interDigitTimeoutMillis: 10000,
invalidPayload: 'say this on call',
language: 'arb',
maximumDigits: 10,
maximumTries: 3,
minimumDigits: 1,
payloadType: 'text',
serviceLevel: 'premium',
terminatingDigit: '#',
timeoutMillis: 60000,
validDigits: '123',
voiceSettings: [
'type' => 'elevenlabs', 'apiKeyRef' => 'my_elevenlabs_api_key'
],
);
var_dump($response);
} catch (APIException $e) {
echo $e->getMessage();
}
telnyx calls:actions gather-using-speak \
--api-key 'My API Key' \
--call-control-id call_control_id \
--payload 'say this on call' \
--voice male
Define voices using the format <Provider>.<Model>.<VoiceId>. Specifying only the provider will give default values for voice_id and model_id.
Supported Providers:
AWS: Use AWS.Polly.<VoiceId> (e.g., AWS.Polly.Joanna). For neural voices, which provide more realistic, human-like speech, append -Neural to the VoiceId (e.g., AWS.Polly.Joanna-Neural). Check the available voices for compatibility.
Azure: Use Azure.<VoiceId> (e.g., Azure.en-CA-ClaraNeural, Azure.en-US-BrianMultilingualNeural, Azure.en-US-Ava:DragonHDLatestNeural). For a complete list of voices, go to Azure Voice Gallery. Use voice_settings to configure custom deployments, regions, or API keys.
ElevenLabs: Use ElevenLabs.<ModelId>.<VoiceId> (e.g., ElevenLabs.eleven_multilingual_v2.21m00Tcm4TlvDq8ikWAM). The ModelId part is optional. To use ElevenLabs, you must provide your ElevenLabs API key as an integration identifier secret in "voice_settings": {"api_key_ref": "<secret_identifier>"}. See integration secrets documentation for details. Check available voices.
Telnyx: Use Telnyx.<model_id>.<voice_id> (e.g., Telnyx.KokoroTTS.af). Use voice_settings to configure voice_speed and other synthesis parameters. Bayan provides Arabic (multiple dialects) and English voices (e.g., Telnyx.Bayan.Ahmed, Telnyx.Bayan.Amanda). Sukhan provides Urdu voices (e.g., Telnyx.Sukhan.urdu-professor); voice_speed is not supported.
Minimax: Use Minimax.<ModelId>.<VoiceId> (e.g., Minimax.speech-02-hd.Wise_Woman). Supported models: speech-02-turbo, speech-02-hd, speech-2.6-turbo, speech-2.8-turbo. Use voice_settings to configure speed, volume, pitch, and language_boost.
Resemble: Use Resemble.<ModelId>.<VoiceId> (e.g., Resemble.Turbo.Aaron_en-US). Supported models: Pro, Turbo, Urdu. <VoiceId> is a stock voice name or the ID of a Resemble voice clone. Use voice_settings to configure precision, sample_rate, and format.
Inworld: Use Inworld.<ModelId>.<VoiceId> (e.g., Inworld.Mini.Loretta, Inworld.Max.Oliver, Inworld.TTS2.Loretta). Supported models: Mini, Max, TTS2. Use voice_settings to configure delivery_mode (STABLE, BALANCED, CREATIVE), supported by TTS2 only.
Fish Audio: Use FishAudio.<ModelId>.<VoiceId> (e.g., FishAudio.s2.1-pro.<reference_id>). Supported models: s2.1-pro, s2-pro, s1. VoiceId is a Fish Voice-Library reference ID.
Soniox: Use Soniox.<ModelId>.<VoiceId> (e.g., Soniox.tts-rt-v2.Emma). Supported model: tts-rt-v2. Browse the catalog via the Voices API. Every voice speaks all supported languages; set language to the two-letter ISO 639-1 code of the text, for example it. SSML is not supported. Use voice_settings to configure speed (0.7 to 1.3) and reduce_silence.
xAI: Use xAI.<VoiceId> (e.g., xAI.eve). Available voices: eve, ara, rex, sal, leo.
Humain: Use Humain.<VoiceId> (e.g., Humain.sara-ar). Available voices: sara-en, abdulaziz-en, sara-ar, abdulaziz-ar, nourah-ar, abdullah-ar. Native Arabic (Saudi dialect) and English voices only — no ModelId segment.
For service_level basic, you may define the gender of the speaker (male or female).
The text or SSML to be converted into speech when digits don't match the valid_digits parameter or the number of digits is not between min and max. There is a 3,000 character limit.
This parameter impacts speech quality, language options and payload types. When using basic, only the en-US language and payload type text are allowed.
The digit used to terminate input if fewer than maximum_digits digits have been gathered. Set to an empty string to disable the terminating digit entirely, so that a digit such as # can be collected as input per valid_digits.
import Telnyx from 'telnyx';const client = new Telnyx({ apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted});const response = await client.calls.actions.gatherUsingSpeak('call_control_id', { payload: 'say this on call', voice: 'male',});console.log(response.data);
import os
from telnyx import Telnyx
client = Telnyx(
api_key=os.environ.get("TELNYX_API_KEY"), # This is the default and can be omitted
)
response = client.calls.actions.gather_using_speak(
call_control_id="call_control_id",
payload="say this on call",
voice="male",
)
print(response.data)
package main
import (
"context"
"fmt"
"github.com/team-telnyx/telnyx-go"
"github.com/team-telnyx/telnyx-go/option"
)
func main() {
client := telnyx.NewClient(
option.WithAPIKey("My API Key"),
)
response, err := client.Calls.Actions.GatherUsingSpeak(
context.TODO(),
"call_control_id",
telnyx.CallActionGatherUsingSpeakParams{
Payload: "say this on call",
Voice: "male",
},
)
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", response.Data)
}
package com.telnyx.sdk.example;
import com.telnyx.sdk.client.TelnyxClient;
import com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;
import com.telnyx.sdk.models.calls.actions.ActionGatherUsingSpeakParams;
import com.telnyx.sdk.models.calls.actions.ActionGatherUsingSpeakResponse;
public final class Main {
private Main() {}
public static void main(String[] args) {
TelnyxClient client = TelnyxOkHttpClient.fromEnv();
ActionGatherUsingSpeakParams params = ActionGatherUsingSpeakParams.builder()
.callControlId("call_control_id")
.payload("say this on call")
.voice("male")
.build();
ActionGatherUsingSpeakResponse response = client.calls().actions().gatherUsingSpeak(params);
}
}
require "telnyx"
telnyx = Telnyx::Client.new(api_key: "My API Key")
response = telnyx.calls.actions.gather_using_speak("call_control_id", payload: "say this on call", voice: "male")
puts(response)
<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Telnyx\Client;
use Telnyx\Core\Exceptions\APIException;
$client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API Key');
try {
$response = $client->calls->actions->gatherUsingSpeak(
'call_control_id',
payload: 'say this on call',
voice: 'male',
clientState: 'aGF2ZSBhIG5pY2UgZGF5ID1d',
commandID: '891510ac-f3e4-11e8-af5b-de00688a4901',
interDigitTimeoutMillis: 10000,
invalidPayload: 'say this on call',
language: 'arb',
maximumDigits: 10,
maximumTries: 3,
minimumDigits: 1,
payloadType: 'text',
serviceLevel: 'premium',
terminatingDigit: '#',
timeoutMillis: 60000,
validDigits: '123',
voiceSettings: [
'type' => 'elevenlabs', 'apiKeyRef' => 'my_elevenlabs_api_key'
],
);
var_dump($response);
} catch (APIException $e) {
echo $e->getMessage();
}
telnyx calls:actions gather-using-speak \
--api-key 'My API Key' \
--call-control-id call_control_id \
--payload 'say this on call' \
--voice male
{"docsConfig":{"theme":"sequoia","$schema":"https://mintlify.com/docs.json","name":"Telnyx","description":"Infrastructure for real-time agents. Voice, AI, Edge Compute","colors":{"primary":"#00B688","light":"#00B688","dark":"#00B688"},"logo":{"light":"https://mintcdn.com/telnyx/v2FpkbJg6PQ53qHU/assets/images/site/logo.svg?fit=max\u0026auto=format\u0026n=v2FpkbJg6PQ53qHU\u0026q=85\u0026s=5ee3f61d11ba90a197dd9a1e3499fab6","dark":"https://mintcdn.com/telnyx/v2FpkbJg6PQ53qHU/assets/images/site/logo-dark.svg?fit=max\u0026auto=format\u0026n=v2FpkbJg6PQ53qHU\u0026q=85\u0026s=d65aaa12ec708c79e5833cbdea958055"},"favicon":"https://mintcdn.com/telnyx/t-qaBUa_gCxdRz_m/favicon.ico?fit=max\u0026auto=format\u0026n=t-qaBUa_gCxdRz_m\u0026q=85\u0026s=8291283238ab8c0e2a7a985e69f38c2f","background":{"decoration":"gradient"},"navbar":{"links":[{"icon":"triangle-exclamation","href":"/docs/development/api-fundamentals/api-errors","label":"Error codes"},{"icon":"headset","href":"https://telnyx.com/contact-us","label":"Contact us"},{"icon":"user","href":"https://portal.telnyx.com/#/login/sign-in","label":"Login"}],"primary":{"type":"button","label":"Sign Up","href":"https://telnyx.com/sign-up"}},"footer":{"socials":{"github":"https://github.com/team-telnyx","linkedin":"https://www.linkedin.com/company/telnyx","slack":"https://joinslack.telnyx.com","x":"https://x.com/telnyx"},"links":[{"header":"Resources","items":[{"label":"Pricing","href":"https://developers.telnyx.com/internal/pages/pricing"},{"label":"Compare Telnyx","href":"https://developers.telnyx.com/internal/pages/compare"},{"label":"Support center","href":"https://support.telnyx.com/en"},{"label":"SETI","href":"https://seti.telnyx.com"},{"label":"Agent platform configs","href":"https://github.com/team-telnyx/ai"},{"label":"About Telnyx","href":"https://developers.telnyx.com/internal/pages/about"},{"label":"Service status","href":"https://status.telnyx.com"}]},{"header":"Updates","items":[{"label":"Release notes","href":"https://telnyx.com/release-notes"}]},{"header":"Community","items":[{"label":"Low Latency Club","href":"https://lowlatencyclub.ai/"}]},{"header":"Legal","items":[{"label":"Privacy policy","href":"https://telnyx.com/privacy-policy"},{"label":"Terms and conditions","href":"https://telnyx.com/terms-and-conditions"}]}]},"seo":{"metatags":{"og:description":"Infrastructure for real-time agents. Voice, AI, Edge Compute","description":"Infrastructure for real-time agents. Voice, AI, Edge Compute"},"organization":{"name":"Telnyx","url":"https://telnyx.com","logo":"https://telnyx.com/favicon.ico","sameAs":["https://x.com/telnyx","https://www.linkedin.com/company/telnyx/","https://github.com/team-telnyx"]}},"fonts":{"heading":{"family":"PP Formula","weight":800,"source":"assets/fonts/PPFormula-Extrabold.woff2","format":"woff2"},"body":{"family":"Inter","weight":400,"source":"assets/fonts/Inter-Regular.woff2","format":"woff2"}},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"gtm":{"tagId":"GTM-NRRX236"}},"banner":{"content":"Check out our upcoming events and meetups! [View events →](https://lowlatencyclub.ai/)","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Home","icon":"house","href":"/docs/overview"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"telnyx","hasAudioNarration":false,"actualSubdomain":"telnyx","customDomains":["developers.telnyx.com"],"gitSource":{"type":"github","owner":"team-telnyx","repo":"developer-docs-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aef10fbbe4829dd4e3b2ca6","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"API Reference","count":601},{"language":"default","tag":"Calling","count":592},{"language":"default","tag":"Other APIs","count":406},{"language":"default","tag":"AI","count":395},{"language":"default","tag":"Messaging","count":353},{"language":"default","tag":"Numbers","count":287},{"language":"default","tag":"Agent Platform","count":282},{"language":"default","tag":"Assistants","count":202},{"language":"default","tag":"Voice API","count":178},{"language":"default","tag":"SMS \u0026 MMS","count":149}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"[class*=\"sidebar\"] [class*=\"tag\"],[class*=\"sidebar\"] [class*=\"badge\"],nav [class*=\"tag\"],nav [class*=\"badge\"]{font-size:0.8rem!important}#ot-sdk-btn-floating{left:auto!important;right:10px!important}body:has([aria-label=\"Preview Widget\"]) #ot-sdk-btn-floating{bottom:88px!important}#navbar .nav-tabs-item:has(>div>svg[style*=\"/book-open.svg\"]){display:none}.nav-tabs a.nav-tabs-item:not([aria-current=\"location\"]){display:none}#navbar div:has(>div>.nav-tabs>a.nav-tabs-item:first-child:last-child){display:none}@media (width >= 64rem){.txd-side{display:block}button[data-component-part=\"products-selector-trigger\"],button.tx-product-switcher{display:none!important}}#mobile-nav [data-component-part=\"products-selector-trigger\"],#mobile-nav #navigation-items>div:has(>div>button[aria-haspopup=\"menu\"]),#mobile-nav.tx-has-directory #navigation-items{display:none!important}#mobile-nav .tx-mobile-directory{padding:0;margin-bottom:1.5rem}#mobile-nav .tx-mobile-directory a,#mobile-nav .tx-mobile-directory .tx-dir-suite-head{min-height:2.75rem}#mobile-nav .tx-mobile-directory :is(a,.tx-dir-suite-head):focus-visible{outline:2px solid currentColor;outline-offset:-2px}.txd-shell{display:flex;gap:0;max-width:none;margin:0;padding:3rem 2rem 6rem 0}.txd-side{width:18rem;flex-shrink:0}.txd-main{flex:1;min-width:0;max-width:56rem;margin-left:11.75rem}@media (max-width: 80rem){.txd-main{margin-left:4rem}}@media (width \u003c 64rem){.txd-shell{display:block;padding:2rem 1.5rem 5rem}.txd-side{display:none}.txd-main{margin-left:0}}:is(#tx-directory,.tx-mobile-directory){margin:0 0 0.5rem;padding:0 0.5rem 0 1rem}:is(#tx-directory,.tx-mobile-directory) .tx-dir-label{font-size:0.72rem;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;opacity:0.55;margin:0 0 0.4rem}:is(#tx-directory,.tx-mobile-directory) .tx-dir-label-gap{margin-top:1.5rem}:is(#tx-directory,.tx-mobile-directory) .tx-dir-link,:is(#tx-directory,.tx-mobile-directory) summary{display:flex;align-items:center;cursor:pointer;font-size:0.875rem;line-height:1.25rem;padding:0.35rem 0.5rem;border-radius:0.375rem;color:rgb(55 65 81);text-decoration:none}html.dark :is(#tx-directory,.tx-mobile-directory) .tx-dir-link,html.dark :is(#tx-directory,.tx-mobile-directory) summary{color:rgb(156 163 175)}:is(#tx-directory,.tx-mobile-directory) .tx-dir-link:hover,:is(#tx-directory,.tx-mobile-directory) summary:hover{color:rgb(17 24 39);background:rgb(0 0 0 / 0.04)}:is(#tx-directory,.tx-mobile-directory) .tx-dir-link[aria-current=\"page\"]{color:#00b688;background:transparent;box-shadow:none;font-weight:400;text-shadow:-0.2px 0 0 currentColor, 0.2px 0 0 currentColor}html.dark :is(#tx-directory,.tx-mobile-directory) .tx-dir-link:hover,html.dark :is(#tx-directory,.tx-mobile-directory) summary:hover{color:rgb(229 231 235);background:rgb(255 255 255 / 0.06)}html.dark :is(#tx-directory,.tx-mobile-directory) .tx-dir-link[aria-current=\"page\"]{color:#5eead4;background:transparent;box-shadow:none}:is(#tx-directory,.tx-mobile-directory) .tx-dir-soon,:is(#tx-directory,.tx-mobile-directory) .tx-dir-soon:hover,html.dark :is(#tx-directory,.tx-mobile-directory) .tx-dir-soon,html.dark :is(#tx-directory,.tx-mobile-directory) .tx-dir-soon:hover{cursor:default;opacity:0.45;background:transparent;color:inherit}:is(#tx-directory,.tx-mobile-directory) .tx-dir-soon sup{font-size:0.6rem;line-height:1;letter-spacing:0.05em;text-transform:uppercase;margin-left:0.4rem;vertical-align:super}:is(#tx-directory,.tx-mobile-directory) .tx-dir-suite{margin-bottom:0.15rem}:is(#tx-directory,.tx-mobile-directory) .tx-dir-suite-head{display:flex;align-items:center;cursor:pointer;user-select:none;font-size:0.875rem;line-height:1.25rem;font-weight:500;padding:0.35rem 0.5rem;border-radius:0.375rem;color:rgb(55 65 81)}html.dark :is(#tx-directory,.tx-mobile-directory) .tx-dir-suite-head{color:rgb(156 163 175)}:is(#tx-directory,.tx-mobile-directory) .tx-dir-suite-head:hover{color:rgb(17 24 39);background:rgb(0 0 0 / 0.04)}html.dark :is(#tx-directory,.tx-mobile-directory) .tx-dir-suite-head:hover{color:rgb(229 231 235);background:rgb(255 255 255 / 0.06)}:is(#tx-directory,.tx-mobile-directory) .tx-dir-suite-head::after{content:'';width:0.42rem;height:0.42rem;margin-left:auto;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform 0.15s;flex-shrink:0;opacity:0.7}:is(#tx-directory,.tx-mobile-directory) .tx-dir-suite.open>.tx-dir-suite-head::after{transform:rotate(45deg)}:is(#tx-directory,.tx-mobile-directory) .tx-dir-suite.open>.tx-dir-suite-head{color:rgb(17 24 39);background:rgb(0 0 0 / 0.04);font-weight:600}html.dark :is(#tx-directory,.tx-mobile-directory) .tx-dir-suite.open>.tx-dir-suite-head{color:rgb(229 231 235);background:rgb(255 255 255 / 0.06)}:is(#tx-directory,.tx-mobile-directory) .tx-dir-suite>ul{display:none}:is(#tx-directory,.tx-mobile-directory) .tx-dir-suite.open>ul{display:block}:is(#tx-directory,.tx-mobile-directory) ul{margin:0.15rem 0 0.5rem;padding:0}:is(#tx-directory,.tx-mobile-directory) li{list-style:none}:is(#tx-directory,.tx-mobile-directory) li a{display:flex;align-items:center;font-size:0.875rem;line-height:1.25rem;padding:0.3rem 0.5rem 0.3rem 1.6rem;border-radius:0.375rem;color:rgb(107 114 128);text-decoration:none}:is(#tx-directory,.tx-mobile-directory) .tx-dir-section-item{font-weight:500}html.dark :is(#tx-directory,.tx-mobile-directory) li a{color:rgb(156 163 175)}:is(#tx-directory,.tx-mobile-directory) li a:hover{color:rgb(17 24 39);background:rgb(0 0 0 / 0.04)}html.dark :is(#tx-directory,.tx-mobile-directory) li a:hover{color:rgb(229 231 235);background:rgb(255 255 255 / 0.06)}:is(#tx-directory,.tx-mobile-directory) .tx-dir-icon{display:inline-block;width:1rem;height:1rem;flex-shrink:0;margin-right:0.5rem;background-color:currentColor;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain}.txi-arrows-left-right-to-line{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/arrows-left-right-to-line.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/arrows-left-right-to-line.svg\")}.txi-bolt{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/bolt.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/bolt.svg\")}.txi-brain{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/brain.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/brain.svg\")}.txi-brain-circuit{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/brain-circuit.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/brain-circuit.svg\")}.txi-brands-whatsapp{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/whatsapp.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/brands/whatsapp.svg\")}.txi-broadcast-tower{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/broadcast-tower.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/broadcast-tower.svg\")}.txi-browser{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/browser.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/browser.svg\")}.txi-circle-nodes{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/circle-nodes.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/circle-nodes.svg\")}.txi-clone{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/clone.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/clone.svg\")}.txi-cloud{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/cloud.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/cloud.svg\")}.txi-code{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/code.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/code.svg\")}.txi-comment-sms{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/comment-sms.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/comment-sms.svg\")}.txi-cubes{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/cubes.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/cubes.svg\")}.txi-database{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/database.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/database.svg\")}.txi-door-open{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/door-open.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/door-open.svg\")}.txi-envelope{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/envelope.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/envelope.svg\")}.txi-eye{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/eye.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/eye.svg\")}.txi-file-certificate{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/file-certificate.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/file-certificate.svg\")}.txi-fingerprint{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/fingerprint.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/fingerprint.svg\")}.txi-folder-tree{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/folder-tree.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/folder-tree.svg\")}.txi-globe{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/globe.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/globe.svg\")}.txi-hard-drive{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/hard-drive.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/hard-drive.svg\")}.txi-hashtag{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/hashtag.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/hashtag.svg\")}.txi-headset{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/headset.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/headset.svg\")}.txi-key{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/key.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/key.svg\")}.txi-layer-group{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/layer-group.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/layer-group.svg\")}.txi-magnifying-glass{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/magnifying-glass.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/magnifying-glass.svg\")}.txi-message{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/message.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/message.svg\")}.txi-message-dots{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/message-dots.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/message-dots.svg\")}.txi-microchip-ai{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/microchip-ai.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/microchip-ai.svg\")}.txi-microphone{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/microphone.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/microphone.svg\")}.txi-network-wired{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/network-wired.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/network-wired.svg\")}.txi-phone{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/phone.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/phone.svg\")}.txi-phone-volume{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/phone-volume.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/phone-volume.svg\")}.txi-plug{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/plug.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/plug.svg\")}.txi-right-left{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/right-left.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/right-left.svg\")}.txi-robot{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/robot.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/robot.svg\")}.txi-server{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/server.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/server.svg\")}.txi-share-nodes{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/share-nodes.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/share-nodes.svg\")}.txi-shield{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/shield.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/shield.svg\")}.txi-shield-check{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/shield-check.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/shield-check.svg\")}.txi-signal{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/signal.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/signal.svg\")}.txi-sim-card{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/sim-card.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/sim-card.svg\")}.txi-split{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/split.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/split.svg\")}.txi-table{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/table.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/table.svg\")}.txi-tower-control{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/tower-control.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/tower-control.svg\")}.txi-train-tunnel{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/train-tunnel.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/train-tunnel.svg\")}.txi-video{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/video.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/video.svg\")}.txi-wand-magic-sparkles{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/wand-magic-sparkles.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/wand-magic-sparkles.svg\")}.txi-waveform{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/waveform.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/waveform.svg\")}.txi-waveform-lines{-webkit-mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/waveform-lines.svg\");mask-image:url(\"https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/regular/waveform-lines.svg\")}.txd-main .txd-h1{font-family:var(--font-family-headings-custom, \"PP Formula\"), -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;font-size:2.1rem;font-weight:500;letter-spacing:-0.01em;margin:1.2rem 0 0.4rem;color:rgb(22 28 26)}html.dark .txd-main .txd-h1{color:rgb(229 231 235)}.txd-main .txd-lead{font-size:1.3rem;line-height:1.55;font-weight:500;margin:0.9rem 0 1.3rem;color:rgb(31 41 55)}html.dark .txd-main .txd-lead{color:rgb(209 213 219)}.txd-main .txd-h2{font-family:var(--font-family-headings-custom, \"PP Formula\"), -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;font-size:1.45rem;font-weight:500;margin:2.4rem 0 0.4rem;color:rgb(22 28 26)}html.dark .txd-main .txd-h2{color:rgb(229 231 235)}.txd-main .txd-section-h{font-size:1.05rem;font-weight:600;margin:1.8rem 0 0.2rem;opacity:0.85}.txd-main .txd-p{margin:0.7rem 0 1rem;line-height:1.65;color:rgb(75 85 99)}html.dark .txd-main .txd-p{color:rgb(156 163 175)}.txd-main .txd-p a{text-decoration:underline}.txd-main .txd-h1{max-width:46rem;line-height:1.12}.txd-main .txd-hero-copy{max-width:45rem}.txd-main .txd-follow-up{margin-top:1rem}.txd-main .txd-follow-up a{color:#00b688;font-weight:600;text-decoration:none}.txd-main .txd-follow-up a:hover{text-decoration:underline}.txd-main a:focus-visible{outline:2px solid #00b688;outline-offset:3px}@media (max-width: 48rem){.txd-main .txd-h1{font-size:1.9rem}}@media (min-width: 64.01rem) and (max-width: 90rem){.txd-main{margin-right:4rem}}.rm-explorer{--rm-border: rgb(15 23 42 / 14%);--rm-muted: #5f6b68;--rm-soft: #f6f8f7}.dark .rm-explorer{--rm-border: rgb(255 255 255 / 14%);--rm-muted: #a2aaa8;--rm-soft: #151a19}#resource-map-toolbar{position:sticky;top:5rem;z-index:20;margin:1.25rem 0 1.75rem;padding:.75rem 0;background:var(--rm-surface, #fff);border-bottom:1px solid var(--rm-border)}.dark #resource-map-toolbar{background:#0b0e0d}.rm-controls{display:grid;grid-template-columns:minmax(15rem, 1fr) minmax(10rem, auto) auto;gap:.625rem;align-items:center}.rm-search{position:relative;min-width:0}.rm-search svg{position:absolute;top:50%;left:.75rem;width:1rem;height:1rem;color:var(--rm-muted);fill:none;stroke:currentColor;stroke-width:1.8;transform:translateY(-50%);pointer-events:none}.rm-search input,.rm-area-select,.rm-collapse,.rm-clear,.rm-empty button{min-height:2.5rem;color:inherit;background:transparent;border:1px solid var(--rm-border);border-radius:.5rem;font:inherit;font-size:.875rem}.rm-search input{width:100%;padding:.58rem 2.6rem .58rem 2.35rem}.rm-search input::placeholder{color:var(--rm-muted);opacity:1}.rm-shortcut{position:absolute;top:50%;right:.65rem;display:grid;width:1.5rem;height:1.5rem;place-items:center;color:var(--rm-muted);background:var(--rm-soft);border:1px solid var(--rm-border);border-radius:.35rem;font:inherit;font-size:.72rem;transform:translateY(-50%);pointer-events:none}.rm-area-wrap{position:relative;max-width:13rem}.rm-area-select{width:100%;max-width:13rem;padding:.55rem 2.25rem .55rem .75rem;appearance:none;cursor:pointer}.rm-area-caret{position:absolute;top:50%;right:.85rem;width:.45rem;height:.45rem;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-70%) rotate(45deg);pointer-events:none}.rm-collapse,.rm-clear,.rm-empty button{padding:.5rem .75rem;font-weight:650;cursor:pointer}.rm-search input:focus-visible,.rm-area-select:focus-visible,.rm-collapse:focus-visible,.rm-clear:focus-visible,.rm-empty button:focus-visible{outline:2px solid #00b688;outline-offset:2px;border-color:#00b688;box-shadow:none!important}.rm-collapse:hover,.rm-clear:hover,.rm-empty button:hover{color:#08785d;background:var(--rm-soft)}.dark .rm-collapse:hover,.dark .rm-clear:hover,.dark .rm-empty button:hover{color:#5eead4}.rm-meta{display:flex;min-height:1.65rem;align-items:center;justify-content:space-between;gap:.75rem;padding:.45rem .15rem 0}.rm-status{color:var(--rm-muted);font-size:.78rem;line-height:1.35}.rm-clear{min-height:1.8rem;padding:.2rem .55rem;border-color:transparent;font-size:.78rem}.rm-empty{display:grid;justify-items:start;gap:.35rem;margin:-.5rem 0 1.75rem;padding:1.1rem 1.2rem;color:var(--rm-muted);background:var(--rm-soft);border:1px solid var(--rm-border);border-radius:.75rem;font-size:.875rem}.rm-empty strong{color:inherit;font-size:.95rem}.rm-empty button{min-height:2.2rem;margin-top:.35rem}.rm-resource-list{display:block!important;margin:0 0 .75rem!important;border-color:var(--rm-border)!important;border-top:0!important;border-radius:0 0 .75rem .75rem!important}.rm-resource-list>details.accordion{margin:0!important;border:0!important;border-radius:0!important}.rm-resource-list>details.accordion+details.accordion{border-top:1px solid var(--rm-border)!important}.rm-resource-list>details.accordion>summary{min-height:3rem;padding:.7rem .9rem!important;border-radius:0!important}.rm-resource-list>details.accordion:first-child>summary{border-radius:0!important}.rm-resource-list>details.accordion:last-child:not([open])>summary{border-radius:0 0 .75rem .75rem!important}.rm-resource-list [data-component-part=\"accordion-title\"]{display:flex;min-width:0;align-items:baseline;justify-content:space-between;gap:1rem}.rm-resource-name{min-width:0;overflow-wrap:anywhere;font-weight:650}.rm-method-count{flex:0 0 auto;color:var(--rm-muted);font-size:.75rem;font-weight:500;white-space:nowrap}.rm-resource-list details[open]>summary{background:var(--rm-soft)}.rm-resource-list details[open] [data-component-part=\"accordion-content\"]{margin-right:1rem;margin-left:1rem}.rm-resource-list tbody tr.rm-row-match{background:rgb(0 182 136 / 8%)}.rm-resource-list td:first-child code{white-space:nowrap}.rm-resource-list tbody tr[hidden],.rm-explorer h2[hidden],.rm-resource-list[hidden],.rm-empty[hidden],.rm-collapse[hidden],.rm-clear[hidden]{display:none!important}.rm-explorer h2{position:relative;min-height:3rem;margin:.45rem 0 0!important;scroll-margin-top:10rem;border:1px solid var(--rm-border);border-radius:.75rem}.rm-explorer h2.rm-section-open{border-radius:.75rem .75rem 0 0}.rm-section-toggle{display:grid;width:100%;min-height:3rem;grid-template-columns:minmax(0, 1fr) auto auto;align-items:center;gap:.75rem;padding:.6rem .9rem;color:inherit;text-align:left;background:transparent;border:0;cursor:pointer}.rm-section-toggle:hover,.rm-section-toggle:focus-visible{background:var(--rm-soft)}.rm-section-toggle:focus-visible{outline:2px solid #00b688;outline-offset:2px;border-radius:.7rem}.rm-section-name{font-size:1rem;font-weight:700}.rm-section-count{display:grid;min-width:1.65rem;min-height:1.4rem;place-items:center;padding:3px 6px;color:#08785d;background:rgb(0 182 136 / 10%);border-radius:.35rem;font-size:12px;font-weight:700;line-height:16px;white-space:nowrap}.dark .rm-section-count{color:#5eead4;background:#12302b}.rm-section-caret{width:.5rem;height:.5rem;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-.15rem)}.rm-section-toggle[aria-expanded=\"true\"] .rm-section-caret{transform:rotate(225deg) translate(-.1rem, -.05rem)}@media (max-width: 767px){#resource-map-toolbar{position:static;top:auto;z-index:auto;margin-top:1rem;padding-top:.6rem}.rm-controls{grid-template-columns:minmax(0, 1fr) auto}.rm-search{grid-column:1 / -1}.rm-search input{padding-right:.75rem}.rm-shortcut{display:none}.rm-area-wrap,.rm-area-select{width:100%;max-width:none}.rm-resource-list [data-component-part=\"accordion-title\"]{gap:.65rem}.rm-method-count{font-size:.7rem}.rm-resource-list table,.rm-resource-list tbody{display:block;width:100%;min-width:0!important}.rm-resource-list thead{display:none}.rm-resource-list tbody tr{display:grid;width:100%;grid-template-columns:minmax(0, 1fr);gap:.45rem;padding:.75rem 0}.rm-resource-list tbody tr+tr{border-top:1px solid var(--rm-border)}.rm-resource-list tbody td{display:grid;width:100%;min-width:0!important;grid-template-columns:4.5rem minmax(0, 1fr);align-items:start;gap:.5rem;padding:0!important;border:0!important}.rm-resource-list tbody td::before{color:var(--rm-muted);font-size:.68rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.rm-resource-list tbody td:first-child::before{content:\"Method\"}.rm-resource-list tbody td:last-child::before{content:\"Endpoint\"}.rm-resource-list tbody td code,.rm-resource-list tbody td a{min-width:0;white-space:normal!important;overflow-wrap:anywhere}}@media (prefers-reduced-motion: reduce){.rm-explorer *,.rm-explorer *::before,.rm-explorer *::after{scroll-behavior:auto!important;transition-duration:.01ms!important}}.sdk-launchpad{--sdk-border: #d8e1de;--sdk-panel: #ffffff;margin:1rem 0 1.5rem;padding:1rem;overflow:hidden;color:inherit;background:var(--sdk-panel);border:1px solid var(--sdk-border);border-radius:12px}.dark .sdk-launchpad{--sdk-border: #293431;--sdk-panel: #101513}.sdk-launchpad-kicker{margin:0 0 .25rem!important;color:#08785d;font-size:.68rem;font-weight:800;letter-spacing:.1em}.dark .sdk-launchpad-kicker{color:#5eead4}.sdk-launchpad>h2{margin-top:.25rem}.sdk-launchpad [role=\"tablist\"]{display:flex;flex-wrap:wrap;gap:.25rem}.sdk-launchpad [role=\"tab\"]{min-width:56px;min-height:44px}.sdk-launchpad [role=\"tab\"][aria-selected=\"true\"]{color:#08785d!important}.dark .sdk-launchpad [role=\"tab\"][aria-selected=\"true\"]{color:#5eead4!important}.sdk-launchpad [role=\"tab\"]:focus-visible,.sdk-launchpad a:focus-visible,.sdk-launchpad-code:focus-visible{outline:2px solid #08785d;outline-offset:2px}.dark .sdk-launchpad [role=\"tab\"]:focus-visible,.dark .sdk-launchpad a:focus-visible,.dark .sdk-launchpad-code:focus-visible{outline-color:#5eead4}.sdk-launchpad-code{max-width:100%;overflow-x:auto;border-radius:.5rem}.sdk-launchpad-code pre{max-width:none;overflow-x:visible!important}.sdk-launchpad-code button{min-width:44px;min-height:44px}#content-area:has(#sdk-launchpad) .chat-assistant-floating-input{display:none}@media (max-width: 640px){.sdk-launchpad{margin-top:.75rem;padding:.75rem}.sdk-launchpad-kicker{display:none}.sdk-launchpad [role=\"tablist\"]{display:grid;grid-template-columns:repeat(6, minmax(0, 1fr));gap:.2rem;overflow:visible}.sdk-launchpad [role=\"tab\"]{min-width:0;min-height:44px;padding-inline:.2rem;font-size:.75rem;line-height:1.15;white-space:nowrap}}.sdk-directory li{margin-block:.5rem}.mdx-content table td{min-width:0!important}.mdx-content table td :is(code,a){overflow-wrap:anywhere}.mdx-content table :is(th,td):first-child code{white-space:nowrap;word-break:normal;overflow-wrap:normal}@media (min-width: 768px){.tx-table-grid table{table-layout:fixed}.tx-table-grid table :is(th,td):first-child{width:40%}}@media (min-width: 768px){.tx-table-grid-3 table{table-layout:fixed}.tx-table-grid-3 table :is(th,td):first-child{width:22%}.tx-table-grid-3 table :is(th,td):last-child{width:18%}}.tx-retirement-banner{margin-bottom:1.5rem}.tx-retirement-banner>div{margin:0}@media (min-width: 1024px){.tx-retirement-banner{position:sticky;top:calc(6rem + var(--banner-height, 0px));z-index:20;padding-top:.5rem;background:rgb(var(--background-light, 255 255 255))}.dark .tx-retirement-banner{background:rgb(var(--background-dark, 9 12 14))}}#content>.callout:first-child{margin-top:0}#content strong{font-weight:600}"}],"page":{"pagePath":"api-reference/call-commands/gather-using-speak","slug":"/api-reference/call-commands/gather-using-speak","pageMetadata":{"title":"Gather using speak","description":"Convert text to speech and play it on the call until the required DTMF signals are gathered to build interactive menus.\n\nYou can pass a list of valid digits along with an 'invalid_payload', which will be played back at the beginning of each prompt. Speech will be interrupted when a DTMF signal is received. The `Answer` command must be issued before the `gather_using_speak` command.\n\n**Expected Webhooks:**\n\n- `call.dtmf.received` (you may receive many of these webhooks)\n- `call.gather.ended`\n","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/gather_using_speak","href":"/api-reference/call-commands/gather-using-speak","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Convert text to speech and play it on the call until the required DTMF signals are gathered to build interactive menus.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"You can pass a list of valid digits along with an ‘invalid_payload’, which will be played back at the beginning of each prompt. Speech will be interrupted when a DTMF signal is received. The \", _jsx(_components.code, {\n children: \"Answer\"\n }), \" command must be issued before the \", _jsx(_components.code, {\n children: \"gather_using_speak\"\n }), \" command.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsx(_components.strong, {\n children: \"Expected Webhooks:\"\n })\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"call.dtmf.received\"\n }), \" (you may receive many of these webhooks)\"]\n }), \"\\n\", _jsx(_components.li, {\n children: _jsx(_components.code, {\n children: \"call.gather.ended\"\n })\n }), \"\\n\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Gather using speak","description":"Convert text to speech and play it on the call until the required DTMF signals are gathered to build interactive menus.\n\nYou can pass a list of valid digits along with an 'invalid_payload', which will be played back at the beginning of each prompt. Speech will be interrupted when a DTMF signal is received. The `Answer` command must be issued before the `gather_using_speak` command.\n\n**Expected Webhooks:**\n\n- `call.dtmf.received` (you may receive many of these webhooks)\n- `call.gather.ended`\n","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/gather_using_speak","href":"/api-reference/call-commands/gather-using-speak","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/telnyx/a2dd5aaa2ff5831a/reading-progress.js","/_mintlify/custom/telnyx/7b77ce9cedb163fd/webmcp-init.js","/_mintlify/custom/telnyx/7fbfee588ac7ad38/structured-data.js","/_mintlify/custom/telnyx/41d9633b1a2dd405/scripts/tests/generate-llms-txt.test.js","/_mintlify/custom/telnyx/8851ad5fd6e9b5c7/scripts/tests/direct-source-workflows.test.js","/_mintlify/custom/telnyx/1cd11353bb65f5a7/scripts/tests/redirects.test.js","/_mintlify/custom/telnyx/f981035eb45fcbdb/scripts/tests/generate-error-catalog.test.js","/_mintlify/custom/telnyx/132bc205f55282a5/scripts/tests/sync-llms-automerge.test.js","/_mintlify/custom/telnyx/05e787f15f45952b/scripts/tests/webhook-catalog-lifecycle.test.js","/_mintlify/custom/telnyx/01b840b27496e6c8/scripts/tests/repository-structure.test.js","/_mintlify/custom/telnyx/5ebc7d6e18012563/scripts/tests/legacy-content-usage.test.js","/_mintlify/custom/telnyx/ac1f21e68bf4050a/scripts/docs/check-llms-links.js","/_mintlify/custom/telnyx/5f7d2f1ae375b9ad/scripts/docs/check-llms-native-routes.js","/_mintlify/custom/telnyx/b8d13287c2dcc5b9/scripts/docs/fetch-coverage.js","/_mintlify/custom/telnyx/e0a29f76f2645359/scripts/docs/generate-error-catalog.js","/_mintlify/custom/telnyx/9ffa8f6166445a46/scripts/docs/generate-llms-txt.js","/_mintlify/custom/telnyx/f1f111fe784c3ede/scripts/docs/update-tts-voices.js","/_mintlify/custom/telnyx/c48ad0189f7f1c57/scripts/docs/build-sdk-doc-pages.js","/_mintlify/custom/telnyx/f840117777d76f9e/scripts/tests/sdk-doc-pages.test.js","/_mintlify/custom/telnyx/414c53c50b0e1968/resource-map-filter.js","/_mintlify/custom/telnyx/80af622b3010a712/scripts/tests/sdk-language-switcher.test.js","/_mintlify/custom/telnyx/52fa0fbcb966f8b6/sdk-language-switcher.js","/_mintlify/custom/telnyx/660ec334a362cf1c/home-directory.js","/_mintlify/custom/telnyx/33d3f1dbdec08735/scripts/generate-home-directory.js","/_mintlify/custom/telnyx/137e3eb8e1d1d85a/scripts/tests/api-fundamentals.test.js","/_mintlify/custom/telnyx/24a8eed3a5010d4c/scripts/tests/agent-sdk-workflow.test.js","/_mintlify/custom/telnyx/abc2169efcd5115c/scripts/tests/homepage-overview.test.js","/_mintlify/custom/telnyx/8edf49ac62deef02/scripts/tests/batch-detail-records-navigation.test.js","/_mintlify/custom/telnyx/e005178572336f01/scripts/tests/api-discoverability.test.js","/_mintlify/custom/telnyx/78cb83896fbea5cf/scripts/tests/home-directory.test.js","/_mintlify/custom/telnyx/11ae45253e6b7be6/scripts/tests/agent-readiness.test.js","/_mintlify/custom/telnyx/82396d5a75077c2a/scripts/tests/sample-workflow-regressions.test.js","/_mintlify/custom/telnyx/5f6625c0420c9328/scripts/tests/openapi-mintlify-parsing.test.js","/_mintlify/custom/telnyx/c7dca602ca9641ec/scripts/tests/llms-markdown-assets.test.js","/_mintlify/custom/telnyx/02d6acd7c86b79f9/scripts/tests/agent-browser-quickstart.test.js"],"openApiReferenceData":{"operation":{"summary":"Gather using speak","description":"Convert text to speech and play it on the call until the required DTMF signals are gathered to build interactive menus.\n\nYou can pass a list of valid digits along with an 'invalid_payload', which will be played back at the beginning of each prompt. Speech will be interrupted when a DTMF signal is received. The `Answer` command must be issued before the `gather_using_speak` command.\n\n**Expected Webhooks:**\n\n- `call.dtmf.received` (you may receive many of these webhooks)\n- `call.gather.ended`\n","operationId":"GatherUsingSpeak","tags":["Call Commands"],"parameters":["40efc539-e53e-46e5-9df1-2e7ffcf1ddb2"],"requestBody":"cbf03b72-ee85-43cd-8855-e4800d701756","responses":{"200":"c8b1e747-5bf2-464a-ae26-7c933a06a3cb","422":"c16c1f0d-4409-4c73-a23a-ddfa78cc8fe6","default":"acaa68a2-180b-477b-8ba9-68f0ac107681"},"x-codeSamples":[{"lang":"JavaScript","source":"import Telnyx from 'telnyx';\n\nconst client = new Telnyx({\n apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.calls.actions.gatherUsingSpeak('call_control_id', {\n payload: 'say this on call',\n voice: 'male',\n});\n\nconsole.log(response.data);"},{"lang":"Python","source":"import os\nfrom telnyx import Telnyx\n\nclient = Telnyx(\n api_key=os.environ.get(\"TELNYX_API_KEY\"), # This is the default and can be omitted\n)\nresponse = client.calls.actions.gather_using_speak(\n call_control_id=\"call_control_id\",\n payload=\"say this on call\",\n voice=\"male\",\n)\nprint(response.data)\n"},{"lang":"Go","source":"package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/team-telnyx/telnyx-go\"\n\t\"github.com/team-telnyx/telnyx-go/option\"\n)\n\nfunc main() {\n\tclient := telnyx.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tresponse, err := client.Calls.Actions.GatherUsingSpeak(\n\t\tcontext.TODO(),\n\t\t\"call_control_id\",\n\t\ttelnyx.CallActionGatherUsingSpeakParams{\n\t\t\tPayload: \"say this on call\",\n\t\t\tVoice: \"male\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response.Data)\n}\n"},{"lang":"Java","source":"package com.telnyx.sdk.example;\n\nimport com.telnyx.sdk.client.TelnyxClient;\nimport com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;\nimport com.telnyx.sdk.models.calls.actions.ActionGatherUsingSpeakParams;\nimport com.telnyx.sdk.models.calls.actions.ActionGatherUsingSpeakResponse;\n\npublic final class Main {\n private Main() {}\n\n public static void main(String[] args) {\n TelnyxClient client = TelnyxOkHttpClient.fromEnv();\n\n ActionGatherUsingSpeakParams params = ActionGatherUsingSpeakParams.builder()\n .callControlId(\"call_control_id\")\n .payload(\"say this on call\")\n .voice(\"male\")\n .build();\n ActionGatherUsingSpeakResponse response = client.calls().actions().gatherUsingSpeak(params);\n }\n}"},{"lang":"Ruby","source":"require \"telnyx\"\n\ntelnyx = Telnyx::Client.new(api_key: \"My API Key\")\n\nresponse = telnyx.calls.actions.gather_using_speak(\"call_control_id\", payload: \"say this on call\", voice: \"male\")\n\nputs(response)"},{"lang":"PHP","source":"\u003c?php\n\nrequire_once dirname(__DIR__) . '/vendor/autoload.php';\n\nuse Telnyx\\Client;\nuse Telnyx\\Core\\Exceptions\\APIException;\n\n$client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API Key');\n\ntry {\n $response = $client->calls->actions->gatherUsingSpeak(\n 'call_control_id',\n payload: 'say this on call',\n voice: 'male',\n clientState: 'aGF2ZSBhIG5pY2UgZGF5ID1d',\n commandID: '891510ac-f3e4-11e8-af5b-de00688a4901',\n interDigitTimeoutMillis: 10000,\n invalidPayload: 'say this on call',\n language: 'arb',\n maximumDigits: 10,\n maximumTries: 3,\n minimumDigits: 1,\n payloadType: 'text',\n serviceLevel: 'premium',\n terminatingDigit: '#',\n timeoutMillis: 60000,\n validDigits: '123',\n voiceSettings: [\n 'type' => 'elevenlabs', 'apiKeyRef' => 'my_elevenlabs_api_key'\n ],\n );\n\n var_dump($response);\n} catch (APIException $e) {\n echo $e->getMessage();\n}"},{"lang":"CLI","source":"telnyx calls:actions gather-using-speak \\\n --api-key 'My API Key' \\\n --call-control-id call_control_id \\\n --payload 'say this on call' \\\n --voice male"}],"method":"post","type":"path","servers":["0635ec9f-42f5-401e-98f7-c9c2b6ed8b0b"],"security":["bcc523b0-9e21-469e-85b8-03e709ed2323"],"path":"/calls/{call_control_id}/actions/gather_using_speak","baseUrlOptions":["https://api.telnyx.com/v2"],"title":"Gather using speak","codeSamples":[{"lang":"JavaScript","source":"import Telnyx from 'telnyx';\n\nconst client = new Telnyx({\n apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.calls.actions.gatherUsingSpeak('call_control_id', {\n payload: 'say this on call',\n voice: 'male',\n});\n\nconsole.log(response.data);"},{"lang":"Python","source":"import os\nfrom telnyx import Telnyx\n\nclient = Telnyx(\n api_key=os.environ.get(\"TELNYX_API_KEY\"), # This is the default and can be omitted\n)\nresponse = client.calls.actions.gather_using_speak(\n call_control_id=\"call_control_id\",\n payload=\"say this on call\",\n voice=\"male\",\n)\nprint(response.data)\n"},{"lang":"Go","source":"package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/team-telnyx/telnyx-go\"\n\t\"github.com/team-telnyx/telnyx-go/option\"\n)\n\nfunc main() {\n\tclient := telnyx.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tresponse, err := client.Calls.Actions.GatherUsingSpeak(\n\t\tcontext.TODO(),\n\t\t\"call_control_id\",\n\t\ttelnyx.CallActionGatherUsingSpeakParams{\n\t\t\tPayload: \"say this on call\",\n\t\t\tVoice: \"male\",\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", response.Data)\n}\n"},{"lang":"Java","source":"package com.telnyx.sdk.example;\n\nimport com.telnyx.sdk.client.TelnyxClient;\nimport com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;\nimport com.telnyx.sdk.models.calls.actions.ActionGatherUsingSpeakParams;\nimport com.telnyx.sdk.models.calls.actions.ActionGatherUsingSpeakResponse;\n\npublic final class Main {\n private Main() {}\n\n public static void main(String[] args) {\n TelnyxClient client = TelnyxOkHttpClient.fromEnv();\n\n ActionGatherUsingSpeakParams params = ActionGatherUsingSpeakParams.builder()\n .callControlId(\"call_control_id\")\n .payload(\"say this on call\")\n .voice(\"male\")\n .build();\n ActionGatherUsingSpeakResponse response = client.calls().actions().gatherUsingSpeak(params);\n }\n}"},{"lang":"Ruby","source":"require \"telnyx\"\n\ntelnyx = Telnyx::Client.new(api_key: \"My API Key\")\n\nresponse = telnyx.calls.actions.gather_using_speak(\"call_control_id\", payload: \"say this on call\", voice: \"male\")\n\nputs(response)"},{"lang":"PHP","source":"\u003c?php\n\nrequire_once dirname(__DIR__) . '/vendor/autoload.php';\n\nuse Telnyx\\Client;\nuse Telnyx\\Core\\Exceptions\\APIException;\n\n$client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API Key');\n\ntry {\n $response = $client->calls->actions->gatherUsingSpeak(\n 'call_control_id',\n payload: 'say this on call',\n voice: 'male',\n clientState: 'aGF2ZSBhIG5pY2UgZGF5ID1d',\n commandID: '891510ac-f3e4-11e8-af5b-de00688a4901',\n interDigitTimeoutMillis: 10000,\n invalidPayload: 'say this on call',\n language: 'arb',\n maximumDigits: 10,\n maximumTries: 3,\n minimumDigits: 1,\n payloadType: 'text',\n serviceLevel: 'premium',\n terminatingDigit: '#',\n timeoutMillis: 60000,\n validDigits: '123',\n voiceSettings: [\n 'type' => 'elevenlabs', 'apiKeyRef' => 'my_elevenlabs_api_key'\n ],\n );\n\n var_dump($response);\n} catch (APIException $e) {\n echo $e->getMessage();\n}"},{"lang":"CLI","source":"telnyx calls:actions gather-using-speak \\\n --api-key 'My API Key' \\\n --call-control-id call_control_id \\\n --payload 'say this on call' \\\n --voice male"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"40efc539-e53e-46e5-9df1-2e7ffcf1ddb2":{"name":"call_control_id","description":"Unique identifier and token for controlling the call","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"Unique identifier and token for controlling the call","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"description":"Gather using speak request","required":true,"content":{"application/json":{"schema":{"type":"object","title":"Gather Using Speak Request","required":["voice","payload"],"properties":{"payload":{"description":"The text or SSML to be converted into speech. There is a 3,000 character limit.","type":"string","example":"Say this on the call","isRequired":true,"uniqueKey":"payload","typeLabel":"string"},"voice":{"description":"Specifies the voice used in speech synthesis.\n\n- Define voices using the format `\u003cProvider>.\u003cModel>.\u003cVoiceId>`. Specifying only the provider will give default values for voice_id and model_id.\n\n **Supported Providers:**\n- **AWS:** Use `AWS.Polly.\u003cVoiceId>` (e.g., `AWS.Polly.Joanna`). For neural voices, which provide more realistic, human-like speech, append `-Neural` to the `VoiceId` (e.g., `AWS.Polly.Joanna-Neural`). Check the [available voices](https://docs.aws.amazon.com/polly/latest/dg/available-voices.html) for compatibility.\n- **Azure:** Use `Azure.\u003cVoiceId>` (e.g., `Azure.en-CA-ClaraNeural`, `Azure.en-US-BrianMultilingualNeural`, `Azure.en-US-Ava:DragonHDLatestNeural`). For a complete list of voices, go to [Azure Voice Gallery](https://speech.microsoft.com/portal/voicegallery). Use `voice_settings` to configure custom deployments, regions, or API keys.\n- **ElevenLabs:** Use `ElevenLabs.\u003cModelId>.\u003cVoiceId>` (e.g., `ElevenLabs.eleven_multilingual_v2.21m00Tcm4TlvDq8ikWAM`). The `ModelId` part is optional. To use ElevenLabs, you must provide your ElevenLabs API key as an integration identifier secret in `\"voice_settings\": {\"api_key_ref\": \"\u003csecret_identifier>\"}`. See [integration secrets documentation](https://developers.telnyx.com/api/secrets-manager/integration-secrets/create-integration-secret) for details. Check [available voices](https://elevenlabs.io/docs/api-reference/get-voices).\n- **Telnyx:** Use `Telnyx.\u003cmodel_id>.\u003cvoice_id>` (e.g., `Telnyx.KokoroTTS.af`). Use `voice_settings` to configure voice_speed and other synthesis parameters. `Bayan` provides Arabic (multiple dialects) and English voices (e.g., `Telnyx.Bayan.Ahmed`, `Telnyx.Bayan.Amanda`). `Sukhan` provides Urdu voices (e.g., `Telnyx.Sukhan.urdu-professor`); `voice_speed` is not supported.\n- **Minimax:** Use `Minimax.\u003cModelId>.\u003cVoiceId>` (e.g., `Minimax.speech-02-hd.Wise_Woman`). Supported models: `speech-02-turbo`, `speech-02-hd`, `speech-2.6-turbo`, `speech-2.8-turbo`. Use `voice_settings` to configure speed, volume, pitch, and language_boost.\n- **Resemble:** Use `Resemble.\u003cModelId>.\u003cVoiceId>` (e.g., `Resemble.Turbo.Aaron_en-US`). Supported models: `Pro`, `Turbo`, `Urdu`. `\u003cVoiceId>` is a stock voice name or the ID of a Resemble voice clone. Use `voice_settings` to configure precision, sample_rate, and format.\n- **Inworld:** Use `Inworld.\u003cModelId>.\u003cVoiceId>` (e.g., `Inworld.Mini.Loretta`, `Inworld.Max.Oliver`, `Inworld.TTS2.Loretta`). Supported models: `Mini`, `Max`, `TTS2`. Use `voice_settings` to configure `delivery_mode` (`STABLE`, `BALANCED`, `CREATIVE`), supported by `TTS2` only.\n- **Fish Audio:** Use `FishAudio.\u003cModelId>.\u003cVoiceId>` (e.g., `FishAudio.s2.1-pro.\u003creference_id>`). Supported models: `s2.1-pro`, `s2-pro`, `s1`. `VoiceId` is a Fish Voice-Library reference ID.\n- **Soniox:** Use `Soniox.\u003cModelId>.\u003cVoiceId>` (e.g., `Soniox.tts-rt-v2.Emma`). Supported model: `tts-rt-v2`. Browse the catalog via the [Voices API](https://developers.telnyx.com/api-reference/text-to-speech-commands/list-available-voices). Every voice speaks all supported languages; set `language` to the two-letter ISO 639-1 code of the text, for example `it`. SSML is not supported. Use `voice_settings` to configure `speed` (0.7 to 1.3) and `reduce_silence`.\n- **xAI:** Use `xAI.\u003cVoiceId>` (e.g., `xAI.eve`). Available voices: `eve`, `ara`, `rex`, `sal`, `leo`.\n- **Humain:** Use `Humain.\u003cVoiceId>` (e.g., `Humain.sara-ar`). Available voices: `sara-en`, `abdulaziz-en`, `sara-ar`, `abdulaziz-ar`, `nourah-ar`, `abdullah-ar`. Native Arabic (Saudi dialect) and English voices only — no `ModelId` segment.\n\nFor service_level basic, you may define the gender of the speaker (male or female).","type":"string","example":"Telnyx.KokoroTTS.af","isRequired":true,"uniqueKey":"voice","typeLabel":"string"},"invalid_payload":{"description":"The text or SSML to be converted into speech when digits don't match the `valid_digits` parameter or the number of digits is not between `min` and `max`. There is a 3,000 character limit.","type":"string","example":"Say this on the call","uniqueKey":"invalid_payload","typeLabel":"string"},"payload_type":{"description":"The type of the provided payload. The payload can either be plain text, or Speech Synthesis Markup Language (SSML).","default":"text","type":"string","enum":["text","ssml"],"example":"ssml","uniqueKey":"payload_type","typeLabel":"enum\u003cstring>"},"service_level":{"description":"This parameter impacts speech quality, language options and payload types. When using `basic`, only the `en-US` language and payload type `text` are allowed.","default":"premium","type":"string","enum":["basic","premium"],"example":"premium","uniqueKey":"service_level","typeLabel":"enum\u003cstring>"},"voice_settings":{"oneOf":[{"type":"object","title":"ElevenLabs Voice Settings","description":"The settings associated with the voice selected","required":["type"],"properties":{"type":{"type":"string","enum":["elevenlabs"],"description":"Voice settings provider type","isRequired":true,"uniqueKey":"voice_settings.oneOf.0.type","typeLabel":"enum\u003cstring>"},"api_key_ref":{"description":"The `identifier` for an integration secret [/v2/integration_secrets](https://developers.telnyx.com/api/secrets-manager/integration-secrets/create-integration-secret) that refers to your ElevenLabs API key. Warning: Free plans are unlikely to work with this integration.","type":"string","example":"my_elevenlabs_api_key","uniqueKey":"voice_settings.oneOf.0.api_key_ref","typeLabel":"string"}},"uniqueKey":"voice_settings.oneOf.0","typeLabel":"ElevenLabs Voice Settings · object"},{"type":"object","title":"Telnyx Voice Settings","description":"The settings associated with the voice selected","required":["type"],"properties":{"type":{"type":"string","enum":["telnyx"],"description":"Voice settings provider type","isRequired":true,"uniqueKey":"voice_settings.oneOf.1.type","typeLabel":"enum\u003cstring>"},"voice_speed":{"description":"The voice speed to be used for the voice. Telnyx `Ultra` voices accept values from 0.6 to 1.5; values outside that range are rejected by the synthesis engine. `Qwen3TTS` and `KokoroTTS` accept the field but do not apply it. Default value is 1.0. Not supported for `Telnyx.Bayan.*` or `Telnyx.Sukhan.*` voices.","type":"number","default":1,"format":"float","example":1,"minimum":0.1,"maximum":2,"uniqueKey":"voice_settings.oneOf.1.voice_speed","typeLabel":"number\u003cfloat>"}},"uniqueKey":"voice_settings.oneOf.1","typeLabel":"Telnyx Voice Settings · object"},{"type":"object","title":"AWS Voice Settings","description":"The settings associated with the voice selected","required":["type"],"properties":{"type":{"type":"string","enum":["aws"],"description":"Voice settings provider type","isRequired":true,"uniqueKey":"voice_settings.oneOf.2.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"voice_settings.oneOf.2","typeLabel":"AWS Voice Settings · object"},{"type":"object","title":"Minimax Voice Settings","description":"The settings associated with the voice selected","required":["type"],"properties":{"type":{"type":"string","enum":["minimax"],"description":"Voice settings provider type","isRequired":true,"uniqueKey":"voice_settings.oneOf.3.type","typeLabel":"enum\u003cstring>"},"speed":{"description":"Speech speed multiplier. Default is 1.0.","type":"number","format":"float","example":1,"default":1,"uniqueKey":"voice_settings.oneOf.3.speed","typeLabel":"number\u003cfloat>"},"vol":{"description":"Speech volume multiplier. Default is 1.0.","type":"number","format":"float","example":1,"default":1,"uniqueKey":"voice_settings.oneOf.3.vol","typeLabel":"number\u003cfloat>"},"pitch":{"description":"Voice pitch adjustment. Default is 0.","type":"integer","example":0,"default":0,"uniqueKey":"voice_settings.oneOf.3.pitch","typeLabel":"integer"},"language_boost":{"oneOf":[{"type":"string","description":"Enhances recognition for specific languages and dialects during MiniMax TTS synthesis. Default is null (no boost). Set to 'auto' for automatic language detection.","enum":[null,"auto","Chinese","Chinese,Yue","English","Arabic","Russian","Spanish","French","Portuguese","German","Turkish","Dutch","Ukrainian","Vietnamese","Indonesian","Japanese","Italian","Korean","Thai","Polish","Romanian","Greek","Czech","Finnish","Hindi","Bulgarian","Danish","Hebrew","Malay","Persian","Slovak","Swedish","Croatian","Filipino","Hungarian","Norwegian","Slovenian","Catalan","Nynorsk","Tamil","Afrikaans"],"default":null,"uniqueKey":"voice_settings.oneOf.3.language_boost.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Enhances recognition for specific languages and dialects during MiniMax TTS synthesis. Default is null (no boost). Set to 'auto' for automatic language detection.","enum":[null,"auto","Chinese","Chinese,Yue","English","Arabic","Russian","Spanish","French","Portuguese","German","Turkish","Dutch","Ukrainian","Vietnamese","Indonesian","Japanese","Italian","Korean","Thai","Polish","Romanian","Greek","Czech","Finnish","Hindi","Bulgarian","Danish","Hebrew","Malay","Persian","Slovak","Swedish","Croatian","Filipino","Hungarian","Norwegian","Slovenian","Catalan","Nynorsk","Tamil","Afrikaans"],"default":null,"uniqueKey":"voice_settings.oneOf.3.language_boost.oneOf.1","typeLabel":"null"}],"uniqueKey":"voice_settings.oneOf.3.language_boost","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"voice_settings.oneOf.3","typeLabel":"Minimax Voice Settings · object"},{"type":"object","title":"Azure Voice Settings","description":"The settings associated with the voice selected","required":["type"],"properties":{"type":{"type":"string","enum":["azure"],"description":"Voice settings provider type","isRequired":true,"uniqueKey":"voice_settings.oneOf.4.type","typeLabel":"enum\u003cstring>"},"api_key_ref":{"description":"The `identifier` for an integration secret that refers to your Azure Speech API key.","type":"string","example":"my_azure_api_key","uniqueKey":"voice_settings.oneOf.4.api_key_ref","typeLabel":"string"},"region":{"description":"The Azure region for the Speech service (e.g., `eastus`, `westeurope`). Required when using a custom API key.","type":"string","example":"eastus","uniqueKey":"voice_settings.oneOf.4.region","typeLabel":"string"},"deployment_id":{"description":"The deployment ID for a custom Azure neural voice.","type":"string","example":"my-custom-voice-deployment","uniqueKey":"voice_settings.oneOf.4.deployment_id","typeLabel":"string"},"effect":{"description":"Audio effect to apply.","type":"string","enum":["eq_car","eq_telecomhp8k"],"uniqueKey":"voice_settings.oneOf.4.effect","typeLabel":"enum\u003cstring>"},"gender":{"description":"Voice gender filter.","type":"string","enum":["Male","Female"],"uniqueKey":"voice_settings.oneOf.4.gender","typeLabel":"enum\u003cstring>"}},"uniqueKey":"voice_settings.oneOf.4","typeLabel":"Azure Voice Settings · object"},{"type":"object","title":"Resemble Voice Settings","description":"The settings associated with the voice selected","required":["type"],"properties":{"type":{"type":"string","enum":["resemble"],"description":"Voice settings provider type","isRequired":true,"uniqueKey":"voice_settings.oneOf.5.type","typeLabel":"enum\u003cstring>"},"precision":{"description":"Audio precision format.","type":"string","enum":["PCM_16","PCM_24","PCM_32","MULAW"],"default":"PCM_32","uniqueKey":"voice_settings.oneOf.5.precision","typeLabel":"enum\u003cstring>"},"sample_rate":{"type":"string","title":"Resemble Sample Rate","description":"Audio sample rate in Hz.","enum":["8000","16000","22050","32000","44100","48000"],"default":"48000","uniqueKey":"voice_settings.oneOf.5.sample_rate","typeLabel":"enum\u003cstring>"},"format":{"description":"Output audio format.","type":"string","enum":["wav","mp3"],"default":"mp3","uniqueKey":"voice_settings.oneOf.5.format","typeLabel":"enum\u003cstring>"}},"uniqueKey":"voice_settings.oneOf.5","typeLabel":"Resemble Voice Settings · object"},{"type":"object","title":"Inworld Voice Settings","description":"The settings associated with the voice selected","required":["type"],"properties":{"type":{"type":"string","enum":["inworld"],"description":"Voice settings provider type","isRequired":true,"uniqueKey":"voice_settings.oneOf.6.type","typeLabel":"enum\u003cstring>"},"delivery_mode":{"type":"string","enum":["STABLE","BALANCED","CREATIVE"],"description":"Controls the expressiveness and consistency of the Inworld `TTS2` model's speech synthesis. `STABLE` favors consistent, predictable output, `CREATIVE` allows more expressive variation, and `BALANCED` sits in between. Optional and only supported by `TTS2`; when omitted, the provider default applies.","uniqueKey":"voice_settings.oneOf.6.delivery_mode","typeLabel":"enum\u003cstring>"}},"uniqueKey":"voice_settings.oneOf.6","typeLabel":"Inworld Voice Settings · object"},{"type":"object","title":"xAI Voice Settings","description":"The settings associated with the voice selected","required":["type"],"properties":{"type":{"type":"string","enum":["xai"],"description":"Voice settings provider type","isRequired":true,"uniqueKey":"voice_settings.oneOf.7.type","typeLabel":"enum\u003cstring>"},"language":{"description":"Language code, or `auto` to detect automatically.","type":"string","default":"auto","uniqueKey":"voice_settings.oneOf.7.language","typeLabel":"string"}},"uniqueKey":"voice_settings.oneOf.7","typeLabel":"xAI Voice Settings · object"},{"type":"object","title":"Soniox Voice Settings","description":"The settings associated with the voice selected","required":["type"],"properties":{"type":{"type":"string","enum":["soniox"],"description":"Voice settings provider type","isRequired":true,"uniqueKey":"voice_settings.oneOf.8.type","typeLabel":"enum\u003cstring>"},"speed":{"type":"number","format":"float","minimum":0.7,"maximum":1.3,"default":1,"description":"Speaking rate. 1.0 is normal speed.","uniqueKey":"voice_settings.oneOf.8.speed","typeLabel":"number\u003cfloat>"},"reduce_silence":{"type":"boolean","default":false,"description":"Shortens the pauses between words.","uniqueKey":"voice_settings.oneOf.8.reduce_silence","typeLabel":"boolean"}},"uniqueKey":"voice_settings.oneOf.8","typeLabel":"Soniox Voice Settings · object"}],"uniqueKey":"voice_settings","typeLabel":"ElevenLabs Voice Settings · object | Telnyx Voice Settings · object | AWS Voice Settings · object | Minimax Voice Settings · object | Azure Voice Settings · object | Resemble Voice Settings · object | Inworld Voice Settings · object | xAI Voice Settings · object | Soniox Voice Settings · object"},"language":{"description":"The language you want spoken. This parameter is ignored when a `Polly.*` voice is specified.","type":"string","enum":["arb","cmn-CN","cy-GB","da-DK","de-DE","en-AU","en-GB","en-GB-WLS","en-IN","en-US","es-ES","es-MX","es-US","fr-CA","fr-FR","hi-IN","is-IS","it-IT","ja-JP","ko-KR","nb-NO","nl-NL","pl-PL","pt-BR","pt-PT","ro-RO","ru-RU","sv-SE","tr-TR"],"example":"en-US","uniqueKey":"language","typeLabel":"enum\u003cstring>"},"minimum_digits":{"description":"The minimum number of digits to fetch. This parameter has a minimum value of 1.","default":1,"type":"integer","example":1,"format":"int32","uniqueKey":"minimum_digits","typeLabel":"integer\u003cint32>"},"maximum_digits":{"description":"The maximum number of digits to fetch. This parameter has a maximum value of 128.","default":128,"type":"integer","example":10,"format":"int32","uniqueKey":"maximum_digits","typeLabel":"integer\u003cint32>"},"maximum_tries":{"description":"The maximum number of times that a file should be played back if there is no input from the user on the call.","default":3,"type":"integer","example":3,"format":"int32","uniqueKey":"maximum_tries","typeLabel":"integer\u003cint32>"},"timeout_millis":{"description":"The number of milliseconds to wait for a DTMF response after speak ends before a replaying the sound file.","default":60000,"type":"integer","example":60000,"format":"int32","uniqueKey":"timeout_millis","typeLabel":"integer\u003cint32>"},"terminating_digit":{"description":"The digit used to terminate input if fewer than `maximum_digits` digits have been gathered. Set to an empty string to disable the terminating digit entirely, so that a digit such as `#` can be collected as input per `valid_digits`.","default":"#","type":"string","example":"#","uniqueKey":"terminating_digit","typeLabel":"string"},"valid_digits":{"description":"A list of all digits accepted as valid.","default":"0123456789#*","type":"string","example":"123","uniqueKey":"valid_digits","typeLabel":"string"},"inter_digit_timeout_millis":{"description":"The number of milliseconds to wait for input between digits.","default":5000,"type":"integer","example":10000,"format":"int32","uniqueKey":"inter_digit_timeout_millis","typeLabel":"integer\u003cint32>"},"client_state":{"description":"Use this field to add state to every subsequent webhook. It must be a valid Base-64 encoded string.","type":"string","example":"aGF2ZSBhIG5pY2UgZGF5ID1d","uniqueKey":"client_state","typeLabel":"string"},"command_id":{"description":"Use this field to avoid duplicate commands. Telnyx will ignore any command with the same `command_id` for the same `call_control_id`.","type":"string","example":"891510ac-f3e4-11e8-af5b-de00688a4901","uniqueKey":"command_id","typeLabel":"string"}},"example":{"payload":"say this on call","invalid_payload":"say this on call","payload_type":"text","service_level":"premium","voice":"male","language":"arb","minimum_digits":1,"maximum_digits":10,"terminating_digit":"#","valid_digits":"123","inter_digit_timeout_millis":10000,"client_state":"aGF2ZSBhIG5pY2UgZGF5ID1d","command_id":"891510ac-f3e4-11e8-af5b-de00688a4901"},"uniqueKey":"","typeLabel":"Gather Using Speak Request · object"},"examples":{"Example":{"title":"Example","value":{"payload":"say this on call","invalid_payload":"say this on call","payload_type":"text","service_level":"premium","voice":"male","language":"arb","minimum_digits":1,"maximum_digits":10,"terminating_digit":"#","valid_digits":"123","inter_digit_timeout_millis":10000,"client_state":"aGF2ZSBhIG5pY2UgZGF5ID1d","command_id":"891510ac-f3e4-11e8-af5b-de00688a4901"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"c8b1e747-5bf2-464a-ae26-7c933a06a3cb":{"description":"Successful response upon making a call control command.","content":{"application/json":{"schema":{"type":"object","title":"Call Control Command Response","properties":{"data":{"type":"object","title":"Call Control Command Result","example":{"result":"ok"},"properties":{"result":{"type":"string","example":"ok","uniqueKey":"data.result","typeLabel":"string"}},"uniqueKey":"data","typeLabel":"Call Control Command Result · object"}},"uniqueKey":"","typeLabel":"Call Control Command Response · object"},"examples":{"Example":{"title":"Example","value":{"data":{"result":"ok"}}}},"exampleType":"generated"}},"exampleType":"generated"},"c16c1f0d-4409-4c73-a23a-ddfa78cc8fe6":{"description":"Unprocessable entity. The request was well-formed but could not be processed due to semantic errors. This includes validation errors, invalid parameter values, call state errors, conference errors, queue errors, recording/transcription errors, and business logic violations.","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"required":["code","title"],"properties":{"code":{"type":"string","format":"integer","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string\u003cinteger>"},"title":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].title","typeLabel":"string"},"detail":{"type":"string","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"source":{"type":"object","properties":{"pointer":{"description":"JSON pointer (RFC6901) to the offending entity.","type":"string","format":"json-pointer","uniqueKey":"errors.items.[INDEX].source.pointer","typeLabel":"string\u003cjson-pointer>"},"parameter":{"description":"Indicates which query parameter caused the error.","type":"string","uniqueKey":"errors.items.[INDEX].source.parameter","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX].source","typeLabel":"object"},"meta":{"type":"object","uniqueKey":"errors.items.[INDEX].meta","typeLabel":"object"}},"type":"object","uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"missing_required_parameter":{"title":"missing_required_parameter","value":{"errors":[{"code":"10004","title":"Missing required parameter","detail":"The 'to' parameter is required and cannot be blank.","source":{"pointer":"/to"}}]}},"invalid_call_control_id":{"title":"invalid_call_control_id","value":{"errors":[{"code":"90015","title":"Invalid Call Control ID","detail":"The call_control_id provided was not valid.","source":{"pointer":"/call_control_id"}}]}},"call_already_ended":{"title":"call_already_ended","value":{"errors":[{"code":"90018","title":"Call has already ended","detail":"This call is no longer active and can't receive commands."}]}},"call_not_answered":{"title":"call_not_answered","value":{"errors":[{"code":"90034","title":"Call not answered yet","detail":"This call can't receive this command because it has not been answered yet."}]}},"cannot_record_before_audio_started":{"title":"cannot_record_before_audio_started","value":{"errors":[{"code":"90020","title":"Call recording triggered before audio started","detail":"Call recording cannot be started until audio has commenced on the call."}]}},"transcription_already_active":{"title":"transcription_already_active","value":{"errors":[{"code":"90054","title":"Call transcription is already in progress","detail":"Call transcription can not be started more than once."}]}},"ai_assistant_already_active":{"title":"ai_assistant_already_active","value":{"errors":[{"code":"90061","title":"AI Assistant is already in progress","detail":"AI Assistant cannot be started more than once."}]}},"conference_already_ended":{"title":"conference_already_ended","value":{"errors":[{"code":"90019","title":"Conference has already ended","detail":"This conference is no longer active and can't receive commands."}]}},"conference_name_conflict":{"title":"conference_name_conflict","value":{"errors":[{"code":"90033","title":"Unable to execute command","detail":"Conference with given name already exists and it's active."}]}},"max_participants_reached":{"title":"max_participants_reached","value":{"errors":[{"code":"90032","title":"Maximum number of participants reached","detail":"The maximum allowed value of `max_participants` has been reached at 100."}]}},"queue_full":{"title":"queue_full","value":{"errors":[{"code":"90036","title":"Queue full","detail":"The 'support' queue is full and can't accept more calls."}]}},"call_already_in_queue":{"title":"call_already_in_queue","value":{"errors":[{"code":"90038","title":"Call already in queue","detail":"Call can't be added to a queue it's already in."}]}},"invalid_connection_id":{"title":"invalid_connection_id","value":{"errors":[{"code":"10015","title":"Invalid value for connection_id (Call Control App ID)","detail":"The requested connection_id (Call Control App ID) is either invalid or does not exist. Only Call Control Apps with valid webhook URL are accepted.","source":{"pointer":"/connection_id"}}]}},"invalid_phone_number_format":{"title":"invalid_phone_number_format","value":{"errors":[{"code":"10016","title":"Phone number must be in +E164 format","detail":"The 'to' parameter must be in E164 format.","source":{"pointer":"/to"}}]}},"srtp_not_supported_for_pstn":{"title":"srtp_not_supported_for_pstn","value":{"errors":[{"source":{"pointer":"/media_encryption"},"title":"Media encryption not supported for PSTN calls","detail":"SRTP media encryption is not supported for PSTN calls.","code":"10011"}]}},"fork_not_found":{"title":"fork_not_found","value":{"errors":[{"code":"90031","title":"Call is not currently forked","detail":"Can't stop forking, because the call isn't currently forked."}]}},"media_streaming_used":{"title":"media_streaming_used","value":{"errors":[{"code":"90045","title":"Media Streaming is used","detail":"This command can't be issued when media streaming is used."}]}},"invalid_enumerated_value":{"title":"invalid_enumerated_value","value":{"errors":[{"code":"10032","title":"Invalid enumerated value","detail":"The value must be one of: dual, single.","source":{"pointer":"/record_channels"}}]}},"value_outside_range":{"title":"value_outside_range","value":{"errors":[{"code":"10033","title":"Value outside of range","detail":"The value is outside of allowed range 1 to 5000","source":{"pointer":"/max_participants"}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"acaa68a2-180b-477b-8ba9-68f0ac107681":{"description":"Unexpected error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"required":["code","title"],"properties":{"code":{"type":"string","format":"integer","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string\u003cinteger>"},"title":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].title","typeLabel":"string"},"detail":{"type":"string","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"source":{"type":"object","properties":{"pointer":{"description":"JSON pointer (RFC6901) to the offending entity.","type":"string","format":"json-pointer","uniqueKey":"errors.items.[INDEX].source.pointer","typeLabel":"string\u003cjson-pointer>"},"parameter":{"description":"Indicates which query parameter caused the error.","type":"string","uniqueKey":"errors.items.[INDEX].source.parameter","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX].source","typeLabel":"object"},"meta":{"type":"object","uniqueKey":"errors.items.[INDEX].meta","typeLabel":"object"}},"type":"object","uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"type":"object","uniqueKey":"","typeLabel":"object"},"example":{"errors":[{"code":"10007","title":"Unexpected error","detail":"An unexpected error occured."}]},"examples":{"Example":{"title":"Example","value":{"errors":[{"code":"10007","title":"Unexpected error","detail":"An unexpected error occured."}]}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"bcc523b0-9e21-469e-85b8-03e709ed2323":{"bearerAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"0635ec9f-42f5-401e-98f7-c9c2b6ed8b0b":{"url":"https://api.telnyx.com/v2","description":"Version 2.0.0 of the Telnyx API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/source/external/call-control/call-control.json"},"subdomain":"telnyx","siteName":"Telnyx","title":"Gather using speak - Telnyx","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-07T06:52:23.470Z","originalFileLocation":"api-reference/call-commands/gather-using-speak.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Convert text to speech and play it on the call until the required DTMF signals are gathered to build interactive menus. You can pass a list of valid digits along with an \u0026#x27;invalid_payload\u0026#x27;, which will be played back at the beginning of each prompt. Speech will be interrupted when a DTMF signal is received. The Answer command must be issued before the gather_using_speak command. Expected Webhooks: - call.dtmf.received (you may receive many of these webhooks) - call.gather.ended\">\u003cmeta data-mint-head name=\"application-name\" content=\"Telnyx\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Gather using speak - Telnyx\">\u003cmeta data-mint-head property=\"og:description\" content=\"Infrastructure for real-time agents. Voice, AI, Edge Compute\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Telnyx\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://telnyx.mintlify.site/_mintlify/api/og/v2?division=Call+Commands+API\u0026amp;title=Gather+using+speak\u0026amp;description=Convert+text+to+speech+and+play+it+on+the+call+until+the+required+DTMF+signals+are+gathered+to+build+interactive+menus.%0A%0AYou+can+pass+a+list+of+valid+digits+alo\u0026amp;theme=0dd46d2166d1a00e34819206\u0026amp;signature=5866ea6b43a3e63fed9b3c3f8a5e74980f169823c9dd8542723322978ea3ca5a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Gather using speak - Telnyx\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Infrastructure for real-time agents. Voice, AI, Edge Compute\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://telnyx.mintlify.site/_mintlify/api/og/v2?division=Call+Commands+API\u0026amp;title=Gather+using+speak\u0026amp;description=Convert+text+to+speech+and+play+it+on+the+call+until+the+required+DTMF+signals+are+gathered+to+build+interactive+menus.%0A%0AYou+can+pass+a+list+of+valid+digits+alo\u0026amp;theme=0dd46d2166d1a00e34819206\u0026amp;signature=5866ea6b43a3e63fed9b3c3f8a5e74980f169823c9dd8542723322978ea3ca5a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/telnyx/MhCJ9JWG11MInbt6/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Telnyx\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00B688\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/call-commands/gather-using-speak.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://telnyx.com/#organization\",\"name\":\"Telnyx\",\"url\":\"https://telnyx.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://telnyx.com/favicon.ico\"},\"sameAs\":[\"https://x.com/telnyx\",\"https://www.linkedin.com/company/telnyx/\",\"https://github.com/team-telnyx\"]},{\"@type\":\"WebSite\",\"@id\":\"https://developers.telnyx.com#website\",\"name\":\"Telnyx\",\"url\":\"https://developers.telnyx.com\",\"publisher\":{\"@id\":\"https://telnyx.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak#webpage\",\"url\":\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak\",\"name\":\"Gather using speak\",\"description\":\"Convert text to speech and play it on the call until the required DTMF signals are gathered to build interactive menus. You can pass a list of valid digits along with an 'invalid_payload', which will be played back at the beginning of each prompt. Speech will be interrupted when a DTMF signal is received. The Answer command must be issued before the gather_using_speak command. Expected Webhooks: - call.dtmf.received (you may receive many of these webhooks) - call.gather.ended\",\"dateModified\":\"2026-11-07T06:52:23.470Z\",\"isPartOf\":{\"@id\":\"https://developers.telnyx.com#website\"},\"breadcrumb\":{\"@id\":\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://developers.telnyx.com/api-reference/call-control-applications/list-call-control-applications\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Voice API Commands\",\"item\":\"https://developers.telnyx.com/api-reference/call-commands/dial\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Gather using speak\",\"item\":\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak#apireference\",\"headline\":\"Gather using speak\",\"name\":\"Gather using speak\",\"description\":\"Convert text to speech and play it on the call until the required DTMF signals are gathered to build interactive menus. You can pass a list of valid digits along with an 'invalid_payload', which will be played back at the beginning of each prompt. Speech will be interrupted when a DTMF signal is received. The Answer command must be issued before the gather_using_speak command. Expected Webhooks: - call.dtmf.received (you may receive many of these webhooks) - call.gather.ended\",\"url\":\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak\",\"mainEntityOfPage\":{\"@id\":\"https://developers.telnyx.com/api-reference/call-commands/gather-using-speak#webpage\"},\"dateModified\":\"2026-11-07T06:52:23.470Z\",\"publisher\":{\"@id\":\"https://telnyx.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.telnyx.com#website\"}}]}\u003c/script>","siteName":"Telnyx","nav":{"global":{"anchors":[{"anchor":"Home","icon":"house","href":"/docs/overview"}]},"products":[{"product":"Home","icon":"house","pages":[{"title":"Home","href":"/docs/overview"}]},{"product":"Other APIs","icon":"ellipsis","pages":[{"title":"Other APIs","href":"/docs/other-apis"}]},{"product":"Agent Platform","icon":"circle-nodes","pages":[{"title":"Agent Platform","href":"/docs/agent-platform"}]},{"product":"AI","icon":"microchip-ai","pages":[{"title":"AI","href":"/docs/inference/models"}]},{"product":"Voice","icon":"waveform","pages":[{"title":"Voice","href":"/docs/voice/overview"}]},{"product":"Compute","icon":"server","pages":[{"title":"Compute","href":"/docs/edge-compute/platform-overview"}]},{"product":"Storage","icon":"hard-drive","pages":[{"title":"Storage","href":"/docs/cloud-storage/overview"}]},{"product":"Virtual Private Cloud","icon":"cloud","pages":[{"title":"Virtual Private Cloud","href":"/docs/virtual-private-cloud"}]},{"product":"Calling","icon":"phone","tabs":[{"tab":"Voice API","icon":"phone-volume","groups":[{"group":"Voice API Fundamentals","pages":[{"title":"Getting Started with Telnyx Voice API","sidebarTitle":"Getting Started","href":"/docs/voice/programmable-voice/voice-api-fundamentals"},{"title":"Commands and Resources","sidebarTitle":"Commands and Resources","href":"/docs/voice/programmable-voice/voice-api-commands-and-resources/index"},{"title":"Voice API Webhooks","sidebarTitle":"Webhooks","href":"/docs/voice/programmable-voice/voice-api-webhooks/index"},{"title":"Sending Commands for Programmable Voice","sidebarTitle":"Sending Commands","href":"/docs/voice/programmable-voice/sending-commands/index"},{"title":"Receiving Webhooks for Programmable Voice","sidebarTitle":"Receiving Webhooks","href":"/docs/voice/programmable-voice/receiving-webhooks/index"},{"title":"Command Retries","sidebarTitle":"Command Retries","href":"/docs/voice/programmable-voice/command-retries/index"},{"title":"Dials Per Second Limit","sidebarTitle":"Dials Per Second Limit","href":"/docs/voice/programmable-voice/dials-per-second-limit/index"},{"title":"Dial Metrics","sidebarTitle":"Dial Metrics","href":"/docs/voice/programmable-voice/dial-metrics/index"}]},{"group":"Voice Features","pages":[{"title":"Speech-to-Text with Voice API and TeXML","sidebarTitle":"Speech-to-Text","href":"/docs/voice/programmable-voice/speech-to-text/index"},{"title":"Text-to-Speech","sidebarTitle":"Text-to-Speech","href":"/docs/voice/programmable-voice/tts/index"},{"title":"Queueing Calls","sidebarTitle":"Call Queueing","href":"/docs/voice/programmable-voice/queueing-calls/index"},{"title":"Answering Machine Detection","sidebarTitle":"Answering Machine Detection","href":"/docs/voice/programmable-voice/answering-machine-detection/index"},{"title":"Custom voicemail greeting","sidebarTitle":"Custom Voicemail Greeting","href":"/docs/voice/programmable-voice/custom-voicemail-greeting/index"},{"title":"Storing call recordings","sidebarTitle":"Call Recordings Storage","href":"/docs/voice/programmable-voice/storing-call-recordings/index"},{"title":"Pay over Voice","sidebarTitle":"Pay","href":"/docs/voice/programmable-voice/pay/index"},{"group":"SIPREC Recording","pages":[{"title":"Telnyx SIPREC server (SRS) Configuration Guide","sidebarTitle":"SIPREC Server Configuration","href":"/docs/voice/programmable-voice/siprec-server/index"},{"title":"Using SIPREC client for Voice API and TeXML calls","sidebarTitle":"SIPREC Client","href":"/docs/voice/programmable-voice/siprec-client/index"}]}]},{"group":"AI Capabilities","pages":[{"title":"Gather using AI","sidebarTitle":"Gather Using AI","href":"/docs/voice/programmable-voice/gather-using-ai/index"},{"title":"Attach an AI Assistant to a Call","href":"/docs/voice/programmable-voice/ai-assistant-start/index"},{"title":"Dialogflow ES","sidebarTitle":"Dialogflow Integration","href":"/docs/voice/programmable-voice/dialogflow-es/index"},{"title":"Media Streaming over Websockets","sidebarTitle":"Real-Time Media Streaming","href":"/docs/voice/programmable-voice/media-streaming/index"},{"title":"Conversation Relay over WebSockets","sidebarTitle":"Conversation Relay","href":"/docs/voice/programmable-voice/conversation-relay/index"},{"title":"Noise Suppression","sidebarTitle":"Noise Suppression","href":"/docs/voice/programmable-voice/noise-suppression/index"},{"title":"Deepfake Detection","sidebarTitle":"Deepfake Detection","href":"/docs/voice/programmable-voice/deepfake-detection/index"}]},{"group":"Tutorials","pages":[{"title":"IVR Demo","sidebarTitle":"IVR","href":"/docs/voice/programmable-voice/ivr-demo/index"},{"title":"Call Center Demo","sidebarTitle":"Call Center","href":"/docs/voice/programmable-voice/call-center/index"},{"title":"Call Tracking Demo","sidebarTitle":"Call Tracking","href":"/docs/voice/programmable-voice/call-tracking/index"},{"title":"Conferencing Demo","sidebarTitle":"Conferencing","href":"/docs/voice/programmable-voice/conferencing-demo/index"}]},{"group":"Regional \u0026 Restrictions","pages":[{"title":"Voice API Services in Europe","sidebarTitle":"Voice API Services in Europe","href":"/docs/voice/programmable-voice/voice-api-services-in-europe/index"},{"title":"Programmable Voice restrictions for L1 verified accounts","sidebarTitle":"L1 Account Restrictions","href":"/docs/voice/programmable-voice/l1-accounts-restirctions/index"}]},{"group":"API Reference","pages":[{"group":"Voice API Applications","pages":[{"group":"Applications","pages":[{"title":"List call control applications","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /call_control_applications","href":"/api-reference/call-control-applications/list-call-control-applications"},{"title":"Create a call control application","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /call_control_applications","href":"/api-reference/call-control-applications/create-a-call-control-application"},{"title":"Delete a call control application","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json delete /call_control_applications/{id}","href":"/api-reference/call-control-applications/delete-a-call-control-application"},{"title":"Retrieve a call control application","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /call_control_applications/{id}","href":"/api-reference/call-control-applications/retrieve-a-call-control-application"},{"title":"Update a call control application","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json patch /call_control_applications/{id}","href":"/api-reference/call-control-applications/update-a-call-control-application"}]},{"group":"Active Calls","pages":[{"title":"List all active calls for given connection","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /connections/{connection_id}/active_calls","href":"/api-reference/call-information/list-all-active-calls-for-given-connection"}]},{"group":"Call Events","pages":[{"title":"List call events","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /call_events","href":"/api-reference/debugging/list-call-events"}]},{"group":"Call Information","pages":[{"title":"Retrieve a call status","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /calls/{call_control_id}","href":"/api-reference/call-information/retrieve-a-call-status"}]},{"group":"Dial Metrics","pages":[{"title":"List dial metrics","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /dial_metrics","href":"/api-reference/call-information/list-dial-metrics"}]}]},{"group":"Voice API Commands","pages":[{"group":"Dial","pages":[{"group":"Call Commands API","pages":[{"title":"Dial","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls","href":"/api-reference/call-commands/dial"}]},{"group":"Callbacks API","pages":[{"title":"Call answered","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callAnswered","href":"/api-reference/callbacks/call-answered"},{"title":"Call conversation created","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationCreated","href":"/api-reference/callbacks/call-conversation-created"},{"title":"Call conversation start failed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationStartFailed","href":"/api-reference/callbacks/call-conversation-start-failed"},{"title":"Call cost","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callCost","href":"/api-reference/callbacks/call-cost"},{"title":"Call deepfake detection error","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callDeepfakeDetectionError","href":"/api-reference/callbacks/call-deepfake-detection-error"},{"title":"Call deepfake detection result","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callDeepfakeDetectionResult","href":"/api-reference/callbacks/call-deepfake-detection-result"},{"title":"Call hold","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callHold","href":"/api-reference/callbacks/call-hold"},{"title":"Call initiated","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callInitiated","href":"/api-reference/callbacks/call-initiated"},{"title":"Call streaming failed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingFailed","href":"/api-reference/callbacks/call-streaming-failed"},{"title":"Call streaming started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingStarted","href":"/api-reference/callbacks/call-streaming-started"},{"title":"Call streaming stopped","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingStopped","href":"/api-reference/callbacks/call-streaming-stopped"},{"title":"Call unhold","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callUnhold","href":"/api-reference/callbacks/call-unhold"}]}]},{"group":"Answer","pages":[{"group":"Call Commands API","pages":[{"title":"Answer call","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/answer","href":"/api-reference/call-commands/answer-call"}]},{"group":"Callbacks API","pages":[{"title":"Call answered","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callAnswered","href":"/api-reference/callbacks/call-answered"},{"title":"Call conversation created","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationCreated","href":"/api-reference/callbacks/call-conversation-created"},{"title":"Call conversation start failed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationStartFailed","href":"/api-reference/callbacks/call-conversation-start-failed"},{"title":"Call deepfake detection error","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callDeepfakeDetectionError","href":"/api-reference/callbacks/call-deepfake-detection-error"},{"title":"Call deepfake detection result","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callDeepfakeDetectionResult","href":"/api-reference/callbacks/call-deepfake-detection-result"},{"title":"Call streaming failed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingFailed","href":"/api-reference/callbacks/call-streaming-failed"},{"title":"Call streaming started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingStarted","href":"/api-reference/callbacks/call-streaming-started"},{"title":"Call streaming stopped","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingStopped","href":"/api-reference/callbacks/call-streaming-stopped"}]}]},{"group":"Bridge","pages":[{"group":"Call Commands API","pages":[{"title":"Bridge calls","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/bridge","href":"/api-reference/call-commands/bridge-calls"}]},{"group":"Callbacks API","pages":[{"title":"Call bridged","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callBridged","href":"/api-reference/callbacks/call-bridged"}]}]},{"group":"Start AI assistant","pages":[{"group":"Call Commands API","pages":[{"title":"Start AI Assistant","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/ai_assistant_start","href":"/api-reference/call-commands/start-ai-assistant"}]},{"group":"Callbacks API","pages":[{"title":"Call conversation created","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationCreated","href":"/api-reference/callbacks/call-conversation-created"},{"title":"Call conversation ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationEnded","href":"/api-reference/callbacks/call-conversation-ended"},{"title":"Call conversation insights generated","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationInsightsGenerated","href":"/api-reference/callbacks/call-conversation-insights-generated"},{"title":"Call analyzed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callAnalyzed","href":"/api-reference/callbacks/call-analyzed"}]}]},{"group":"Join AI assistant","pages":[{"group":"Call Commands API","pages":[{"title":"Join AI Assistant Conversation","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/ai_assistant_join","href":"/api-reference/call-commands/join-ai-assistant-conversation"}]},{"group":"Callbacks API","pages":[{"title":"Call conversation ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationEnded","href":"/api-reference/callbacks/call-conversation-ended"},{"title":"Call conversation insights generated","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationInsightsGenerated","href":"/api-reference/callbacks/call-conversation-insights-generated"},{"title":"Call analyzed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callAnalyzed","href":"/api-reference/callbacks/call-analyzed"}]}]},{"group":"Stop AI assistant","pages":[{"title":"Stop AI Assistant","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/ai_assistant_stop","href":"/api-reference/call-commands/stop-ai-assistant"}]},{"group":"Add messages to AI Assistant","pages":[{"title":"Add messages to AI Assistant","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/ai_assistant_add_messages","href":"/api-reference/call-commands/add-messages-to-ai-assistant"}]},{"group":"Start Conversation Relay","pages":[{"title":"Start Conversation Relay","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/conversation_relay_start","href":"/api-reference/call-commands/start-conversation-relay"}]},{"group":"Stop Conversation Relay","pages":[{"title":"Stop Conversation Relay","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/conversation_relay_stop","href":"/api-reference/call-commands/stop-conversation-relay"}]},{"group":"Conversation Relay","pages":[{"group":"Websockets","pages":[{"asyncapi":"openapi/asyncapi/conversation-relay/conversation-relay.yml conversation-relay-websocket","href":"/api-reference/websockets/conversationrelay-websocket-channel","title":"ConversationRelay WebSocket channel","version":null}]}]},{"group":"Update client state","pages":[{"title":"Update client state","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json put /calls/{call_control_id}/actions/client_state_update","href":"/api-reference/call-commands/update-client-state"}]},{"group":"Enqueue call","pages":[{"group":"Call Commands API","pages":[{"title":"Enqueue call","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/enqueue","href":"/api-reference/call-commands/enqueue-call"}]},{"group":"Callbacks API","pages":[{"title":"Call enqueued","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callEnqueued","href":"/api-reference/callbacks/call-enqueued"},{"title":"Call left queue","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callLeftQueue","href":"/api-reference/callbacks/call-left-queue"}]}]},{"group":"Forking start","pages":[{"group":"Call Commands API","pages":[{"title":"Forking start","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/fork_start","href":"/api-reference/call-commands/forking-start"}]},{"group":"Callbacks API","pages":[{"title":"Call fork started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callForkStarted","href":"/api-reference/callbacks/call-fork-started"}]}]},{"group":"Forking stop","pages":[{"group":"Call Commands API","pages":[{"title":"Forking stop","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/fork_stop","href":"/api-reference/call-commands/forking-stop"}]},{"group":"Callbacks API","pages":[{"title":"Call fork stopped","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callForkStopped","href":"/api-reference/callbacks/call-fork-stopped"}]}]},{"group":"Gather","pages":[{"group":"Call Commands API","pages":[{"title":"Gather","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/gather","href":"/api-reference/call-commands/gather"}]},{"group":"Callbacks API","pages":[{"title":"Call dtmf received","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callDtmfReceived","href":"/api-reference/callbacks/call-dtmf-received"},{"title":"Call gather ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callGatherEnded","href":"/api-reference/callbacks/call-gather-ended"}]}]},{"group":"Gather stop","pages":[{"group":"Call Commands API","pages":[{"title":"Gather stop","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/gather_stop","href":"/api-reference/call-commands/gather-stop"}]},{"group":"Callbacks API","pages":[{"title":"Call gather ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callGatherEnded","href":"/api-reference/callbacks/call-gather-ended"}]}]},{"group":"Gather using AI","pages":[{"group":"Call Commands API","pages":[{"title":"Gather using AI","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/gather_using_ai","href":"/api-reference/call-commands/gather-using-ai"}]},{"group":"Callbacks API","pages":[{"title":"Call conversation created","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationCreated","href":"/api-reference/callbacks/call-conversation-created"},{"title":"Call ai gather ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook CallAIGatherEnded","href":"/api-reference/callbacks/call-ai-gather-ended"},{"title":"Call ai gather message history updated","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook CallAIGatherMessageHistoryUpdated","href":"/api-reference/callbacks/call-ai-gather-message-history-updated"},{"title":"Call ai gather partial results","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook CallAIGatherPartialResults","href":"/api-reference/callbacks/call-ai-gather-partial-results"},{"title":"Call conversation ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callConversationEnded","href":"/api-reference/callbacks/call-conversation-ended"}]}]},{"group":"Gather using audio","pages":[{"group":"Call Commands API","pages":[{"title":"Gather using audio","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/gather_using_audio","href":"/api-reference/call-commands/gather-using-audio"}]},{"group":"Callbacks API","pages":[{"title":"Call dtmf received","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callDtmfReceived","href":"/api-reference/callbacks/call-dtmf-received"},{"title":"Call gather ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callGatherEnded","href":"/api-reference/callbacks/call-gather-ended"},{"title":"Call playback ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callPlaybackEnded","href":"/api-reference/callbacks/call-playback-ended"},{"title":"Call playback started","description":"\n\nThis webhook uses Telnyx headers (telnyx-timestamp, telnyx-signature-ed25519) that are compatible with Standard Webhooks specification for SDK generation. Custom validation logic can map these to standard webhook-timestamp and webhook-signature equivalents. See https://github.com/standard-webhooks/standard-webhooks for details.","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callPlaybackStarted","href":"/api-reference/callbacks/call-playback-started"}]}]},{"group":"Gather using speak","pages":[{"group":"Call Commands API","pages":[{"title":"Gather using speak","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/gather_using_speak","href":"/api-reference/call-commands/gather-using-speak"}]},{"group":"Callbacks API","pages":[{"title":"Call dtmf received","description":"\n\nThis webhook uses Telnyx headers (telnyx-timestamp, telnyx-signature-ed25519) that are compatible with Standard Webhooks specification for SDK generation. Custom validation logic can map these to standard webhook-timestamp and webhook-signature equivalents. See https://github.com/standard-webhooks/standard-webhooks for details.","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callDtmfReceived","href":"/api-reference/callbacks/call-dtmf-received"},{"title":"Call gather ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callGatherEnded","href":"/api-reference/callbacks/call-gather-ended"}]}]},{"group":"Hangup","pages":[{"group":"Call Commands API","pages":[{"title":"Hangup call","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/hangup","href":"/api-reference/call-commands/hangup-call"}]},{"group":"Callbacks API","pages":[{"title":"Call hangup","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callHangup","href":"/api-reference/callbacks/call-hangup"},{"title":"Call recording saved","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callRecordingSaved","href":"/api-reference/callbacks/call-recording-saved"}]}]},{"group":"Reject a call","pages":[{"group":"Call Commands API","pages":[{"title":"Reject a call","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/reject","href":"/api-reference/call-commands/reject-a-call"}]},{"group":"Callbacks API","pages":[{"title":"Call hangup","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callHangup","href":"/api-reference/callbacks/call-hangup"}]}]},{"group":"Remove call from the queue","pages":[{"title":"Remove call from a queue","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/leave_queue","href":"/api-reference/call-commands/remove-call-from-a-queue"}]},{"group":"Process a payment","pages":[{"group":"Call Commands API","pages":[{"title":"Process a payment","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/pay","href":"/api-reference/call-commands/process-a-payment"}]},{"group":"Callbacks API","pages":[{"title":"Call payment completed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callPaymentCompleted","href":"/api-reference/callbacks/call-payment-completed"},{"title":"Call payment progress","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callPaymentProgress","href":"/api-reference/callbacks/call-payment-progress"}]}]},{"group":"Play audio playback","pages":[{"group":"Call Commands API","pages":[{"title":"Play audio URL","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/playback_start","href":"/api-reference/call-commands/play-audio-url"}]},{"group":"Callbacks API","pages":[{"title":"Call playback ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callPlaybackEnded","href":"/api-reference/callbacks/call-playback-ended"},{"title":"Call playback started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callPlaybackStarted","href":"/api-reference/callbacks/call-playback-started"}]}]},{"group":"Stop audio playback","pages":[{"group":"Call Commands API","pages":[{"title":"Stop audio playback","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/playback_stop","href":"/api-reference/call-commands/stop-audio-playback"}]},{"group":"Callbacks API","pages":[{"title":"Call playback ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callPlaybackEnded","href":"/api-reference/callbacks/call-playback-ended"},{"title":"Call speak ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callSpeakEnded","href":"/api-reference/callbacks/call-speak-ended"}]}]},{"group":"Recording start","pages":[{"group":"Call Commands API","pages":[{"title":"Recording start","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/record_start","href":"/api-reference/call-commands/recording-start"}]},{"group":"Callbacks API","pages":[{"title":"Call recording error","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callRecordingError","href":"/api-reference/callbacks/call-recording-error"},{"title":"Call recording saved","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callRecordingSaved","href":"/api-reference/callbacks/call-recording-saved"},{"title":"Call recording transcription saved","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callRecordingTranscriptionSaved","href":"/api-reference/callbacks/call-recording-transcription-saved"}]}]},{"group":"Recording stop","pages":[{"group":"Call Commands API","pages":[{"title":"Recording stop","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/record_stop","href":"/api-reference/call-commands/recording-stop"}]},{"group":"Callbacks API","pages":[{"title":"Call recording saved","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callRecordingSaved","href":"/api-reference/callbacks/call-recording-saved"}]}]},{"group":"Recording resume","pages":[{"title":"Record resume","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/record_resume","href":"/api-reference/call-commands/record-resume"}]},{"group":"Recording pause","pages":[{"title":"Record pause","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/record_pause","href":"/api-reference/call-commands/record-pause"}]},{"group":"Send DTMF","pages":[{"title":"Send DTMF","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/send_dtmf","href":"/api-reference/call-commands/send-dtmf"}]},{"group":"SIP refer","pages":[{"group":"Call Commands API","pages":[{"title":"SIP Refer a call","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/refer","href":"/api-reference/call-commands/sip-refer-a-call"}]},{"group":"Callbacks API","pages":[{"title":"Call refer completed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callReferCompleted","href":"/api-reference/callbacks/call-refer-completed"},{"title":"Call refer failed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callReferFailed","href":"/api-reference/callbacks/call-refer-failed"},{"title":"Call refer started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callReferStarted","href":"/api-reference/callbacks/call-refer-started"}]}]},{"group":"SIPREC start","pages":[{"group":"Call Commands API","pages":[{"title":"SIPREC start","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/siprec_start","href":"/api-reference/call-commands/siprec-start"}]},{"group":"Callbacks API","pages":[{"title":"Call siprec failed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callSiprecFailed","href":"/api-reference/callbacks/call-siprec-failed"},{"title":"Call siprec started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callSiprecStarted","href":"/api-reference/callbacks/call-siprec-started"},{"title":"Call siprec stopped","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callSiprecStopped","href":"/api-reference/callbacks/call-siprec-stopped"}]}]},{"group":"SIPREC stop","pages":[{"group":"Call Commands API","pages":[{"title":"SIPREC stop","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/siprec_stop","href":"/api-reference/call-commands/siprec-stop"}]},{"group":"Callbacks API","pages":[{"title":"Call siprec stopped","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callSiprecStopped","href":"/api-reference/callbacks/call-siprec-stopped"}]}]},{"group":"Speak text","pages":[{"group":"Call Commands API","pages":[{"title":"Speak text","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/speak","href":"/api-reference/call-commands/speak-text"}]},{"group":"Callbacks API","pages":[{"title":"Call speak ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callSpeakEnded","href":"/api-reference/callbacks/call-speak-ended"},{"title":"Call speak started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callSpeakStarted","href":"/api-reference/callbacks/call-speak-started"}]}]},{"group":"Streaming start","pages":[{"group":"Call Commands API","pages":[{"title":"Streaming start","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/streaming_start","href":"/api-reference/call-commands/streaming-start"}]},{"group":"Callbacks API","pages":[{"title":"Call streaming failed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingFailed","href":"/api-reference/callbacks/call-streaming-failed"},{"title":"Call streaming started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingStarted","href":"/api-reference/callbacks/call-streaming-started"},{"title":"Call streaming stopped","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingStopped","href":"/api-reference/callbacks/call-streaming-stopped"}]}]},{"group":"Streaming stop","pages":[{"group":"Call Commands API","pages":[{"title":"Streaming stop","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/streaming_stop","href":"/api-reference/call-commands/streaming-stop"}]},{"group":"Callbacks API","pages":[{"title":"Call streaming stopped","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callStreamingStopped","href":"/api-reference/callbacks/call-streaming-stopped"}]}]},{"group":"Media Streaming","pages":[{"group":"Websockets","pages":[{"asyncapi":"openapi/asyncapi/media-streaming/media-streaming.yml media-streaming-websocket","href":"/api-reference/websockets/stream-call-media-over-websocket","title":"Stream call media over WebSocket","version":null}]}]},{"group":"Noise Suppression start","pages":[{"title":"Noise Suppression Start (BETA)","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/suppression_start","href":"/api-reference/call-commands/noise-suppression-start-beta"}]},{"group":"Noise Suppression stop","pages":[{"title":"Noise Suppression Stop (BETA)","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/suppression_stop","href":"/api-reference/call-commands/noise-suppression-stop-beta"}]},{"group":"Switch supervisor role","pages":[{"title":"Switch supervisor role","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/switch_supervisor_role","href":"/api-reference/call-commands/switch-supervisor-role"}]},{"group":"Transcription start","pages":[{"group":"Call Commands API","pages":[{"title":"Transcription start","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/transcription_start","href":"/api-reference/call-commands/transcription-start"}]},{"group":"Callbacks API","pages":[{"title":"Transcription","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook transcription","href":"/api-reference/callbacks/transcription"}]}]},{"group":"Transcription stop","pages":[{"title":"Transcription stop","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/transcription_stop","href":"/api-reference/call-commands/transcription-stop"}]},{"group":"Transfer call","pages":[{"group":"Call Commands API","pages":[{"title":"Transfer call","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /calls/{call_control_id}/actions/transfer","href":"/api-reference/call-commands/transfer-call"}]},{"group":"Callbacks API","pages":[{"title":"Call answered","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callAnswered","href":"/api-reference/callbacks/call-answered"},{"title":"Call bridged","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callBridged","href":"/api-reference/callbacks/call-bridged"},{"title":"Call initiated","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callInitiated","href":"/api-reference/callbacks/call-initiated"},{"title":"Call machine detection ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callMachineDetectionEnded","href":"/api-reference/callbacks/call-machine-detection-ended"},{"title":"Call machine greeting ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callMachineGreetingEnded","href":"/api-reference/callbacks/call-machine-greeting-ended"},{"title":"Call machine premium detection ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callMachinePremiumDetectionEnded","href":"/api-reference/callbacks/call-machine-premium-detection-ended"},{"title":"Call machine premium detection started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callMachinePremiumDetectionStarted","href":"/api-reference/callbacks/call-machine-premium-detection-started"},{"title":"Call machine premium greeting ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callMachinePremiumGreetingEnded","href":"/api-reference/callbacks/call-machine-premium-greeting-ended"},{"title":"Call machine premium call screening detected","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook callMachinePremiumCallScreeningDetected","href":"/api-reference/callbacks/call-machine-premium-call-screening-detected"}]}]},{"group":"Conference Commands","pages":[{"group":"Conference Commands API","pages":[{"title":"List conferences","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /conferences","href":"/api-reference/conference-commands/list-conferences"},{"title":"Create conference","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences","href":"/api-reference/conference-commands/create-conference"},{"title":"Retrieve a conference","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /conferences/{id}","href":"/api-reference/conference-commands/retrieve-a-conference"},{"title":"Hold conference participants","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/hold","href":"/api-reference/conference-commands/hold-conference-participants"},{"title":"Join a conference","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/join","href":"/api-reference/conference-commands/join-a-conference"},{"title":"Leave a conference","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/leave","href":"/api-reference/conference-commands/leave-a-conference"},{"title":"Mute conference participants","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/mute","href":"/api-reference/conference-commands/mute-conference-participants"},{"title":"Play audio to conference participants","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/play","href":"/api-reference/conference-commands/play-audio-to-conference-participants"},{"title":"Conference recording pause","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/record_pause","href":"/api-reference/conference-commands/conference-recording-pause"},{"title":"Conference recording resume","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/record_resume","href":"/api-reference/conference-commands/conference-recording-resume"},{"title":"Conference recording start","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/record_start","href":"/api-reference/conference-commands/conference-recording-start"},{"title":"Conference recording stop","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/record_stop","href":"/api-reference/conference-commands/conference-recording-stop"},{"title":"Speak text to conference participants","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/speak","href":"/api-reference/conference-commands/speak-text-to-conference-participants"},{"title":"Stop audio being played on the conference","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/stop","href":"/api-reference/conference-commands/stop-audio-being-played-on-the-conference"},{"title":"Unhold conference participants","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/unhold","href":"/api-reference/conference-commands/unhold-conference-participants"},{"title":"Unmute conference participants","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/unmute","href":"/api-reference/conference-commands/unmute-conference-participants"},{"title":"Update conference participant","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/update","href":"/api-reference/conference-commands/update-conference-participant"},{"title":"End a conference","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/end","href":"/api-reference/conference-commands/end-a-conference"},{"title":"Gather DTMF using audio prompt in a conference","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/gather_using_audio","href":"/api-reference/conference-commands/gather-dtmf-using-audio-prompt-in-a-conference"},{"title":"Send DTMF to conference participants","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json post /conferences/{id}/actions/send_dtmf","href":"/api-reference/conference-commands/send-dtmf-to-conference-participants"},{"title":"List conference participants","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /conferences/{conference_id}/participants","href":"/api-reference/conference-commands/list-conference-participants"},{"title":"Retrieve a conference participant","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json get /conferences/{id}/participants/{participant_id}","href":"/api-reference/conference-commands/retrieve-a-conference-participant"},{"title":"Update a conference participant","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/call-control.json patch /conferences/{id}/participants/{participant_id}","href":"/api-reference/conference-commands/update-a-conference-participant"}]},{"group":"Callbacks API","pages":[{"title":"Conference created","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceCreated","href":"/api-reference/callbacks/conference-created"},{"title":"Conference ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceEnded","href":"/api-reference/callbacks/conference-ended"},{"title":"Conference floor changed","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceFloorChanged","href":"/api-reference/callbacks/conference-floor-changed"},{"title":"Conference participant joined","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceParticipantJoined","href":"/api-reference/callbacks/conference-participant-joined"},{"title":"Conference participant left","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceParticipantLeft","href":"/api-reference/callbacks/conference-participant-left"},{"title":"Conference participant playback ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceParticipantPlaybackEnded","href":"/api-reference/callbacks/conference-participant-playback-ended"},{"title":"Conference participant playback started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceParticipantPlaybackStarted","href":"/api-reference/callbacks/conference-participant-playback-started"},{"title":"Conference participant speak ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceParticipantSpeakEnded","href":"/api-reference/callbacks/conference-participant-speak-ended"},{"title":"Conference participant speak started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceParticipantSpeakStarted","href":"/api-reference/callbacks/conference-participant-speak-started"},{"title":"Conference playback ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferencePlaybackEnded","href":"/api-reference/callbacks/conference-playback-ended"},{"title":"Conference playback started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferencePlaybackStarted","href":"/api-reference/callbacks/conference-playback-started"},{"title":"Conference recording saved","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceRecordingSaved","href":"/api-reference/callbacks/conference-recording-saved"},{"title":"Conference speak ended","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceSpeakEnded","href":"/api-reference/callbacks/conference-speak-ended"},{"title":"Conference speak started","version":null,"deprecated":null,"openapi":"/openapi/source/external/call-control/call-control.json webhook conferenceSpeakStarted","href":"/api-reference/callbacks/conference-speak-started"}]}]}]},{"group":"Pay Connectors API","pages":[{"title":"Create a Pay connector","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/pay-connectors.json post /pay_connectors","href":"/api-reference/pay-connectors/create-a-pay-connector"},{"title":"List Pay connectors","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/pay-connectors.json get /pay_connectors","href":"/api-reference/pay-connectors/list-pay-connectors"},{"title":"Retrieve a Pay connector","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/pay-connectors.json get /pay_connectors/{name}","href":"/api-reference/pay-connectors/retrieve-a-pay-connector"},{"title":"Update a Pay connector","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/pay-connectors.json patch /pay_connectors/{name}","href":"/api-reference/pay-connectors/update-a-pay-connector"},{"title":"Delete a Pay connector","deprecated":null,"version":null,"openapi":"/openapi/source/external/call-control/pay-connectors.json delete /pay_connectors/{name}","href":"/api-reference/pay-connectors/delete-a-pay-connector"}]},{"group":"SIPREC Connectors API","pages":[{"title":"Create a SIPREC connector","deprecated":null,"version":null,"openapi":"/openapi/source/external/siprec/siprec.json post /siprec_connectors","href":"/api-reference/siprec-connectors/create-a-siprec-connector"},{"title":"Retrieve a SIPREC connector","deprecated":null,"version":null,"openapi":"/openapi/source/external/siprec/siprec.json get /siprec_connectors/{connector_name}","href":"/api-reference/siprec-connectors/retrieve-a-siprec-connector"},{"title":"Update a SIPREC connector","deprecated":null,"version":null,"openapi":"/openapi/source/external/siprec/siprec.json put /siprec_connectors/{connector_name}","href":"/api-reference/siprec-connectors/update-a-siprec-connector"},{"title":"Delete a SIPREC connector","deprecated":null,"version":null,"openapi":"/openapi/source/external/siprec/siprec.json delete /siprec_connectors/{connector_name}","href":"/api-reference/siprec-connectors/delete-a-siprec-connector"}]}]},{"group":"For AI Agents","pages":[{"title":"Voice API llms.txt","sidebarTitle":"Voice API llms txt","href":"/docs/development/llms/calling-voice-api-llms-txt/index"},{"title":"Voice API llms-full.txt","sidebarTitle":"Voice API llms full txt","href":"/docs/development/llms/calling-voice-api-llms-full-txt/index"}]}]},{"tab":"TeXML","icon":"code","pages":[{"title":"TeXML","href":"/docs/voice/programmable-voice/texml-fundamentals"}]},{"tab":"SIP Trunking","icon":"headset","pages":[{"title":"SIP Trunking","href":"/docs/voice/sip-trunking/get-started"}]},{"tab":"UAC Connections","icon":"plug","pages":[{"title":"UAC Connections","href":"/docs/voice/uac-connections"}]},{"tab":"WebRTC","icon":"browser","pages":[{"title":"WebRTC","href":"/docs/voice/webrtc/fundamentals"}]},{"tab":"Trusted Calling","icon":"shield-check","pages":[{"title":"Trusted Calling","href":"/docs/branded-calling/overview"}]}]},{"product":"Messaging","icon":"message","pages":[{"title":"Messaging","href":"/docs/messaging/messages/send-message"}]},{"product":"Numbers","icon":"hashtag","pages":[{"title":"Numbers","href":"/docs/numbers/phone-numbers/getting-started"}]},{"product":"Wireless","icon":"broadcast-tower","pages":[{"title":"Wireless","href":"/docs/iot-sim/wireless-overview"}]}]},"basePath":"","title":"Gather using speak - Telnyx","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":["10e4515597","c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["BannerMarkdown-C79IUEr8.js","dist-DE3EVdvd.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-DK3K4Z1S.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-CBsVopKK.js","utils-DZAk68jJ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D32AYZrP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D_A5_cny.js","snippetPresets-xNRfS9th.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","Page-Dr40SSJq.js","ApiExamples-BIB25-tq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CydJ4w4j.js","shallow-CYPBeQSG.js","getApiPlaygroundDisplay-A5xJVBOu.js","CodeSnippet-BVRTgi3m.js","CodeSnippets-DjD6BSlt.js","getPastedJson-D4V4JyrR.js","icon-uhcnG22T.js","MethodPill-CM-ZQdGH.js","DuplicateIcon-B_WnOiNf.js","createIcon-CJsb8utt.js","DynamicMarkdown-D-2HDKEp.js","SectionHeading-KP5xmMgQ.js","axios-vUo_bRtp.js","Markdown-D_k0dg6k.js","AssistantPageLink-fN9H9n9g.js"]}