> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Een uitgaande campagne maken

POST https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns/submit
Content-Type: application/json

Maak een uitgaande campagne die elke ontvanger met de agent belt of berichten stuurt, binnen de belvensters van het beleid, met nieuwe pogingen en follow-ups voor zover toegestaan. Retourneert `201` voor een nieuwe campagne. Een herhaald request, gekoppeld via `idempotency_key` of anders via de body, retourneert de bestaande campagne met `created` op false.

Reference: https://elevenlabs.io/docs/api-reference/campaigns/create

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Body (application/json)

This endpoint expects a SubmitCampaignRequest.

- `call_name` (string, required) — De naam van de campagne.
- `agent_id` (string, required) — De agent die de oproepen plaatst.
- `recipients` (list of SubmitCampaignRecipient, required) — Wie je moet bellen. Elke ontvanger wordt een lead van de campagne.
- `channel_config` (SubmitCampaignRequestChannelConfig, required)
- `scheduled_time_unix` (integer, optional, nullable) — Wanneer je moet beginnen met bellen; laat weg om nu te starten. Oproepen wachten nog steeds op het volgende belvenster.
- `timezone` (string, optional, nullable) — IANA-tijdzone waarin de belvensters worden geïnterpreteerd, die die van het beleid overschrijft.
- `branch_id` (string, optional, nullable) — De agentbranch waarmee moet worden gebeld.
- `environment` (string, optional, nullable) — De omgeving waarin de omgevingsvariabelen van de agent moeten worden opgelost.
- `target_concurrency_limit` (integer, optional, nullable) — Het maximale aantal oproepen dat tegelijk wordt geplaatst.
- `idempotency_key` (string, optional, nullable) — Maakt het request veilig om opnieuw te proberen: een herhaling met dezelfde sleutel retourneert de campagne die ermee is gemaakt.
- `outcome` (SubmitCampaignRequestOutcome, optional, nullable) — Het resultaat dat als succes geldt voor de oproepen van de campagne.
- `policy` (PolicyConfig-Input, optional, nullable) — Beleid dat als momentopname aan de campagne wordt gekoppeld. Wanneer het is ingesteld, heeft het voorrang op de workspacestandaard en eventuele overschrijvingen per agent; wanneer het wordt weggelaten, moet de workspaceconfiguratie bestaan en levert die het beleid.
- `variant` (enum, optional, nullable) — `simple` voert één poging per ontvanger uit met doorlopende belvensters en zonder gegevensverzameling, en kan niet worden gecombineerd met `policy`. `advanced` gebruikt `policy` of de workspaceconfiguratie en is de standaardinstelling voor telefooncampagnes.
  - Allowed values: `simple`, `advanced`

## Response

### 200

Geslaagde response

- `campaign` (CampaignResponse, required)
- `created` (boolean, required) — False wanneer het request een eerder request herhaalde en de bijbehorende campagne retourneerde.
- `within_calling_window` (boolean, required) — Of het bellen direct begint in plaats van in het volgende belvenster.

## Errors

### 422 Unprocessable Entity Error

Validatiefout

- `detail` (list of ValidationError, optional)

## Types

### SubmitCampaignRecipient

- `phone_number` (string, optional, nullable) — Het te bellen nummer, in E.164-indeling zoals `+14155550100`.
- `phone_numbers` (list of string, optional, nullable) — Meer te bellen nummers, op volgorde na `phone_number`. De lead gaat door naar het volgende nummer wanneer oproepen naar het huidige nummer blijven mislukken.
- `whatsapp_user_id` (string, optional, nullable) — De WhatsApp-gebruikers-ID van de contactpersoon. WhatsApp-campagnes gebruiken deze in plaats van telefoonnummers.
- `id` (string, optional, nullable) — Je identificatie voor de ontvanger, teruggegeven als de `recipient_id` van de lead.
- `conversation_initiation_client_data` (ConversationInitiationClientDataRequest-Input, optional, nullable) — Dynamische variabelen en overschrijvingen voor de oproepen van deze ontvanger.

### SubmitCampaignRequestChannelConfig

- `channel`: `phone` (PhoneChannelConfig)
  - `agent_phone_number_id` (string, required) — Het telefoonnummer waarmee wordt gebeld.
  - `mode_config` (PhoneVoiceConfig-Input, optional)
- `channel`: `whatsapp` (SubmitWhatsAppChannelConfig)
  - `mode_config` (SubmitWhatsAppChannelConfigModeConfig, required)
  - `whatsapp_phone_number_id` (string, required) — Het WhatsApp-telefoonnummer waarmee je belt of berichten verstuurt.

### SubmitCampaignRequestOutcome

Het resultaat dat als succes geldt voor de oproepen van de campagne.

- `type`: `data_collection` (DataCollectionOutcome)
  - `data_collection_id` (string, required) — Het gegevensverzamelingsitem van de agent dat een succesvolle oproep instelt.
  - `equals` (list of CampaignResponseOutcomeDiscriminatorMappingDataCollectionEqualsItems, required) — Waarden die als succes gelden, allemaal van het type van het item.
- `type`: `evaluation_criteria` (EvaluationCriterionOutcome)
  - `criteria_id` (string, required) — Het evaluatiecriterium van de agent waaraan een succesvolle oproep voldoet.

### PolicyConfig-Input

- `timezone` (string, optional, default: UTC) — IANA-tijdzone waarin de belperiodes worden geïnterpreteerd.
- `retry` (RetryPolicy, optional)
- `calling_periods` (list of CallingPeriod, optional) — De wekelijkse vensters waarin oproepen kunnen worden geplaatst.
- `data_collection` (DataCollectionConfig, optional) — De gegevensverzamelingsitems van de agent die follow-upoproepen sturen. Elk item gebruikt standaard het ingebouwde item voor dat doel; `null` schakelt het uit.
- `followup_context` (FollowupContextPolicy, optional) — Welke dynamische variabelen van `campaign__` vervolgoproepen krijgen.

### CampaignResponse

- `campaign_id` (string, required)
- `call_name` (string, required) — De naam van de campagne.
- `agent_id` (string, required)
- `channel_config` (CampaignResponseChannelConfig, required)
- `status` (enum, required) — `attention` betekent dat een open aandachtspunt sommige oproepen van de campagne tegenhoudt, terwijl de overige doorgaan. `stopping` betekent dat oproepen in de wachtrij worden geannuleerd en al geplaatste oproepen worden afgerond.
  - Allowed values: `active`, `paused`, `stopping`, `stopped`, `completed`, `failed`, `attention`
- `policy` (CampaignPolicySnapshot, required) — Het beleid dat de campagne gebruikte toen deze werd gemaakt.
- `variant` (enum, required)
  - Allowed values: `simple`, `advanced`
- `source` (enum, required, nullable) — Of de campagne in de app of via de API is gemaakt.
  - Allowed values: `ui`, `api`
- `outcome` (CampaignResponseOutcome, required, nullable) — Het resultaat dat als succes geldt voor de oproepen van de campagne.
- `created_at_unix` (integer, required)
- `scheduled_time_unix` (integer, required, nullable) — Wanneer de campagne begint met bellen; niet ingesteld om te starten zodra deze is gemaakt.
- `updated_at_unix` (integer, required)
- `branch_id` (string, required, nullable) — De agentbranch waarmee de campagne belt.
- `environment` (string, required, nullable) — De omgeving waarin de omgevingsvariabelen van de agent worden opgelost.
- `target_concurrency_limit` (integer, required, nullable) — Het maximale aantal oproepen dat de campagne tegelijk plaatst.
- `channel` (enum, required)
  - Allowed values: `phone`, `whatsapp`
- `mode` (enum, required)
  - Allowed values: `voice`, `message`
- `counts` (CampaignSummaryCounts, required)
- `agent_name` (string, required, default: )

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### ConversationInitiationClientDataRequest-Input

- `conversation_config_override` (ConversationConfigClientOverride-Input, optional)
- `custom_llm_extra_body` (map from string to any, optional)
- `user_id` (string, optional, nullable) — ID van de eindgebruiker die aan dit gesprek deelneemt (voor gebruikersidentificatie van de eigenaar van de agent)
- `source_info` (ConversationInitiationSourceInfo, optional) — Informatie over de bron van de gespreksstart
- `branch_id` (string, optional, nullable) — ID van de agentbranch die voor dit gesprek moet worden gebruikt
- `environment` (string, optional, nullable) — Omgeving voor het oplossen van omgevingsvariabelen
- `starting_workflow_node_id` (string, optional, nullable) — Als dit is ingesteld, start je de workflow bij deze node-ID in plaats van bij het standaardbeginpunt
- `procedure_ids` (list of string, optional, nullable) — Als dit is ingesteld, zijn alleen deze procedures beschikbaar voor de startende agent. Elke ID moet aan die agent zijn gekoppeld; onbekende ID's verhinderen het starten van het gesprek. Een lege lijst schakelt alle procedures van die agent uit. Niet van toepassing na een agentoverdracht. Vereist enable_procedure_ids_from_client.
- `start_procedure_ids` (list of string, optional, nullable) — Als dit is ingesteld, starten deze vrije procedures wanneer het gesprek begint. Accepteert maximaal vijf ID's. Elke ID moet beschikbaar zijn nadat procedure_ids is toegepast. Onbekende ID's en gestructureerde procedures laten het starten van het gesprek mislukken. Vereist enable_procedure_ids_from_client.
- `dynamic_variables` (map from string to any, optional)

### PhoneVoiceConfig-Input

- `ringing_timeout_secs` (integer, optional, default: 60) — Hoe lang de ontvanger moet worden gebeld voordat wordt gestopt, in seconden. Dit wordt ook beperkt door de eigen beperkingen van de provider.
- `twilio_call_recording_enabled` (boolean, optional, default: false) — Of het gesprek moet worden opgenomen met Twilio-gespreksopname. Wordt genegeerd voor niet-Twilio-providers. Opnames worden opgeslagen in je Twilio-account.
- `twilio_machine_detection` (TwilioMachineDetectionConfig, optional, nullable) — Configuratie voor detectie van voicemail op providerniveau van Twilio (AMD). Laat weg of stel in op null om deze uit te schakelen. Wordt genegeerd voor niet-Twilio-providers en voor inkomende gesprekken. Het resulterende oordeel wordt geleverd als een eigen `answering_machine_detection`-webhookgebeurtenis. Hiervoor moet die gebeurtenis zijn ingeschakeld in de webhookinstellingen van de workspace of agent; deze maakt geen deel uit van het gesprek of de webhook na het gesprek. Detectie wordt asynchroon uitgevoerd, zodat deze de start van het gesprek nooit vertraagt. Het oordeel kan op elk moment tijdens het gesprek binnenkomen -- met `detect_message_end` zelfs nadat het gesprek is beëindigd. Twilio factureert AMD afzonderlijk.
- `mode` ("voice", optional, default: voice)

### SubmitWhatsAppChannelConfigModeConfig

- `mode`: `message` (SubmitWhatsAppMessageConfig)
  - `template` (SubmitWhatsAppTemplateRef, required) — Geeft de naam op van de goedgekeurde Meta-template die moet worden verstuurd. De server laadt de template zelf, dus de client levert de onderdelen ervan nooit aan.
- `mode`: `voice` (WhatsAppVoiceConfig)
  - `whatsapp_call_permission_request_template_language_code` (string, required) — De taalcode van die template.
  - `whatsapp_call_permission_request_template_name` (string, required) — De goedgekeurde template die de contactpersoon om toestemming vraagt om te bellen.

### CampaignResponseOutcomeDiscriminatorMappingDataCollectionEqualsItems

- string
- integer
- double
- boolean

### RetryPolicy

- `retry_delay_seconds` (integer, optional, default: 600) — Hoe lang er moet worden gewacht vóór een korte nieuwe poging.
- `max_short_retries` (integer, optional, default: 1) — Nieuwe pogingen die een belvenster toestaat na een mislukte oproep. Zodra deze zijn verbruikt, wacht de volgende nieuwe poging op het volgende venster, dat opnieuw begint.
- `max_total_calls` (integer, optional, default: 6) — Het maximale aantal oproepen dat een lead ontvangt, inclusief de eerste.
- `max_callbacks` (integer, optional, default: 2) — Het maximale aantal terugbelverzoeken dat voor één nummer wordt uitgevoerd.
- `max_redirects` (integer, optional, default: 2) — Het maximale aantal keren dat een lead een verzoek volgt om een ander nummer te bellen.
- `interval_placement` (enum, optional, default: start) — Waar een uitgestelde oproep in een later belvenster terechtkomt: bij de `start`, op een `random` tijdstip, of `rotate`d `rotate_step_seconds` na het punt waarop de laatste oproep in dat venster mislukte.
  - Allowed values: `start`, `random`, `rotate`
- `rotate_step_seconds` (integer, optional, default: 900) — Hoeveel posities `rotate` elke oproep verplaatst. Alleen gebruikt door `rotate`.
- `max_consecutive_failures_per_number` (integer, optional, nullable) — Oproepen naar één nummer die achter elkaar mogen mislukken voordat de lead doorgaat naar het volgende opgegeven nummer, of stopt als er geen volgend nummer is. Een beantwoorde oproep of een doorschakeling naar een nieuw nummer start de teller opnieuw. Als dit niet is ingesteld, geldt alleen `max_total_calls`.

### CallingPeriod

- `weekdays` (list of integer, required) — Dagen waarop de intervallen van toepassing zijn, van `0` (maandag) tot `6` (zondag).
- `intervals` (list of CallingIntervalPolicy, required) — Vensters op elk van die dagen. Ze mogen op geen enkele dag overlappen.

### DataCollectionConfig

De gegevensverzamelingsitems van de agent die follow-upoproepen sturen. Elk item gebruikt standaard het ingebouwde item voor dat doel; `null` schakelt het uit.

- `callback_time` (string, optional, nullable, default: __system_data_collection_callback_time) — Het item met het moment waarop de contactpersoon heeft gevraagd te worden teruggebeld.
- `redirect_phone_number` (string, optional, nullable, default: __system_data_collection_redirect_phone_number) — Het item met een ander nummer waarop de contactpersoon heeft gevraagd te worden gebeld.
- `stop` (string, optional, nullable, default: __system_data_collection_do_not_call) — Het item dat true is wanneer de contactpersoon heeft gevraagd niet opnieuw te worden gebeld.
- `mappings` (map from string to string, optional) — Kopieert resultaten van gegevensverzameling naar dynamische variabelen voor latere oproepen: elke sleutel is een ID van een gegevensverzamelingsitem en de waarde is de naam van de variabele.

### FollowupContextPolicy

Welke dynamische variabelen van `campaign__` vervolgoproepen krijgen.

- `call_type` (boolean, optional, default: true) — Geef het oproeptype door als `campaign__call_type`.
- `previous_conversation_id` (boolean, optional, default: true) — Geef de ID van het laatste gesprek door als `campaign__previous_conversation_id`.
- `previous_summary` (boolean, optional, default: true) — Geef de samenvatting van het laatste gesprek door als `campaign__previous_summary`.
- `previous_transcript` (boolean, optional, default: true) — Geef het transcript van het laatste gesprek door als `campaign__previous_transcript`.

### CampaignResponseChannelConfig

- `channel`: `phone` (PhoneChannelConfig)
  - `agent_phone_number_id` (string, required) — Het telefoonnummer waarmee wordt gebeld.
  - `mode_config` (PhoneVoiceConfig-Output, optional)
- `channel`: `whatsapp` (WhatsAppChannelConfig)
  - `mode_config` (WhatsAppChannelConfigModeConfig, required)
  - `whatsapp_phone_number_id` (string, required) — Het WhatsApp-telefoonnummer waarmee je belt of berichten verstuurt.

### CampaignPolicySnapshot

Het beleid dat de campagne gebruikte toen deze werd gemaakt, weergegeven zoals een ingediend `policy`.

- `timezone` (string, required)
- `retry` (RetryPolicy, required)
- `calling_periods` (list of CallingPeriodPolicy, required)
- `data_collection` (DataCollectionPolicy, required)
- `followup_context` (FollowupContextPolicy, required) — Welke dynamische variabelen van `campaign__` vervolgoproepen krijgen.

### CampaignResponseOutcome

Het resultaat dat als succes geldt voor de oproepen van de campagne.

- `type`: `data_collection` (DataCollectionOutcome)
  - `data_collection_id` (string, required) — Het gegevensverzamelingsitem van de agent dat een succesvolle oproep instelt.
  - `equals` (list of CampaignResponseOutcomeDiscriminatorMappingDataCollectionEqualsItems, required) — Waarden die als succes gelden, allemaal van het type van het item.
- `type`: `evaluation_criteria` (EvaluationCriterionOutcome)
  - `criteria_id` (string, required) — Het evaluatiecriterium van de agent waaraan een succesvolle oproep voldoet.

### CampaignSummaryCounts

- `leads` (integer, required)
- `terminal_leads` (integer, required) — Leads die niet opnieuw worden gebeld.
- `open_attention` (integer, required) — Aandachtspunten die nog niet zijn opgelost.
- `delivery` (RecipientDeliveryCounts, optional, nullable) — Hoeveel berichten elke fase hebben bereikt; ingesteld bij het ophalen van één berichtencampagne.

### ValidationErrorLocItems

- string
- integer

### ConversationConfigClientOverride-Input

- `asr` (ASRConversationalConfigOverride, optional, nullable) — Configuratie voor conversationele transcriptie
- `turn` (TurnConfigOverride, optional, nullable) — Configuratie voor beurtdetectie
- `tts` (TTSConversationalConfigOverride, optional, nullable) — Configuratie voor conversationele Text to Speech
- `conversation` (ConversationConfigOverride, optional, nullable) — Configuratie voor gespreksgebeurtenissen
- `agent` (AgentConfigOverride-Input, optional, nullable) — Agentspecifieke configuratie

### ConversationInitiationSourceInfo

Informatie over de bron van de gespreksstart

- `source` (enum, optional, nullable, default: unknown) — Bron van de gespreksstart
  - Allowed values: `unknown`, `android_sdk`, `node_js_sdk`, `react_native_sdk`, `react_sdk`, `js_sdk`, `python_sdk`, `widget`, `sip_trunk`, `twilio`, `exotel`, `genesys`, `avaya`, `audiocodes`, `swift_sdk`, `whatsapp`, `twilio_sms`, `flutter_sdk`, `zendesk_integration`, `slack_integration`, `telegram_integration`, `intercom_integration`, `freshdesk_integration`, `salesforce_integration`, `template_preview`, `genesys_bot_connector`, `subagent_tool`
- `version` (string, optional, nullable) — Het versienummer van de SDK

### TwilioMachineDetectionConfig

Hoe Twilio's detectie van antwoordapparaten op providerniveau (AMD) moet worden uitgevoerd voor een gesprek.

- `mode` (enum, optional, default: enable) — Hoe grondig de detectie moet zijn. `enable` retourneert een beoordeling zodra Twilio een mens van een machine kan onderscheiden. `detect_message_end` wacht ook tot de voicemailbegroeting is afgelopen, wat de `machine_end_*`-beoordelingen oplevert, maar retourneert later een resultaat.
  - Allowed values: `enable`, `detect_message_end`
- `actions` (list of TwilioMachineDetectionRule, optional) — Acties die tijdens het gesprek moeten worden uitgevoerd per AMD-beoordeling. Elke actie kan in maximaal één regel voorkomen, dus vermeld alle bijbehorende beoordelingen samen. Beoordelingen zonder regel laten het gesprek doorgaan.

### SubmitWhatsAppTemplateRef

Geeft de naam op van de goedgekeurde Meta-template die moet worden verstuurd. De server laadt de template zelf, dus de client levert de onderdelen ervan nooit aan.

- `name` (string, required)
- `language` (string, required) — De taalcode van de template, zoals `en_US`.

### CallingIntervalPolicy

- `start` (string, required) — Lokale starttijd als `HH:MM`.
- `end` (string, required) — Lokale eindtijd als `HH:MM`; `24:00` eindigt om middernacht.

### PhoneVoiceConfig-Output

- `ringing_timeout_secs` (integer, optional, default: 60) — Hoe lang de ontvanger moet worden gebeld voordat wordt gestopt, in seconden. Dit wordt ook beperkt door de eigen beperkingen van de provider.
- `twilio_call_recording_enabled` (boolean, optional, default: false) — Of het gesprek moet worden opgenomen met Twilio-gespreksopname. Wordt genegeerd voor niet-Twilio-providers. Opnames worden opgeslagen in je Twilio-account.
- `twilio_machine_detection` (TwilioMachineDetectionConfig, optional, nullable) — Configuratie voor detectie van voicemail op providerniveau van Twilio (AMD). Laat weg of stel in op null om deze uit te schakelen. Wordt genegeerd voor niet-Twilio-providers en voor inkomende gesprekken. Het resulterende oordeel wordt geleverd als een eigen `answering_machine_detection`-webhookgebeurtenis. Hiervoor moet die gebeurtenis zijn ingeschakeld in de webhookinstellingen van de workspace of agent; deze maakt geen deel uit van het gesprek of de webhook na het gesprek. Detectie wordt asynchroon uitgevoerd, zodat deze de start van het gesprek nooit vertraagt. Het oordeel kan op elk moment tijdens het gesprek binnenkomen -- met `detect_message_end` zelfs nadat het gesprek is beëindigd. Twilio factureert AMD afzonderlijk.
- `mode` ("voice", optional, default: voice)

### WhatsAppChannelConfigModeConfig

- `mode`: `message` (WhatsAppMessageConfig)
  - `template` (WhatsAppTemplate, required) — De Meta-template zoals deze bij indiening is goedgekeurd.
- `mode`: `voice` (WhatsAppVoiceConfig)
  - `whatsapp_call_permission_request_template_language_code` (string, required) — De taalcode van die template.
  - `whatsapp_call_permission_request_template_name` (string, required) — De goedgekeurde template die de contactpersoon om toestemming vraagt om te bellen.

### CallingPeriodPolicy

- `weekdays` (list of integer, required)
- `intervals` (list of CallingIntervalPolicy, required) — Vensters op elk van die dagen. Ze mogen op geen enkele dag overlappen.

### DataCollectionPolicy

- `callback_time` (string, optional, nullable)
- `redirect_phone_number` (string, optional, nullable)
- `stop` (string, optional, nullable)
- `mappings` (map from string to string, optional) — Kopieert resultaten van gegevensverzameling naar dynamische variabelen voor latere oproepen: elke sleutel is een ID van een gegevensverzamelingsitem en de waarde is de naam van de variabele.

### RecipientDeliveryCounts

- `sent` (integer, optional, default: 0)
- `delivered` (integer, optional, default: 0)
- `read` (integer, optional, default: 0)
- `replied` (integer, optional, default: 0)
- `failed` (integer, optional, default: 0)

### ASRConversationalConfigOverride

- `keywords` (list of string, optional, nullable) — Trefwoorden waarvoor de voorspellingskans moet worden verhoogd

### TurnConfigOverride

- `soft_timeout_config` (SoftTimeoutConfigOverride, optional, nullable) — Configuratie voor soft-time-outfunctionaliteit. Geeft direct feedback tijdens langere LLM-responses.
- `noisy_environment_message` (string, optional, nullable) — Wat de agent zegt wanneer deze een rumoerige omgeving detecteert.

### TTSConversationalConfigOverride

- `model_id` (enum, optional, nullable, default: eleven_v4_turbo) — Het model dat voor TTS moet worden gebruikt
  - Allowed values: `eleven_turbo_v2`, `eleven_turbo_v2_5`, `eleven_flash_v2`, `eleven_flash_v2_5`, `eleven_multilingual_v2`, `eleven_v3_conversational`, `eleven_v4`, `eleven_v4_turbo`
- `voice_id` (string, optional, nullable) — De stem-ID die voor TTS moet worden gebruikt
- `supported_voices` (list of SupportedVoice, optional, nullable) — Aanvullende ondersteunde stemmen voor de agent
- `stability` (double, optional, nullable) — De stabiliteit van gegenereerde spraak
- `speed` (double, optional, nullable) — De snelheid van gegenereerde spraak
- `similarity_boost` (double, optional, nullable) — De similariteitsboost voor gegenereerde spraak
- `pronunciation_dictionary_locators` (list of PydanticPronunciationDictionaryVersionLocator, optional, nullable) — De locators voor het uitspraakwoordenboek

### ConversationConfigOverride

- `text_only` (boolean, optional, nullable) — Als dit is ingeschakeld, wordt audio niet verwerkt en wordt alleen tekst gebruikt. Gebruik dit om audiokosten te vermijden.
- `max_duration_seconds` (integer, optional, nullable) — De maximale duur van een conversatie in seconden

### AgentConfigOverride-Input

- `first_message` (string, optional, nullable) — Als dit niet leeg is, het eerste bericht dat de agent uitspreekt. Als het leeg is, wacht de agent tot de gebruiker het gesprek start.
- `language` (string, optional, nullable) — Taal van de agent - gebruikt voor ASR en TTS
- `max_conversation_duration_message` (string, optional, nullable) — Als dit niet leeg is, het bericht dat de agent verstuurt wanneer de maximale gespreksduur is bereikt.
- `prompt` (PromptAgentAPIModelOverride-Input, optional, nullable) — De prompt voor de agent

### TwilioMachineDetectionRule

Actie die tijdens een livegesprek moet worden uitgevoerd voor de opgegeven AMD-beoordelingen.

- `action` (enum, required)
  - Allowed values: `hang_up`
- `answered_by` (list of enum, required) — Beoordelingen die de actie activeren.
  - Allowed values: `human`, `fax`, `unknown`, `machine_start`, `machine_end_beep`, `machine_end_silence`, `machine_end_other`

### WhatsAppTemplate

- `name` (string, required)
- `language` (string, required) — https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages
- `components` (list of WhatsAppTemplateComponent, required)
- `parameter_format` (enum, optional, default: POSITIONAL)
  - Allowed values: `POSITIONAL`, `NAMED`
- `category` (string, optional, nullable) — https://developers.facebook.com/docs/graph-api/reference/whats-app-business-account/message_templates/

### SoftTimeoutConfigOverride

- `message` (string, optional, nullable) — Bericht dat wordt weergegeven wanneer de eerste zachte time-out wordt bereikt tijdens het wachten op een reactie van de LLM. Ondersteunt dynamische variabelen (bijv. \{\{system\_\_time}}, \{\{custom\_variable}}).
- `additional_soft_timeout_messages` (list of string, optional, nullable) — Extra statische opvulberichten voor volgende soft time-outs in dezelfde LLM-generatie. De eerste time-out gebruikt `message`. Als er minder berichten zijn geconfigureerd dan `max_soft_timeouts_per_generation`, wordt het laatst geconfigureerde bericht herhaald; anders wordt een ingebouwd opvulbericht gebruikt.

### SupportedVoice

- `label` (string, required)
- `voice_id` (string, required)
- `description` (string, optional, nullable)
- `language` (string, optional, nullable)
- `model_family` (enum, optional, nullable)
  - Allowed values: `turbo`, `flash`, `multilingual`, `v3_conversational`, `v4`, `v4_turbo`
- `optimize_streaming_latency` (enum, optional, nullable)
  - Allowed values: `0`, `1`, `2`, `3`, `4`
- `stability` (double, optional, nullable)
- `speed` (double, optional, nullable)
- `similarity_boost` (double, optional, nullable)

### PydanticPronunciationDictionaryVersionLocator

Een locator waarmee andere documenten naar een specifiek woordenboek en de bijbehorende versie kunnen verwijzen. Dit is een pydantic-versie van PronunciationDictionaryVersionLocatorDBModel. Vereist om compatibiliteit met de overige datamodellen van de agent te waarborgen.

- `pronunciation_dictionary_id` (string, required) — De ID van het uitspraakwoordenboek
- `version_id` (string, required, nullable) — De ID van de versie van het uitspraakwoordenboek

### PromptAgentAPIModelOverride-Input

- `prompt` (string, optional, nullable) — De prompt voor de agent
- `llm` (enum, optional, nullable) — De LLM die met de prompt en de chatgeschiedenis moet worden bevraagd. Bij gebruik van dataresidency moet de LLM worden ondersteund in de dataresidencyomgeving.
  - Allowed values: `gpt-4o-mini`, `gpt-4o`, `gpt-4`, `gpt-4-turbo`, `gpt-4.1`, `gpt-4.1-mini`, `gpt-4.1-nano`, `gpt-5`, `gpt-5.1`, `gpt-5.2`, `gpt-5.2-chat-latest`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.5`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-6-astra`, `gpt-6-sol`, `gpt-6-luna`, `gpt-6.1-sol`, `gpt-6.1-terra`, `gpt-5-mini`, `gpt-5-nano`, `gpt-3.5-turbo`, `gemini-1.5-pro`, `gemini-1.5-flash`, `gemini-2.0-flash`, `gemini-2.0-flash-lite`, `gemini-2.5-flash-lite`, `gemini-2.5-flash`, `gemini-3-pro-preview`, `gemini-3-flash-preview`, `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite-preview`, `gemini-3.1-flash-lite`, `gemini-3.5-flash`, `gemini-3.5-flash-lite`, `gemini-3.6-flash`, `gemini-3.7-flash`, `gemini-3.8-flash`, `gemini-4-argon`, `claude-sonnet-4-5`, `claude-opus-4-6`, `claude-opus-4-7`, `claude-opus-4-8`, `claude-opus-5`, `claude-opus-5-5`, `claude-sonnet-4-6`, `claude-sonnet-5`, `claude-sonnet-5-5`, `claude-sonnet-4`, `claude-haiku-4-5`, `claude-haiku-5-5`, `claude-3-7-sonnet`, `claude-3-5-sonnet`, `claude-3-5-sonnet-v1`, `claude-3-haiku`, `grok-beta`, `custom-llm`, `qwen3-4b`, `qwen3-30b-a3b`, `qwen36-35b-a3b`, `qwen35-397b-a17b`, `gpt-oss-20b`, `gpt-oss-120b`, `glm-45-air-fp8`, `glm-52`, `deepseek-v41-flash`, `nemotron-35-super-vl-nvfp4`, `gemini-2.5-flash-preview-09-2025`, `gemini-2.5-flash-lite-preview-09-2025`, `gemini-2.5-flash-preview-05-20`, `gemini-2.5-flash-preview-04-17`, `gemini-2.5-flash-lite-preview-06-17`, `gemini-2.0-flash-lite-001`, `gemini-2.0-flash-001`, `gemini-1.5-flash-002`, `gemini-1.5-flash-001`, `gemini-1.5-pro-002`, `gemini-1.5-pro-001`, `claude-sonnet-4@20250514`, `claude-sonnet-4-5@20250929`, `claude-haiku-4-5@20251001`, `claude-3-7-sonnet@20250219`, `claude-3-5-sonnet@20240620`, `claude-3-5-sonnet-v2@20241022`, `claude-3-haiku@20240307`, `gpt-5-2025-08-07`, `gpt-5.1-2025-11-13`, `gpt-5.2-2025-12-11`, `gpt-5.4-2026-03-05`, `gpt-5.4-mini-2026-03-17`, `gpt-5.4-nano-2026-03-17`, `gpt-5.5-2026-04-23`, `gpt-5-mini-2025-08-07`, `gpt-5-nano-2025-08-07`, `gpt-4.1-2025-04-14`, `gpt-4.1-mini-2025-04-14`, `gpt-4.1-nano-2025-04-14`, `gpt-4o-mini-2024-07-18`, `gpt-4o-2024-11-20`, `gpt-4o-2024-08-06`, `gpt-4o-2024-05-13`, `gpt-4-0613`, `gpt-4-0314`, `gpt-4-turbo-2024-04-09`, `gpt-3.5-turbo-0125`, `gpt-3.5-turbo-1106`, `watt-tool-8b`, `watt-tool-70b`
- `tool_ids` (list of string, optional, nullable) — Een lijst met ID's van tools die door de agent worden gebruikt
- `tool_ids_strict` (boolean, optional, nullable) — Alleen van toepassing als overschrijving voor een gesprek en toegestaan wanneer tool_ids mag worden overschreven. Wanneer true is, bevat de overschreven tool_ids de volledige lijst met tools die in het gesprek zijn toegestaan, inclusief tools op workflownodes. Genegeerd wanneer ingesteld op de agent.
- `native_mcp_server_ids` (list of string, optional, nullable) — Een lijst met Native MCP-server-id's die door de agent moeten worden gebruikt
- `knowledge_base` (list of KnowledgeBaseLocator, optional, nullable) — Een lijst met kennisbanken die door de agent moeten worden gebruikt

### WhatsAppTemplateComponent

- `type` (string, required)
- `format` (string, optional, nullable)
- `text` (string, optional, nullable)
- `buttons` (list of WhatsAppTemplateComponentButton, optional, nullable)

### KnowledgeBaseLocator

- `type` (enum, required) — Het type kennisbank
  - Allowed values: `file`, `url`, `text`, `folder`
- `name` (string, required) — De naam van de kennisbank
- `id` (string, required) — De ID van de kennisbank
- `usage_mode` (enum, optional, default: auto) — De gebruiksmodus van de kennisbank
  - Allowed values: `prompt`, `auto`

### WhatsAppTemplateComponentButton

- `type` (string, required)
- `text` (string, optional, nullable)
- `url` (string, optional, nullable)

## Examples

**Request**

```json
{
  "call_name": "string",
  "agent_id": "string",
  "recipients": [
    {}
  ],
  "channel_config": {
    "agent_phone_number_id": "string"
  }
}
```

**Response**

```json
{
  "campaign": {
    "campaign_id": "string",
    "call_name": "string",
    "agent_id": "string",
    "channel_config": {
      "channel": "phone",
      "agent_phone_number_id": "string",
      "mode_config": {
        "ringing_timeout_secs": 60,
        "twilio_call_recording_enabled": false,
        "twilio_machine_detection": {
          "mode": "enable",
          "actions": [
            {
              "action": "hang_up",
              "answered_by": [
                "human"
              ]
            }
          ]
        },
        "mode": "voice"
      }
    },
    "status": "active",
    "policy": {
      "timezone": "string",
      "retry": {
        "retry_delay_seconds": 600,
        "max_short_retries": 1,
        "max_total_calls": 6,
        "max_callbacks": 2,
        "max_redirects": 2,
        "interval_placement": "start",
        "rotate_step_seconds": 900,
        "max_consecutive_failures_per_number": 1
      },
      "calling_periods": [
        {
          "weekdays": [
            1
          ],
          "intervals": [
            {
              "start": "string",
              "end": "string"
            }
          ]
        }
      ],
      "data_collection": {
        "callback_time": "string",
        "redirect_phone_number": "string",
        "stop": "string",
        "mappings": {}
      },
      "followup_context": {
        "call_type": true,
        "previous_conversation_id": true,
        "previous_summary": true,
        "previous_transcript": true
      }
    },
    "variant": "simple",
    "source": "ui",
    "outcome": {
      "type": "evaluation_criteria",
      "criteria_id": "string"
    },
    "created_at_unix": 1,
    "scheduled_time_unix": 1,
    "updated_at_unix": 1,
    "branch_id": "string",
    "environment": "string",
    "target_concurrency_limit": 1,
    "channel": "phone",
    "mode": "voice",
    "counts": {
      "leads": 1,
      "terminal_leads": 1,
      "open_attention": 1,
      "delivery": {
        "sent": 0,
        "delivered": 0,
        "read": 0,
        "replied": 0,
        "failed": 0
      }
    },
    "agent_name": ""
  },
  "created": true,
  "within_calling_window": true
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns/submit"

payload = {
    "call_name": "string",
    "agent_id": "string",
    "recipients": [{}],
    "channel_config": { "agent_phone_number_id": "string" }
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns/submit';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"call_name":"string","agent_id":"string","recipients":[{}],"channel_config":{"agent_phone_number_id":"string"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns/submit"

	payload := strings.NewReader("{\n  \"call_name\": \"string\",\n  \"agent_id\": \"string\",\n  \"recipients\": [\n    {}\n  ],\n  \"channel_config\": {\n    \"agent_phone_number_id\": \"string\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns/submit")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"call_name\": \"string\",\n  \"agent_id\": \"string\",\n  \"recipients\": [\n    {}\n  ],\n  \"channel_config\": {\n    \"agent_phone_number_id\": \"string\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns/submit")
  .header("Content-Type", "application/json")
  .body("{\n  \"call_name\": \"string\",\n  \"agent_id\": \"string\",\n  \"recipients\": [\n    {}\n  ],\n  \"channel_config\": {\n    \"agent_phone_number_id\": \"string\"\n  }\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns/submit', [
  'body' => '{
  "call_name": "string",
  "agent_id": "string",
  "recipients": [
    {}
  ],
  "channel_config": {
    "agent_phone_number_id": "string"
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns/submit");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"call_name\": \"string\",\n  \"agent_id\": \"string\",\n  \"recipients\": [\n    {}\n  ],\n  \"channel_config\": {\n    \"agent_phone_number_id\": \"string\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "call_name": "string",
  "agent_id": "string",
  "recipients": [[]],
  "channel_config": ["agent_phone_number_id": "string"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns/submit")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```