---
title: "Get a voice pipeline config by id"
method: GET
path: "/v1/voice/configs/{config_id}"
tags: ["voice"]
---

# Get a voice pipeline config by id

`GET /v1/voice/configs/{config_id}`

## Path parameters

- `config_id` string, uuid, required

## Response `200`

Successful Response

- VoicePipelineConfigResponse
  - `id` string, uuid, required
  - `organization_id` string, uuid, nullable
  - `agent_id` string, uuid, nullable
  - `team_id` string, uuid, nullable
  - `persona_id` string, uuid, nullable
  - `voice_id` string, uuid, required
  - `voice` VoiceOut, required
    - `id` string, uuid, required
    - `provider` 'elevenlabs', required
    - `external_id` string, required
    - `name` string, required
    - `description` string, nullable
    - `preview_url` string, nullable
    - `language` string, nullable
    - `accent` string, nullable
    - `category` string, nullable
    - `labels` object
    - `supported_models` string[]
    - `is_active` boolean
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `voice_tuning` object
  - `stt_provider` string, required
  - `stt_model` string, nullable
  - `stt_language` string, required
  - `stt_provider_data` object
  - `tts_speed` number, nullable
  - `tts_provider_data` object
  - `vad_provider` string, required
  - `vad_provider_data` object
  - `local_vad_params` object
  - `turn_analyzer_params` object
  - `interruptions_enabled` boolean, required
  - `interruption_min_words` integer, required
  - `interruption_min_duration_ms` integer, required
  - `interruption_backoff_ms` integer, required
  - `interruption_sensitivity` number, required
  - `interruption_trigger_phrases` string[]
  - `interruption_hard_phrases` string[]
  - `interruption_final_transcript_grace_ms` integer, required
  - `hard_turn_timeout_ms` integer, nullable
  - `min_endpoint_delay_ms` integer, required
  - `max_endpoint_delay_ms` integer, required
  - `preemptive_generation_enabled` boolean, required
  - `voicemail_detection_mode` string, required
  - `voicemail_detection_timeout_ms` integer, required
  - `voicemail_detection_model` string, nullable
  - `voicemail_message` string, nullable
  - `max_call_duration_ms` integer, required
  - `end_call_phrases` string[]
  - `silence_timeout_ms` integer, required
  - `silence_reminder_count` integer, required
  - `silence_reminder_mode` string, required
  - `silence_reminder_message` string, nullable
  - `silence_end_action` string, required
  - `silence_end_message` string, nullable
  - `dtmf_enabled` boolean, required
  - `dtmf_termination_digit` string, required
  - `dtmf_inter_digit_timeout_ms` integer, required
  - `dtmf_max_digits` integer, required
  - `dtmf_prefix` string, required
  - `backchannel_enabled` boolean, required
  - `backchannel_frequency` integer, nullable
  - `pronunciation_overrides` object
  - `background_audio_preset` string, nullable
  - `background_audio_volume` number, required
  - `background_audio_loop` boolean, required
  - `background_audio_enabled` boolean, required
  - `noise_cancellation_enabled` boolean, required
  - `recording_enabled` boolean, required
  - `transcription_storage_enabled` boolean, required
  - `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
  - `heartbeats_period_secs` integer, nullable
  - `idle_pipeline_timeout_ms` integer, nullable
  - `language` string, required
  - `locale` string, nullable
  - `multilingual_enabled` boolean, required
  - `multilingual_languages` string[]
  - `metadata_` object
  - `first_speaking_config` FirstSpeakingConfig — 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.
    - `first_speaker` 'agent' | 'user'
    - `mode` 'static' | 'dynamic'
    - `text` string, nullable
    - `instructions` string, nullable
    - `interruptible` boolean
    - `ai_disclosure_text` string, nullable
  - `warnings` string[]
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400` — Bad request
- `401` — Authentication required
- `404` — Resource not found
- `422` — Validation Error

---

[API](https://skmtc.net/oneloop-hq/apis/feather-api.md) · [All operations](https://skmtc.net/oneloop-hq/apis/feather-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/oneloop-hq/feather-api/versions/888bdd5c076e/schema)
