> 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.

# Utwórz kampanię wychodzącą

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

Utwórz kampanię wychodzącą, która dzwoni lub wysyła wiadomości do każdego odbiorcy z użyciem agenta, w oknach połączeń określonych przez zasady, ponawiając próby i wykonując follow-upy, jeśli zasady na to pozwalają. Dla nowej kampanii zwraca `201`. Powtórzone żądanie, dopasowane przez `idempotency_key` lub treść, zwraca istniejącą kampanię z `created` ustawionym na 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) — Nazwa kampanii.
- `agent_id` (string, required) — Agent wykonujący połączenia.
- `recipients` (list of SubmitCampaignRecipient, required) — Do kogo dzwonić. Każdy odbiorca staje się leadem kampanii.
- `channel_config` (SubmitCampaignRequestChannelConfig, required)
- `scheduled_time_unix` (integer, optional, nullable) — Kiedy rozpocząć dzwonienie; pomiń, aby rozpocząć teraz. Połączenia i tak czekają na kolejne okno połączeń.
- `timezone` (string, optional, nullable) — Strefa czasowa IANA, w której należy odczytywać okna połączeń, zastępująca tę z zasad.
- `branch_id` (string, optional, nullable) — Gałąź agenta, z którą należy wykonać połączenie.
- `environment` (string, optional, nullable) — Środowisko, w którym należy rozwiązać zmienne środowiskowe agenta.
- `target_concurrency_limit` (integer, optional, nullable) — Maksymalna liczba połączeń do wykonania jednocześnie.
- `idempotency_key` (string, optional, nullable) — Umożliwia bezpieczne ponowienie żądania: powtórzenie z tym samym kluczem zwraca utworzoną kampanię.
- `outcome` (SubmitCampaignRequestOutcome, optional, nullable) — Wynik uznawany za sukces połączeń kampanii.
- `policy` (PolicyConfig-Input, optional, nullable) — Zasady do zapisania w migawce kampanii. Jeśli są ustawione, mają pierwszeństwo przed domyślnymi zasadami workspace'u i nadpisaniami agenta; jeśli ich nie podano, musi istnieć konfiguracja workspace'u, która dostarczy zasady.
- `variant` (enum, optional, nullable) — `simple` wykonuje jedną próbę dla każdego odbiorcy, z zawsze aktywnymi oknami połączeń i bez zbierania danych; nie można go łączyć z `policy`. `advanced` używa `policy` lub konfiguracji workspace'u i jest domyślny dla kampanii telefonicznych.
  - Allowed values: `simple`, `advanced`

## Response

### 200

Pomyślna odpowiedź

- `campaign` (CampaignResponse, required)
- `created` (boolean, required) — False, gdy żądanie powtarza wcześniejsze i zwraca utworzoną przez nie kampanię.
- `within_calling_window` (boolean, required) — Czy dzwonienie zaczyna się od razu, a nie w następnym oknie połączeń.

## Errors

### 422 Unprocessable Entity Error

Błąd walidacji

- `detail` (list of ValidationError, optional)

## Types

### SubmitCampaignRecipient

- `phone_number` (string, optional, nullable) — Numer, na który należy zadzwonić, w formacie E.164, np. `+14155550100`.
- `phone_numbers` (list of string, optional, nullable) — Kolejne numery do wybrania, w kolejności po `phone_number`. Lead przechodzi do następnego, gdy połączenia z bieżącym numerem nadal się nie udają.
- `whatsapp_user_id` (string, optional, nullable) — ID użytkownika WhatsApp kontaktu. Kampanie WhatsApp używają go zamiast numerów telefonu.
- `id` (string, optional, nullable) — Twój identyfikator odbiorcy, zwracany jako `recipient_id` jego leada.
- `conversation_initiation_client_data` (ConversationInitiationClientDataRequest-Input, optional, nullable) — Zmienne dynamiczne i nadpisania dla połączeń z tym odbiorcą.

### SubmitCampaignRequestChannelConfig

- `channel`: `phone` (PhoneChannelConfig)
  - `agent_phone_number_id` (string, required) — Numer telefonu, z którego należy dzwonić.
  - `mode_config` (PhoneVoiceConfig-Input, optional)
- `channel`: `whatsapp` (SubmitWhatsAppChannelConfig)
  - `mode_config` (SubmitWhatsAppChannelConfigModeConfig, required)
  - `whatsapp_phone_number_id` (string, required) — Numer telefonu WhatsApp, z którego wykonywane są połączenia lub wysyłane wiadomości.

### SubmitCampaignRequestOutcome

Wynik uznawany za sukces połączeń kampanii.

- `type`: `data_collection` (DataCollectionOutcome)
  - `data_collection_id` (string, required) — Element zbierania danych agenta ustawiany przez udane połączenie.
  - `equals` (list of CampaignResponseOutcomeDiscriminatorMappingDataCollectionEqualsItems, required) — Wartości uznawane za sukces, wszystkie tego samego typu co element.
- `type`: `evaluation_criteria` (EvaluationCriterionOutcome)
  - `criteria_id` (string, required) — Kryterium oceny agenta spełniane przez udane połączenie.

### PolicyConfig-Input

- `timezone` (string, optional, default: UTC) — Strefa czasowa IANA, w której odczytywane są okresy połączeń.
- `retry` (RetryPolicy, optional)
- `calling_periods` (list of CallingPeriod, optional) — Tygodniowe okna, w których można wykonywać połączenia.
- `data_collection` (DataCollectionConfig, optional) — Elementy zbierania danych agenta, które kierują połączeniami follow-up. Każdy domyślnie używa wbudowanego elementu dla swojego celu; `null` go wyłącza.
- `followup_context` (FollowupContextPolicy, optional) — Które zmienne dynamiczne `campaign__` otrzymują połączenia kontynuacyjne.

### CampaignResponse

- `campaign_id` (string, required)
- `call_name` (string, required) — Nazwa kampanii.
- `agent_id` (string, required)
- `channel_config` (CampaignResponseChannelConfig, required)
- `status` (enum, required) — `attention` oznacza, że otwarta pozycja wymagająca uwagi wstrzymuje część połączeń kampanii, a pozostałe są realizowane. `stopping` oznacza, że połączenia w kolejce są anulowane, a rozpoczęte połączenia są kończone.
  - Allowed values: `active`, `paused`, `stopping`, `stopped`, `completed`, `failed`, `attention`
- `policy` (CampaignPolicySnapshot, required) — Polityka przyjęta przez kampanię podczas jej tworzenia.
- `variant` (enum, required)
  - Allowed values: `simple`, `advanced`
- `source` (enum, required, nullable) — Czy kampanię utworzono w aplikacji czy przez API.
  - Allowed values: `ui`, `api`
- `outcome` (CampaignResponseOutcome, required, nullable) — Wynik uznawany za sukces połączeń kampanii.
- `created_at_unix` (integer, required)
- `scheduled_time_unix` (integer, required, nullable) — Kiedy kampania zaczyna dzwonić; pozostaw puste, aby zaczęła po utworzeniu.
- `updated_at_unix` (integer, required)
- `branch_id` (string, required, nullable) — Gałąź agenta, z którą kampania wykonuje połączenia.
- `environment` (string, required, nullable) — Środowisko, w którym rozwiązywane są zmienne środowiskowe agenta.
- `target_concurrency_limit` (integer, required, nullable) — Maksymalna liczba połączeń wykonywanych jednocześnie przez kampanię.
- `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 użytkownika końcowego uczestniczącego w tej rozmowie (do identyfikacji użytkownika właściciela agenta)
- `source_info` (ConversationInitiationSourceInfo, optional) — Informacje o źródle rozpoczęcia rozmowy
- `branch_id` (string, optional, nullable) — ID gałęzi agenta do użycia w tej rozmowie
- `environment` (string, optional, nullable) — Środowisko używane do rozwiązywania zmiennych środowiskowych
- `starting_workflow_node_id` (string, optional, nullable) — Jeśli ustawione, uruchamia workflow od węzła o tym identyfikatorze zamiast od domyślnego punktu wejścia.
- `procedure_ids` (list of string, optional, nullable) — Jeśli ustawione, agentowi rozpoczynającemu rozmowę będą dostępne tylko te procedury. Każdy identyfikator musi być przypisany do tego agenta; nieznane identyfikatory uniemożliwią rozpoczęcie rozmowy. Pusta lista wyłącza wszystkie procedury tego agenta. Nie dotyczy po przekazaniu rozmowy innemu agentowi. Wymaga enable_procedure_ids_from_client.
- `start_procedure_ids` (list of string, optional, nullable) — Jeśli ustawione, te procedury w dowolnej formie uruchomią się wraz z rozpoczęciem rozmowy. Akceptuje maksymalnie pięć ID. Każde ID musi być dostępne po zastosowaniu procedure_ids. Nieznane ID i procedury strukturalne uniemożliwiają rozpoczęcie rozmowy. Wymaga enable_procedure_ids_from_client.
- `dynamic_variables` (map from string to any, optional)

### PhoneVoiceConfig-Input

- `ringing_timeout_secs` (integer, optional, default: 60) — Jak długo dzwonić do odbiorcy przed zakończeniem próby, w sekundach. Ograniczenia dostawcy również mają zastosowanie.
- `twilio_call_recording_enabled` (boolean, optional, default: false) — Czy nagrywać rozmowę za pomocą nagrywania połączeń Twilio. Ignorowane w przypadku dostawców innych niż Twilio. Nagrania są przechowywane na twoim koncie Twilio.
- `twilio_machine_detection` (TwilioMachineDetectionConfig, optional, nullable) — Konfiguracja wykrywania automatycznej sekretarki (AMD) Twilio na poziomie operatora. Pomiń ją lub ustaw na null, aby ją wyłączyć. Jest ignorowana dla dostawców innych niż Twilio oraz połączeń przychodzących. Wynik jest dostarczany jako osobne zdarzenie webhooka `answering_machine_detection`, które musi być włączone w ustawieniach webhooków obszaru roboczego lub agenta; nie jest częścią rozmowy ani webhooka po połączeniu. Wykrywanie działa asynchronicznie, więc nigdy nie opóźnia rozpoczęcia rozmowy, a wynik może nadejść w dowolnym momencie połączenia — przy `detect_message_end` nawet po jego zakończeniu. Twilio nalicza osobną opłatę za AMD.
- `mode` ("voice", optional, default: voice)

### SubmitWhatsAppChannelConfigModeConfig

- `mode`: `message` (SubmitWhatsAppMessageConfig)
  - `template` (SubmitWhatsAppTemplateRef, required) — Określa nazwę zatwierdzonego szablonu Meta do wysłania. Serwer sam ładuje szablon, więc klient nie przekazuje jego komponentów.
- `mode`: `voice` (WhatsAppVoiceConfig)
  - `whatsapp_call_permission_request_template_language_code` (string, required) — Kod języka tego szablonu.
  - `whatsapp_call_permission_request_template_name` (string, required) — Zatwierdzony szablon, który prosi kontakt o zgodę na połączenie.

### CampaignResponseOutcomeDiscriminatorMappingDataCollectionEqualsItems

- string
- integer
- double
- boolean

### RetryPolicy

- `retry_delay_seconds` (integer, optional, default: 600) — Jak długo czekać przed krótką ponowną próbą.
- `max_short_retries` (integer, optional, default: 1) — Liczba ponownych prób dozwolonych przez okno połączeń po nieudanym połączeniu. Po wykorzystaniu limitu kolejna próba czeka na następne okno, które zaczyna się od nowa.
- `max_total_calls` (integer, optional, default: 6) — Maksymalna liczba połączeń z leadem, wliczając pierwsze.
- `max_callbacks` (integer, optional, default: 2) — Maksymalna liczba oddzwonień do obsłużenia dla jednego numeru.
- `max_redirects` (integer, optional, default: 2) — Maksymalna liczba razy, gdy lead realizuje prośbę o połączenie z innym numerem.
- `interval_placement` (enum, optional, default: start) — Gdzie w późniejszym oknie połączeń trafi przełożone połączenie: na jego `start`, w `random` czasie lub `rotate`d o `rotate_step_seconds` od miejsca, w którym nie powiodło się ostatnie połączenie w tym oknie.
  - Allowed values: `start`, `random`, `rotate`
- `rotate_step_seconds` (integer, optional, default: 900) — O ile umieszczenie `rotate` przesuwa każde połączenie. Używane tylko przez `rotate`.
- `max_consecutive_failures_per_number` (integer, optional, nullable) — Liczba kolejnych nieudanych połączeń z jednym numerem, zanim lead przejdzie do następnego numeru na liście lub zakończy się, jeśli go nie ma. Odebrane połączenie lub przekierowanie na nowy numer resetuje licznik. Brak wartości pozostawia tylko `max_total_calls`.

### CallingPeriod

- `weekdays` (list of integer, required) — Dni, w których obowiązują przedziały, od `0` (poniedziałek) do `6` (niedziela).
- `intervals` (list of CallingIntervalPolicy, required) — Okna w każdym z tych dni. Nie mogą nakładać się w żadnym dniu.

### DataCollectionConfig

Elementy zbierania danych agenta, które kierują połączeniami follow-up. Każdy domyślnie używa wbudowanego elementu dla swojego celu; `null` go wyłącza.

- `callback_time` (string, optional, nullable, default: __system_data_collection_callback_time) — Element zawierający termin, w którym kontakt poprosił o oddzwonienie.
- `redirect_phone_number` (string, optional, nullable, default: __system_data_collection_redirect_phone_number) — Element zawierający inny numer, na który kontakt poprosił o połączenie.
- `stop` (string, optional, nullable, default: __system_data_collection_do_not_call) — Element, który ma wartość true, gdy kontakt poprosił o brak kolejnych połączeń.
- `mappings` (map from string to string, optional) — Kopiuje wyniki zbierania danych do zmiennych dynamicznych na potrzeby późniejszych połączeń: każdy klucz to ID elementu zbierania danych, a jego wartość to nazwa zmiennej.

### FollowupContextPolicy

Które zmienne dynamiczne `campaign__` otrzymują połączenia kontynuacyjne.

- `call_type` (boolean, optional, default: true) — Przekaż typ połączenia jako `campaign__call_type`.
- `previous_conversation_id` (boolean, optional, default: true) — Przekaż ID ostatniej rozmowy jako `campaign__previous_conversation_id`.
- `previous_summary` (boolean, optional, default: true) — Przekaż podsumowanie ostatniej rozmowy jako `campaign__previous_summary`.
- `previous_transcript` (boolean, optional, default: true) — Przekaż transkrypcję ostatniej rozmowy jako `campaign__previous_transcript`.

### CampaignResponseChannelConfig

- `channel`: `phone` (PhoneChannelConfig)
  - `agent_phone_number_id` (string, required) — Numer telefonu, z którego należy dzwonić.
  - `mode_config` (PhoneVoiceConfig-Output, optional)
- `channel`: `whatsapp` (WhatsAppChannelConfig)
  - `mode_config` (WhatsAppChannelConfigModeConfig, required)
  - `whatsapp_phone_number_id` (string, required) — Numer telefonu WhatsApp, z którego wykonywane są połączenia lub wysyłane wiadomości.

### CampaignPolicySnapshot

Polityka przyjęta przez kampanię podczas jej tworzenia, przedstawiona jak przesłana `policy`.

- `timezone` (string, required)
- `retry` (RetryPolicy, required)
- `calling_periods` (list of CallingPeriodPolicy, required)
- `data_collection` (DataCollectionPolicy, required)
- `followup_context` (FollowupContextPolicy, required) — Które zmienne dynamiczne `campaign__` otrzymują połączenia kontynuacyjne.

### CampaignResponseOutcome

Wynik uznawany za sukces połączeń kampanii.

- `type`: `data_collection` (DataCollectionOutcome)
  - `data_collection_id` (string, required) — Element zbierania danych agenta ustawiany przez udane połączenie.
  - `equals` (list of CampaignResponseOutcomeDiscriminatorMappingDataCollectionEqualsItems, required) — Wartości uznawane za sukces, wszystkie tego samego typu co element.
- `type`: `evaluation_criteria` (EvaluationCriterionOutcome)
  - `criteria_id` (string, required) — Kryterium oceny agenta spełniane przez udane połączenie.

### CampaignSummaryCounts

- `leads` (integer, required)
- `terminal_leads` (integer, required) — Leady, do których nie będzie kolejnych połączeń.
- `open_attention` (integer, required) — Pozycje wymagające uwagi, które nie zostały jeszcze rozwiązane.
- `delivery` (RecipientDeliveryCounts, optional, nullable) — Liczba wiadomości, które osiągnęły każdy etap; ustawiane podczas pobierania jednej kampanii wiadomości.

### ValidationErrorLocItems

- string
- integer

### ConversationConfigClientOverride-Input

- `asr` (ASRConversationalConfigOverride, optional, nullable) — Konfiguracja transkrypcji rozmowy
- `turn` (TurnConfigOverride, optional, nullable) — Konfiguracja wykrywania tury
- `tts` (TTSConversationalConfigOverride, optional, nullable) — Konfiguracja zamiany tekstu na mowę w rozmowie
- `conversation` (ConversationConfigOverride, optional, nullable) — Konfiguracja zdarzeń rozmowy
- `agent` (AgentConfigOverride-Input, optional, nullable) — Konfiguracja agenta

### ConversationInitiationSourceInfo

Informacje o źródle rozpoczęcia rozmowy

- `source` (enum, optional, nullable, default: unknown) — Źródło rozpoczęcia rozmowy
  - 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) — Numer wersji SDK

### TwilioMachineDetectionConfig

Jak uruchomić wykrywanie automatycznej sekretarki (AMD) Twilio na poziomie operatora podczas połączenia.

- `mode` (enum, optional, default: enable) — Jak dokładne ma być wykrywanie. `enable` zwraca wynik, gdy tylko Twilio rozpozna człowieka lub maszynę. `detect_message_end` czeka też na zakończenie powitania poczty głosowej, co pozwala uzyskać wyniki `machine_end_*`, ale zwraca rezultat później.
  - Allowed values: `enable`, `detect_message_end`
- `actions` (list of TwilioMachineDetectionRule, optional) — Działania do wykonania podczas połączenia dla każdego werdyktu AMD. Każde działanie może wystąpić najwyżej w jednej regule, dlatego wymień razem wszystkie odpowiadające mu werdykty. Werdykty bez reguły nie kończą połączenia.

### SubmitWhatsAppTemplateRef

Określa nazwę zatwierdzonego szablonu Meta do wysłania. Serwer sam ładuje szablon, więc klient nie przekazuje jego komponentów.

- `name` (string, required)
- `language` (string, required) — Kod języka szablonu, np. `en_US`.

### CallingIntervalPolicy

- `start` (string, required) — Lokalna godzina rozpoczęcia w formacie `HH:MM`.
- `end` (string, required) — Lokalna godzina zakończenia w formacie `HH:MM`; `24:00` oznacza północ.

### PhoneVoiceConfig-Output

- `ringing_timeout_secs` (integer, optional, default: 60) — Jak długo dzwonić do odbiorcy przed zakończeniem próby, w sekundach. Ograniczenia dostawcy również mają zastosowanie.
- `twilio_call_recording_enabled` (boolean, optional, default: false) — Czy nagrywać rozmowę za pomocą nagrywania połączeń Twilio. Ignorowane w przypadku dostawców innych niż Twilio. Nagrania są przechowywane na twoim koncie Twilio.
- `twilio_machine_detection` (TwilioMachineDetectionConfig, optional, nullable) — Konfiguracja wykrywania automatycznej sekretarki (AMD) Twilio na poziomie operatora. Pomiń ją lub ustaw na null, aby ją wyłączyć. Jest ignorowana dla dostawców innych niż Twilio oraz połączeń przychodzących. Wynik jest dostarczany jako osobne zdarzenie webhooka `answering_machine_detection`, które musi być włączone w ustawieniach webhooków obszaru roboczego lub agenta; nie jest częścią rozmowy ani webhooka po połączeniu. Wykrywanie działa asynchronicznie, więc nigdy nie opóźnia rozpoczęcia rozmowy, a wynik może nadejść w dowolnym momencie połączenia — przy `detect_message_end` nawet po jego zakończeniu. Twilio nalicza osobną opłatę za AMD.
- `mode` ("voice", optional, default: voice)

### WhatsAppChannelConfigModeConfig

- `mode`: `message` (WhatsAppMessageConfig)
  - `template` (WhatsAppTemplate, required) — Szablon Meta w wersji zatwierdzonej podczas przesyłania.
- `mode`: `voice` (WhatsAppVoiceConfig)
  - `whatsapp_call_permission_request_template_language_code` (string, required) — Kod języka tego szablonu.
  - `whatsapp_call_permission_request_template_name` (string, required) — Zatwierdzony szablon, który prosi kontakt o zgodę na połączenie.

### CallingPeriodPolicy

- `weekdays` (list of integer, required)
- `intervals` (list of CallingIntervalPolicy, required) — Okna w każdym z tych dni. Nie mogą nakładać się w żadnym dniu.

### DataCollectionPolicy

- `callback_time` (string, optional, nullable)
- `redirect_phone_number` (string, optional, nullable)
- `stop` (string, optional, nullable)
- `mappings` (map from string to string, optional) — Kopiuje wyniki zbierania danych do zmiennych dynamicznych na potrzeby późniejszych połączeń: każdy klucz to ID elementu zbierania danych, a jego wartość to nazwa zmiennej.

### 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) — Słowa kluczowe zwiększające prawdopodobieństwo predykcji

### TurnConfigOverride

- `soft_timeout_config` (SoftTimeoutConfigOverride, optional, nullable) — Konfiguracja miękkiego limitu czasu. Zapewnia natychmiastową informację zwrotną podczas dłuższych odpowiedzi LLM.
- `noisy_environment_message` (string, optional, nullable) — Co agent mówi po wykryciu hałaśliwego otoczenia.

### TTSConversationalConfigOverride

- `model_id` (enum, optional, nullable, default: eleven_v4_turbo) — Model do użycia w TTS
  - 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) — ID głosu do użycia w TTS
- `supported_voices` (list of SupportedVoice, optional, nullable) — Dodatkowe głosy obsługiwane przez agenta
- `stability` (double, optional, nullable) — Stabilność wygenerowanej mowy
- `speed` (double, optional, nullable) — Szybkość wygenerowanej mowy
- `similarity_boost` (double, optional, nullable) — Wzmocnienie podobieństwa dla wygenerowanej mowy
- `pronunciation_dictionary_locators` (list of PydanticPronunciationDictionaryVersionLocator, optional, nullable) — Lokalizatory słownika wymowy

### ConversationConfigOverride

- `text_only` (boolean, optional, nullable) — Jeśli włączone, audio nie będzie przetwarzane i użyty zostanie tylko tekst. Użyj, aby uniknąć opłat za audio.
- `max_duration_seconds` (integer, optional, nullable) — Maksymalny czas trwania rozmowy w sekundach

### AgentConfigOverride-Input

- `first_message` (string, optional, nullable) — Jeśli nie jest puste, pierwsza wiadomość, którą wypowie agent. Jeśli jest puste, agent czeka, aż użytkownik rozpocznie rozmowę.
- `language` (string, optional, nullable) — Język agenta — używany przez ASR i TTS
- `max_conversation_duration_message` (string, optional, nullable) — Jeśli nie jest puste, wiadomość, którą agent wyśle po osiągnięciu maksymalnego czasu trwania rozmowy.
- `prompt` (PromptAgentAPIModelOverride-Input, optional, nullable) — Prompt dla agenta

### TwilioMachineDetectionRule

Działanie do wykonania podczas aktywnego połączenia dla danych werdyktów AMD.

- `action` (enum, required)
  - Allowed values: `hang_up`
- `answered_by` (list of enum, required) — Werdykty wywołujące działanie.
  - 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) — Wiadomość wyświetlana po osiągnięciu pierwszego miękkiego limitu czasu podczas oczekiwania na odpowiedź LLM. Obsługuje zmienne dynamiczne (np. \{\{system\_\_time}}, \{\{custom\_variable}}).
- `additional_soft_timeout_messages` (list of string, optional, nullable) — Dodatkowe statyczne komunikaty wypełniające dla kolejnych miękkich limitów czasu w tej samej generacji LLM. Pierwszy limit czasu używa `message`. Jeśli skonfigurowano mniej komunikatów niż `max_soft_timeouts_per_generation`, ostatni skonfigurowany komunikat jest powtarzany; w przeciwnym razie używany jest wbudowany komunikat wypełniający.

### 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

Lokalizator umożliwiający innym dokumentom odwoływanie się do konkretnego słownika i jego wersji. To wersja pydantic modelu PronunciationDictionaryVersionLocatorDBModel. Wymagany do zachowania zgodności z pozostałymi modelami danych agenta.

- `pronunciation_dictionary_id` (string, required) — ID słownika wymowy
- `version_id` (string, required, nullable) — ID wersji słownika wymowy

### PromptAgentAPIModelOverride-Input

- `prompt` (string, optional, nullable) — Prompt dla agenta
- `llm` (enum, optional, nullable) — LLM, który otrzyma prompt i historię czatu. Jeśli używasz rezydencji danych, LLM musi być obsługiwany w tym środowisku.
  - 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) — Lista identyfikatorów narzędzi używanych przez agenta.
- `tool_ids_strict` (boolean, optional, nullable) — Dotyczy tylko nadpisania w rozmowie i jest dozwolone wszędzie tam, gdzie można nadpisać tool_ids. Gdy ma wartość true, nadpisane tool_ids to pełna lista narzędzi dozwolonych w rozmowie, w tym narzędzi w węzłach workflow. Ignorowane, gdy ustawione na agencie.
- `native_mcp_server_ids` (list of string, optional, nullable) — Lista identyfikatorów natywnych serwerów MCP, z których ma korzystać agent
- `knowledge_base` (list of KnowledgeBaseLocator, optional, nullable) — Lista baz wiedzy, z których ma korzystać agent

### WhatsAppTemplateComponent

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

### KnowledgeBaseLocator

- `type` (enum, required) — Typ bazy wiedzy
  - Allowed values: `file`, `url`, `text`, `folder`
- `name` (string, required) — Nazwa bazy wiedzy
- `id` (string, required) — ID bazy wiedzy
- `usage_mode` (enum, optional, default: auto) — Tryb użycia bazy wiedzy
  - 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()
```