Skip to main content
POST
Create a voice pipeline config for an agent or persona (1:1)

Authorizations

x-api-key
string
header
required

Body

application/json
voice_id
string<uuid>
required
voice_tuning
Voice Tuning · object | null
stt_provider
string | null
Maximum string length: 32
stt_model
string | null
Maximum string length: 64
stt_provider_data
Stt Provider Data · object | null
tts_speed
number | null
Required range: 0 <= x < 10
tts_provider_data
VoiceTTSProviderDataInput · object | null

OpenAPI-visible TTS overrides accepted by voice-config CRUD.

The linked voice_id remains the authority for which provider member is valid. The service resolves that row and validates this payload again against the provider-specific discriminated union, including model support and the Inworld TTS-2-only expressive-speech constraint.

vad_provider_data
Vad Provider Data · object | null
local_vad_params
LocalVADParams · object | null

Silero VAD tuning. Always applied for Deepgram Nova; ignored otherwise.

turn_analyzer_params
TurnAnalyzerParams · object | null

Smart-turn-v3 tuning. Always applied for Deepgram Nova; ignored otherwise.

pronunciation_overrides
Pronunciation Overrides · object | null
noise_cancellation_enabled
boolean | null
noise_cancellation_provider
enum<string> | null

Noise-suppression engine wired by audio_filters.build_audio_in_filter.

Applies only when noise_cancellation_enabled. String values MUST match the provider strings the factory dispatches on.

Available options:
rnnoise,
dtln
language
string | null
Maximum string length: 16
locale
string | null
Maximum string length: 16
multilingual_enabled
boolean | null
multilingual_languages
string[] | null
Maximum array length: 50
first_speaker
enum<string> | null
Available options:
agent,
user
mode
enum<string> | null
Available options:
static,
dynamic
text
string | null
Maximum string length: 1000
instructions
string | null
Maximum string length: 2000
interruptible
boolean | null
ai_disclosure_text
string | null
Maximum string length: 500
agent_id
string<uuid> | null
team_id
string<uuid> | null
persona_id
string<uuid> | null

Response

Successful Response

id
string<uuid>
required
voice_id
string<uuid>
required
voice
VoiceOut · object
required
stt_provider
string
required
stt_language
string
required
vad_provider
string
required
interruption_sensitivity
number
required
min_endpoint_delay_ms
integer
required
max_endpoint_delay_ms
integer
required
preemptive_generation_enabled
boolean
required
noise_cancellation_enabled
boolean
required
noise_cancellation_provider
enum<string>
required

Noise-suppression engine wired by audio_filters.build_audio_in_filter.

Applies only when noise_cancellation_enabled. String values MUST match the provider strings the factory dispatches on.

Available options:
rnnoise,
dtln
normalize_for_speech
boolean
required
audio_in_sample_rate
integer
required
audio_out_sample_rate
integer
required
metrics_enabled
boolean
required
usage_metrics_enabled
boolean
required
language
string
required
multilingual_enabled
boolean
required
created_at
string<date-time>
required
updated_at
string<date-time>
required
organization_id
string<uuid> | null
name
string | null
agent_id
string<uuid> | null
team_id
string<uuid> | null
persona_id
string<uuid> | null
voice_tuning
Voice Tuning · object
stt_model
string | null
stt_provider_data
Stt Provider Data · object
tts_speed
number | null
tts_provider_data
Tts Provider Data · object
vad_provider_data
Vad Provider Data · object
local_vad_params
Local Vad Params · object
turn_analyzer_params
Turn Analyzer Params · object
hard_turn_timeout_ms
integer | null
end_call_phrases
string[]
pronunciation_overrides
Pronunciation Overrides · object
heartbeats_period_secs
integer | null
idle_pipeline_timeout_ms
integer | null
locale
string | null
multilingual_languages
string[]
linked_agent_count
integer
default:0
linked_agent_names
string[]
linked_team_count
integer
default:0
linked_team_names
string[]
metadata_
Metadata · object
first_speaking_config
FirstSpeakingConfig · object | null

Config for the AI's opening turn (no user input yet).

Lives inside ChannelConfig — first-speaking is per-channel.

Mode-agnostic fields:

  • first_speaker: "agent" opens the call with the rendered message; "user" skips the greeting (caller speaks first). Non-voice channels treat the inbound user message as the "user" opener and ignore this field at runtime.

Greeting source (only applies when first_speaker="agent"):

  • static mode: text is required and emitted verbatim (templated via the shared {{var}} engine, src.shared.templating.render).
  • dynamic mode: instructions are sent to the model router with the agent persona to render an opening line (instructions are templated). When omitted/empty, instructions falls back to DEFAULT_DYNAMIC_FIRST_SPEAKING_INSTRUCTIONS so operators who just want a generic friendly opener don't have to author copy.

Voice-only fields (ignored on non-audio channels):

  • interruptible: whether the caller can barge in mid-greeting.
  • ai_disclosure_text: regulatory disclosure (e.g. CA SB 1001), played as an uninterruptible TTS frame BEFORE the greeting. Disclosure plays even when first_speaker="user" because the regulation requires the disclosure regardless of who speaks first.
warnings
string[]
effective_stt_model
string | null
effective_stt_provider_data
Effective Stt Provider Data · object | null
effective_tts_model
string | null