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

# Créer une campagne d'appels sortants

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

Crée une campagne sortante qui appelle ou contacte chaque destinataire par message avec l'agent, durant les plages d'appel de la politique, en effectuant de nouvelles tentatives et des suivis dans les limites autorisées. Renvoie `201` pour une nouvelle campagne. Une requête répétée, identifiée par `idempotency_key` ou par son corps, renvoie la campagne existante avec `created` défini sur false.

Reference: https://elevenlabs.io/docs/eleven-agents/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 an object.

- `call_name` (string, required) — Nom de la campagne.
- `agent_id` (string, required) — Agent qui passe les appels.
- `recipients` (list of SubmitCampaignRecipient, required) — Personnes à appeler. Chaque destinataire devient un prospect de la campagne.
- `channel_config` (SubmitCampaignRequestChannelConfig, required)
- `scheduled_time_unix` (integer, optional) — Date et heure auxquelles commencer à appeler ; omettez ce champ pour commencer immédiatement. Les appels attendent toutefois la prochaine plage d’appel.
- `timezone` (string, optional) — Fuseau horaire IANA dans lequel interpréter les plages d'appel, remplaçant celui de la politique.
- `branch_id` (string, optional) — Branche de l'agent à utiliser pour appeler.
- `environment` (string, optional) — Environnement dans lequel résoudre les variables d'environnement de l'agent.
- `target_concurrency_limit` (integer, optional) — Nombre maximal d'appels à passer simultanément.
- `idempotency_key` (string, optional) — Permet de répéter la requête sans risque : une répétition avec la même clé renvoie la campagne qu'elle a créée.
- `outcome` (SubmitCampaignRequestOutcome, optional) — Le résultat considéré comme une réussite pour les appels de la campagne.
- `policy` (PolicyConfigInput, optional) — Politique à capturer dans l'instantané de la campagne. Lorsqu'elle est définie, elle prévaut sur la valeur par défaut du Workspace et sur tout remplacement par agent ; lorsqu'elle est omise, la configuration du Workspace doit exister et fournit la politique.
- `variant` (enum, optional) — `simple` effectue une tentative par destinataire avec des plages d'appel toujours actives et sans collecte de données ; il ne peut pas être combiné avec `policy`. `advanced` utilise `policy` ou la configuration du Workspace et constitue la valeur par défaut des campagnes téléphoniques.
  - Allowed values: `simple`, `advanced`

## Response

### 200

Réponse réussie

- `campaign` (CampaignResponse, required)
- `created` (boolean, required) — False lorsque la requête répète une requête antérieure et renvoie sa campagne.
- `within_calling_window` (boolean, required) — Indique si les appels commencent immédiatement plutôt que lors de la prochaine plage d’appel.

## Errors

### 422 Outbound Campaigns Create Request Unprocessable Entity Error

Erreur de validation

- `detail` (list of ValidationError, optional)

## Types

### SubmitCampaignRecipient

- `phone_number` (string, optional) — Numéro à appeler, au format E.164, par exemple `+14155550100`.
- `phone_numbers` (list of string, optional) — Autres numéros à appeler, dans l'ordre après `phone_number`. Le prospect passe au suivant lorsque les appels vers son numéro actuel continuent d'échouer.
- `whatsapp_user_id` (string, optional) — ID utilisateur WhatsApp du contact. Les campagnes WhatsApp l'utilisent à la place des numéros de téléphone.
- `id` (string, optional) — Votre identifiant pour le destinataire, renvoyé comme `recipient_id` de son prospect.
- `conversation_initiation_client_data` (ConversationInitiationClientDataRequestInput, optional) — Variables dynamiques et remplacements pour les appels de ce destinataire.

### SubmitCampaignRequestChannelConfig

- `channel`: `phone`
  - `agent_phone_number_id` (string, required) — Numéro de téléphone depuis lequel appeler.
  - `mode_config` (PhoneVoiceConfigInput, optional)
- `channel`: `whatsapp`
  - `mode_config` (SubmitWhatsAppChannelConfigModeConfig, required)
  - `whatsapp_phone_number_id` (string, required) — Le numéro de téléphone WhatsApp depuis lequel appeler ou envoyer un message.

### SubmitCampaignRequestOutcome

- `type`: `data_collection`
  - `data_collection_id` (string, required) — Élément de collecte de données de l'agent qu'un appel réussi définit.
  - `equals` (list of DataCollectionOutcomeEqualsItem, required) — Valeurs considérées comme des réussites, toutes du type de l’élément.
- `type`: `evaluation_criteria`
  - `criteria_id` (string, required) — Critère d'évaluation de l'agent auquel répond un appel réussi.

### PolicyConfigInput

- `timezone` (string, optional, default: UTC) — Fuseau horaire IANA utilisé pour interpréter les périodes d'appel.
- `retry` (RetryPolicy, optional)
- `calling_periods` (list of CallingPeriod, optional) — Les plages hebdomadaires durant lesquelles les appels peuvent être effectués.
- `data_collection` (DataCollectionConfig, optional) — Éléments de collecte de données de l'agent qui orientent les appels de suivi. Chacun utilise par défaut l'élément intégré correspondant à son objectif ; `null` le désactive.
- `followup_context` (FollowupContextPolicy, optional) — Variables dynamiques `campaign__` attribuées aux appels de suivi.

### CampaignResponse

- `campaign_id` (string, required)
- `call_name` (string, required) — Nom de la campagne.
- `agent_id` (string, required)
- `channel_config` (CampaignResponseChannelConfig, required)
- `status` (enum, required) — `attention` signifie qu'un élément d'attention ouvert bloque certains appels de la campagne, tandis que les autres se poursuivent. `stopping` signifie que les appels en attente sont annulés et que les appels déjà passés se terminent.
  - Allowed values: `active`, `paused`, `stopping`, `stopped`, `completed`, `failed`, `attention`
- `policy` (CampaignPolicySnapshot, required) — La stratégie adoptée par la campagne lors de sa création.
- `variant` (enum, required)
  - Allowed values: `simple`, `advanced`
- `created_at_unix` (integer, required)
- `updated_at_unix` (integer, required)
- `channel` (enum, required)
  - Allowed values: `phone`, `whatsapp`
- `mode` (enum, required)
  - Allowed values: `voice`, `message`
- `counts` (CampaignSummaryCounts, required)
- `agent_name` (string, required, default: )
- `source` (enum, optional) — Indique si la campagne a été créée dans l’application ou via l’API.
  - Allowed values: `ui`, `api`
- `outcome` (CampaignResponseOutcome, optional) — Le résultat considéré comme une réussite pour les appels de la campagne.
- `scheduled_time_unix` (integer, optional) — Date et heure auxquelles la campagne commence à appeler ; non défini pour démarrer dès sa création.
- `branch_id` (string, optional) — Branche de l'agent utilisée par la campagne pour les appels.
- `environment` (string, optional) — Environnement dans lequel les variables d'environnement de l'agent sont résolues.
- `target_concurrency_limit` (integer, optional) — Nombre maximal d'appels que la campagne passe simultanément.

### ValidationError

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

### ConversationInitiationClientDataRequestInput

- `conversation_config_override` (ConversationConfigClientOverrideInput, optional)
- `custom_llm_extra_body` (map from string to any, optional)
- `user_id` (string, optional) — ID de l’utilisateur final participant à cette conversation, pour l’identification de l’utilisateur propriétaire de l’agent
- `source_info` (ConversationInitiationSourceInfo, optional) — Informations sur l’origine de l’initiation de la conversation
- `branch_id` (string, optional) — ID de la branche d’agent à utiliser pour cette conversation
- `environment` (string, optional) — Environnement à utiliser pour résoudre les variables d'environnement
- `starting_workflow_node_id` (string, optional) — Si défini, démarre le workflow à cet ID de nœud au lieu du point d’entrée par défaut.
- `procedure_ids` (list of string, optional) — Si défini, seules ces procédures sont disponibles pour l’agent initial. Chaque ID doit être associé à cet agent ; les ID inconnus empêchent le démarrage de la conversation. Une liste vide désactive toutes les procédures de cet agent. Ne s’applique pas après un transfert d’agent. Nécessite enable_procedure_ids_from_client.
- `start_procedure_ids` (list of string, optional) — S'ils sont définis, ces processus libres démarrent au début de la conversation. Accepte au maximum cinq ID. Chaque ID doit être disponible après l'application de procedure_ids. Les ID inconnus et les processus structurés empêchent le démarrage de la conversation. Nécessite enable_procedure_ids_from_client.
- `dynamic_variables` (map from string to any, optional)

### PhoneVoiceConfigInput

- `ringing_timeout_secs` (integer, optional, default: 60) — Durée, en secondes, pendant laquelle faire sonner le destinataire avant d’abandonner. Cette durée est également limitée par les contraintes propres au fournisseur.
- `twilio_call_recording_enabled` (boolean, optional, default: false) — Indique s'il faut enregistrer l'appel à l'aide de l'enregistrement d'appels Twilio. Ignoré pour les fournisseurs autres que Twilio. Les enregistrements sont stockés dans votre compte Twilio.
- `twilio_machine_detection` (TwilioMachineDetectionConfig, optional) — Configuration de la détection de répondeur au niveau opérateur (AMD) de Twilio. Omettez-la ou définissez-la sur null pour la désactiver. Elle est ignorée pour les fournisseurs autres que Twilio et pour les appels entrants. Le verdict obtenu est transmis dans son propre événement webhook `answering_machine_detection`, ce qui exige que cet événement soit activé dans les paramètres de webhook du Workspace ou de l'agent ; il ne fait pas partie de la conversation ni du webhook post-appel. La détection s'exécute de manière asynchrone et ne retarde donc jamais le début de la conversation, et le verdict peut arriver à tout moment pendant l'appel, avec `detect_message_end`, même après sa fin. Twilio facture l'AMD séparément.
- `mode` ("voice", optional)

### SubmitWhatsAppChannelConfigModeConfig

- `mode`: `message`
  - `template` (SubmitWhatsAppTemplateRef, required) — Désigne le modèle Meta approuvé à envoyer. Le serveur charge lui-même le modèle, le client ne fournit donc jamais ses composants.
- `mode`: `voice`
  - `whatsapp_call_permission_request_template_language_code` (string, required) — Code de langue de ce modèle.
  - `whatsapp_call_permission_request_template_name` (string, required) — Modèle approuvé qui demande au contact l'autorisation d'appeler.

### DataCollectionOutcomeEqualsItem

- string
- integer
- double
- boolean

### RetryPolicy

- `retry_delay_seconds` (integer, optional, default: 600) — Délai d'attente avant une courte nouvelle tentative.
- `max_short_retries` (integer, optional, default: 1) — Nouvelles tentatives autorisées par une plage d'appel après un appel échoué. Une fois épuisées, la tentative suivante attend la plage suivante, dont le compteur repart à zéro.
- `max_total_calls` (integer, optional, default: 6) — Nombre maximal d'appels qu'un prospect peut recevoir, premier appel inclus.
- `max_callbacks` (integer, optional, default: 2) — Nombre maximal de rappels à honorer pour un même numéro.
- `max_redirects` (integer, optional, default: 2) — Nombre maximal de fois qu'un prospect suit une demande d'appel vers un autre numéro.
- `interval_placement` (enum, optional, default: start) — Positionnement d’un appel reporté dans une plage d’appel ultérieure : à son `start`, à une heure `random`, ou à `rotate_step_seconds` secondes, avec `rotate`, après l’endroit où le dernier appel de cette plage a échoué.
  - Allowed values: `start`, `random`, `rotate`
- `rotate_step_seconds` (integer, optional, default: 900) — Décalage appliqué à chaque appel par le placement `rotate`. Utilisé uniquement par `rotate`.
- `max_consecutive_failures_per_number` (integer, optional) — Nombre d'appels successifs vers un même numéro pouvant échouer avant que le prospect passe au numéro suivant de sa liste, ou s'arrête s'il n'y en a pas. Un appel abouti ou une redirection vers un nouveau numéro réinitialise le compteur. S'il n'est pas défini, seul `max_total_calls` s'applique.

### CallingPeriod

- `weekdays` (list of integer, required) — Jours auxquels les intervalles s'appliquent, de `0` (lundi) à `6` (dimanche).
- `intervals` (list of CallingIntervalPolicy, required) — Plages horaires pour chacun de ces jours. Elles ne peuvent pas se chevaucher au cours d’une même journée.

### DataCollectionConfig

Éléments de collecte de données de l'agent qui orientent les appels de suivi. Chacun utilise par défaut l'élément intégré correspondant à son objectif ; `null` le désactive.

- `callback_time` (string, optional) — Élément indiquant quand le contact a demandé à être rappelé.
- `redirect_phone_number` (string, optional) — Élément contenant l'autre numéro auquel le contact a demandé à être appelé.
- `stop` (string, optional) — Élément qui est vrai lorsque le contact a demandé à ne plus être appelé.
- `mappings` (map from string to string, optional) — Copie les résultats de collecte de données dans des variables dynamiques pour les appels ultérieurs : chaque clé est un ID d'élément de collecte de données et sa valeur est le nom de la variable.

### FollowupContextPolicy

Variables dynamiques `campaign__` attribuées aux appels de suivi.

- `call_type` (boolean, optional, default: true) — Transmettez le type d'appel en tant que `campaign__call_type`.
- `previous_conversation_id` (boolean, optional, default: true) — Transmettez l'ID de la dernière conversation en tant que `campaign__previous_conversation_id`.
- `previous_summary` (boolean, optional, default: true) — Transmettez le résumé de la dernière conversation en tant que `campaign__previous_summary`.
- `previous_transcript` (boolean, optional, default: true) — Transmettez la transcription de la dernière conversation en tant que `campaign__previous_transcript`.

### CampaignResponseChannelConfig

- `channel`: `phone`
  - `agent_phone_number_id` (string, required) — Numéro de téléphone depuis lequel appeler.
  - `mode_config` (PhoneVoiceConfigOutput, optional)
- `channel`: `whatsapp`
  - `mode_config` (WhatsAppChannelConfigModeConfig, required)
  - `whatsapp_phone_number_id` (string, required) — Le numéro de téléphone WhatsApp depuis lequel appeler ou envoyer un message.

### CampaignPolicySnapshot

La stratégie adoptée par la campagne lors de sa création, présentée comme une `policy` soumise.

- `timezone` (string, required)
- `retry` (RetryPolicy, required)
- `calling_periods` (list of CallingPeriodPolicy, required)
- `data_collection` (DataCollectionPolicy, required)
- `followup_context` (FollowupContextPolicy, required) — Variables dynamiques `campaign__` attribuées aux appels de suivi.

### CampaignSummaryCounts

- `leads` (integer, required)
- `terminal_leads` (integer, required) — Prospects qui ne seront plus appelés.
- `open_attention` (integer, required) — Éléments d'attention pas encore résolus.
- `delivery` (RecipientDeliveryCounts, optional) — Nombre de messages ayant atteint chaque étape ; défini lors de la récupération d'une campagne de messages.

### CampaignResponseOutcome

- `type`: `data_collection`
  - `data_collection_id` (string, required) — Élément de collecte de données de l'agent qu'un appel réussi définit.
  - `equals` (list of DataCollectionOutcomeEqualsItem, required) — Valeurs considérées comme des réussites, toutes du type de l’élément.
- `type`: `evaluation_criteria`
  - `criteria_id` (string, required) — Critère d'évaluation de l'agent auquel répond un appel réussi.

### ValidationErrorLocItem

- string
- integer

### ConversationConfigClientOverrideInput

- `asr` (AsrConversationalConfigOverride, optional) — Configuration de la transcription conversationnelle
- `turn` (TurnConfigOverride, optional) — Configuration de la détection des tours de parole
- `tts` (TtsConversationalConfigOverride, optional) — Configuration de la synthèse vocale conversationnelle
- `conversation` (ConversationConfigOverride, optional) — Configuration des événements conversationnels
- `agent` (AgentConfigOverrideInput, optional) — Configuration spécifique à l'agent

### ConversationInitiationSourceInfo

Informations sur l’origine de l’initiation de la conversation

- `source` (enum, optional, default: unknown) — Source de l’initiation de la conversation
  - 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) — Le numéro de version du SDK

### TwilioMachineDetectionConfig

Méthode d’exécution de la détection de répondeur au niveau de l’opérateur (AMD) de Twilio sur un appel.

- `mode` (enum, optional, default: enable) — Niveau de précision de la détection. `enable` renvoie un verdict dès que Twilio peut distinguer un humain d’une machine. `detect_message_end` attend également la fin du message d’accueil de la messagerie vocale, ce qui produit les verdicts `machine_end_*`, mais renvoie le résultat plus tard.
  - Allowed values: `enable`, `detect_message_end`
- `actions` (list of TwilioMachineDetectionRule, optional) — Actions à entreprendre lors de l’appel pour chaque verdict AMD. Chaque action ne peut figurer que dans une seule règle. Regroupez donc tous les verdicts correspondants. Les verdicts sans règle laissent l’appel se poursuivre.

### SubmitWhatsAppTemplateRef

Désigne le modèle Meta approuvé à envoyer. Le serveur charge lui-même le modèle, le client ne fournit donc jamais ses composants.

- `name` (string, required)
- `language` (string, required) — Le code de langue du modèle, par exemple `en_US`.

### CallingIntervalPolicy

- `start` (string, required) — Heure de début locale, au format `HH:MM`.
- `end` (string, required) — Heure de fin locale, au format `HH:MM` ; `24:00` correspond à minuit.

### PhoneVoiceConfigOutput

- `ringing_timeout_secs` (integer, optional, default: 60) — Durée, en secondes, pendant laquelle faire sonner le destinataire avant d’abandonner. Cette durée est également limitée par les contraintes propres au fournisseur.
- `twilio_call_recording_enabled` (boolean, optional, default: false) — Indique s'il faut enregistrer l'appel à l'aide de l'enregistrement d'appels Twilio. Ignoré pour les fournisseurs autres que Twilio. Les enregistrements sont stockés dans votre compte Twilio.
- `twilio_machine_detection` (TwilioMachineDetectionConfig, optional) — Configuration de la détection de répondeur au niveau opérateur (AMD) de Twilio. Omettez-la ou définissez-la sur null pour la désactiver. Elle est ignorée pour les fournisseurs autres que Twilio et pour les appels entrants. Le verdict obtenu est transmis dans son propre événement webhook `answering_machine_detection`, ce qui exige que cet événement soit activé dans les paramètres de webhook du Workspace ou de l'agent ; il ne fait pas partie de la conversation ni du webhook post-appel. La détection s'exécute de manière asynchrone et ne retarde donc jamais le début de la conversation, et le verdict peut arriver à tout moment pendant l'appel, avec `detect_message_end`, même après sa fin. Twilio facture l'AMD séparément.
- `mode` ("voice", optional)

### WhatsAppChannelConfigModeConfig

- `mode`: `message`
  - `template` (WhatsAppTemplate, required) — Modèle Meta tel qu'il a été approuvé lors de sa soumission.
- `mode`: `voice`
  - `whatsapp_call_permission_request_template_language_code` (string, required) — Code de langue de ce modèle.
  - `whatsapp_call_permission_request_template_name` (string, required) — Modèle approuvé qui demande au contact l'autorisation d'appeler.

### CallingPeriodPolicy

- `weekdays` (list of integer, required)
- `intervals` (list of CallingIntervalPolicy, required) — Plages horaires pour chacun de ces jours. Elles ne peuvent pas se chevaucher au cours d’une même journée.

### DataCollectionPolicy

- `callback_time` (string, optional)
- `redirect_phone_number` (string, optional)
- `stop` (string, optional)
- `mappings` (map from string to string, optional) — Copie les résultats de collecte de données dans des variables dynamiques pour les appels ultérieurs : chaque clé est un ID d'élément de collecte de données et sa valeur est le nom de la variable.

### 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) — Mots-clés dont la probabilité de prédiction doit être augmentée

### TurnConfigOverride

- `soft_timeout_config` (SoftTimeoutConfigOverride, optional) — Configuration de la fonctionnalité de délai d'expiration souple. Fournit un retour immédiat pendant les réponses plus longues des LLM.
- `noisy_environment_message` (string, optional) — Ce que l’agent dit lorsqu’il détecte un environnement bruyant.

### TtsConversationalConfigOverride

- `model_id` (enum, optional, default: eleven_v4_turbo) — Le modèle à utiliser pour le 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) — L’ID de voix à utiliser pour le TTS
- `supported_voices` (list of SupportedVoice, optional) — Voix supplémentaires prises en charge pour l'agent
- `stability` (double, optional) — La stabilité de la parole générée
- `speed` (double, optional) — La vitesse de la parole générée
- `similarity_boost` (double, optional) — L'amélioration de similarité pour la parole générée
- `pronunciation_dictionary_locators` (list of PydanticPronunciationDictionaryVersionLocator, optional) — Les localisateurs de dictionnaires de prononciation

### ConversationConfigOverride

- `text_only` (boolean, optional) — Si cette option est activée, l’audio ne sera pas traité et seul le texte sera utilisé, afin d’éviter la tarification audio.
- `max_duration_seconds` (integer, optional) — La durée maximale d’une conversation, en secondes

### AgentConfigOverrideInput

- `first_message` (string, optional) — S’il n’est pas vide, premier message que l’agent prononcera. S’il est vide, l’agent attend que l’utilisateur commence la discussion.
- `language` (string, optional) — Langue de l'agent, utilisée pour l'ASR et le TTS
- `max_conversation_duration_message` (string, optional) — S’il n’est pas vide, message que l’agent enverra lorsque la durée maximale de la conversation sera atteinte.
- `prompt` (PromptAgentApiModelOverrideInput, optional) — Le prompt de l’agent

### TwilioMachineDetectionRule

Action à entreprendre lors d’un appel en cours pour les verdicts AMD indiqués.

- `action` ("hang_up", required)
- `answered_by` (list of enum, required) — Verdicts qui déclenchent l’action.
  - 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) — https://developers.facebook.com/docs/graph-api/reference/whats-app-business-account/message_templates/

### SoftTimeoutConfigOverride

- `message` (string, optional) — Message à afficher lorsque le premier délai d’expiration souple est atteint pendant l’attente d’une réponse LLM. Prend en charge les variables dynamiques, par exemple \{\{system\_\_time}} et \{\{custom\_variable}}.
- `additional_soft_timeout_messages` (list of string, optional) — Messages statiques de remplissage supplémentaires pour les délais d'attente souples suivants dans la même génération LLM. Le premier délai utilise `message`. Si moins de messages sont configurés que `max_soft_timeouts_per_generation`, le dernier message configuré est répété ; sinon, un message de remplissage intégré est utilisé.

### SupportedVoice

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

### PydanticPronunciationDictionaryVersionLocator

Un localisateur permettant à d'autres documents de référencer un dictionnaire spécifique et sa version. Il s'agit d'une version Pydantic de PronunciationDictionaryVersionLocatorDBModel. Requis pour assurer la compatibilité avec les autres modèles de données de l'agent.

- `pronunciation_dictionary_id` (string, required) — L’ID du dictionnaire de prononciation
- `version_id` (string, optional) — L’ID de la version du dictionnaire de prononciation

### PromptAgentApiModelOverrideInput

- `prompt` (string, optional) — Le prompt de l’agent
- `llm` (enum, optional) — Le LLM à interroger avec le prompt et l’historique de discussion. En cas de résidence des données européenne, le LLM doit être pris en charge dans l’environnement de résidence des données.
  - 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) — Liste des ID des outils utilisés par l’agent.
- `tool_ids_strict` (boolean, optional) — Only applies as a conversation override, allowed whenever tool_ids may be overridden. When true, the overridden tool_ids is the full list of tools allowed in the conversation, including tools on workflow nodes. Ignored when set on the agent.
- `native_mcp_server_ids` (list of string, optional) — Liste des identifiants de serveurs MCP natifs à utiliser par l'agent
- `knowledge_base` (list of KnowledgeBaseLocator, optional) — Liste des bases de connaissances à utiliser par l'agent

### WhatsAppTemplateComponent

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

### KnowledgeBaseLocator

- `type` (enum, required) — Le type de base de connaissances.
  - Allowed values: `file`, `url`, `text`, `folder`
- `name` (string, required) — Le nom de la base de connaissances
- `id` (string, required) — L’ID de la base de connaissances
- `usage_mode` (enum, optional, default: auto) — Le mode d’utilisation de la base de connaissances
  - Allowed values: `prompt`, `auto`

### WhatsAppTemplateComponentButton

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

## Examples

**Request**

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

**Response**

```json
{
  "campaign": {
    "campaign_id": "campaign_id",
    "call_name": "call_name",
    "agent_id": "agent_id",
    "channel_config": {
      "channel": "phone",
      "agent_phone_number_id": "agent_phone_number_id"
    },
    "status": "active",
    "policy": {
      "timezone": "timezone",
      "retry": {},
      "calling_periods": [
        {
          "weekdays": [
            1
          ],
          "intervals": [
            {
              "start": "start",
              "end": "end"
            }
          ]
        }
      ],
      "data_collection": {},
      "followup_context": {}
    },
    "variant": "simple",
    "created_at_unix": 1,
    "updated_at_unix": 1,
    "channel": "phone",
    "mode": "voice",
    "counts": {
      "leads": 1,
      "terminal_leads": 1,
      "open_attention": 1
    },
    "agent_name": "agent_name",
    "source": "ui",
    "outcome": {
      "type": "data_collection",
      "data_collection_id": "data_collection_id",
      "equals": [
        "equals"
      ]
    },
    "scheduled_time_unix": 1,
    "branch_id": "branch_id",
    "environment": "environment",
    "target_concurrency_limit": 1
  },
  "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": "call_name",
    "agent_id": "agent_id",
    "recipients": [{}],
    "channel_config": {
        "channel": "phone",
        "agent_phone_number_id": "agent_phone_number_id"
    }
}
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":"call_name","agent_id":"agent_id","recipients":[{}],"channel_config":{"channel":"phone","agent_phone_number_id":"agent_phone_number_id"}}'
};

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\": \"call_name\",\n  \"agent_id\": \"agent_id\",\n  \"recipients\": [\n    {}\n  ],\n  \"channel_config\": {\n    \"channel\": \"phone\",\n    \"agent_phone_number_id\": \"agent_phone_number_id\"\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\": \"call_name\",\n  \"agent_id\": \"agent_id\",\n  \"recipients\": [\n    {}\n  ],\n  \"channel_config\": {\n    \"channel\": \"phone\",\n    \"agent_phone_number_id\": \"agent_phone_number_id\"\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\": \"call_name\",\n  \"agent_id\": \"agent_id\",\n  \"recipients\": [\n    {}\n  ],\n  \"channel_config\": {\n    \"channel\": \"phone\",\n    \"agent_phone_number_id\": \"agent_phone_number_id\"\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": "call_name",
  "agent_id": "agent_id",
  "recipients": [
    {}
  ],
  "channel_config": {
    "channel": "phone",
    "agent_phone_number_id": "agent_phone_number_id"
  }
}',
  '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\": \"call_name\",\n  \"agent_id\": \"agent_id\",\n  \"recipients\": [\n    {}\n  ],\n  \"channel_config\": {\n    \"channel\": \"phone\",\n    \"agent_phone_number_id\": \"agent_phone_number_id\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "call_name": "call_name",
  "agent_id": "agent_id",
  "recipients": [[]],
  "channel_config": [
    "channel": "phone",
    "agent_phone_number_id": "agent_phone_number_id"
  ]
] 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()
```