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

# Enumerar campañas salientes

GET https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns

Enumera las campañas salientes del espacio de trabajo, del más reciente al más antiguo.

Reference: https://elevenlabs.io/docs/eleven-agents/api-reference/campaigns/list

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

### Query parameters

- `page_size` (integer, optional, default: 100) — Número máximo de elementos que se devolverán.
- `status` (enum, optional) — Solo campañas con uno de estos estados.
  - Allowed values: `active`, `paused`, `stopping`, `stopped`, `completed`, `failed`, `attention`
- `agent_id` (string, optional) — Solo campañas ejecutadas por este agente.
- `channel` (enum, optional) — Solo campañas de este canal.
  - Allowed values: `phone`, `whatsapp`
- `mode` (enum, optional) — Solo campañas de voz o solo campañas de mensajes.
  - Allowed values: `voice`, `message`
- `search` (string, optional) — Solo campañas cuyo nombre contiene este texto.
- `cursor` (string, optional) — Se usa para obtener la página siguiente. El cursor se devuelve en la respuesta.

## Response

### 200

Respuesta correcta.

- `campaigns` (list of CampaignResponse, required)
- `has_more` (boolean, required)
- `next_cursor` (string, optional)

## Errors

### 422 Outbound Campaigns List Request Unprocessable Entity Error

Error de validación

- `detail` (list of ValidationError, optional)

## Types

### CampaignResponse

- `campaign_id` (string, required)
- `call_name` (string, required) — El nombre de la campaña.
- `agent_id` (string, required)
- `channel_config` (CampaignResponseChannelConfig, required)
- `status` (enum, required) — `attention` significa que un elemento de atención abierto retiene algunas llamadas de la campaña mientras las demás continúan. `stopping` significa que se cancelan las llamadas en cola y finalizan las ya realizadas.
  - Allowed values: `active`, `paused`, `stopping`, `stopped`, `completed`, `failed`, `attention`
- `policy` (CampaignPolicySnapshot, required) — La política que adoptó la campaña al crearse.
- `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) — Si la campaña se creó en la app o mediante la API.
  - Allowed values: `ui`, `api`
- `outcome` (CampaignResponseOutcome, optional) — El resultado que se considera exitoso para las llamadas de la campaña.
- `scheduled_time_unix` (integer, optional) — Cuándo empieza a llamar la campaña; déjalo sin definir para que empiece al crearse.
- `branch_id` (string, optional) — La rama del agente con la que llama la campaña.
- `environment` (string, optional) — El entorno en el que se resuelven las variables de entorno del agente.
- `target_concurrency_limit` (integer, optional) — El número máximo de llamadas que realiza la campaña a la vez.

### ValidationError

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

### CampaignResponseChannelConfig

- `channel`: `phone`
  - `agent_phone_number_id` (string, required) — El número de teléfono desde el que llamar.
  - `mode_config` (PhoneVoiceConfigOutput, optional)
- `channel`: `whatsapp`
  - `mode_config` (WhatsAppChannelConfigModeConfig, required)
  - `whatsapp_phone_number_id` (string, required) — El número de teléfono de WhatsApp desde el que llamar o enviar mensajes.

### CampaignPolicySnapshot

La política que adoptó la campaña al crearse, con la misma estructura que una `policy` enviada.

- `timezone` (string, required)
- `retry` (RetryPolicy, required)
- `calling_periods` (list of CallingPeriodPolicy, required)
- `data_collection` (DataCollectionPolicy, required)
- `followup_context` (FollowupContextPolicy, required) — Qué variables dinámicas `campaign__` reciben las llamadas de seguimiento.

### CampaignSummaryCounts

- `leads` (integer, required)
- `terminal_leads` (integer, required) — Contactos a los que no se volverá a llamar.
- `open_attention` (integer, required) — Elementos de atención aún no resueltos.
- `delivery` (RecipientDeliveryCounts, optional) — Cuántos mensajes han alcanzado cada fase; se establece al obtener una campaña de mensajes.

### CampaignResponseOutcome

- `type`: `data_collection`
  - `data_collection_id` (string, required) — El elemento de recopilación de datos del agente que establece una llamada satisfactoria.
  - `equals` (list of DataCollectionOutcomeEqualsItem, required) — Valores que se consideran exitosos, todos del tipo del elemento.
- `type`: `evaluation_criteria`
  - `criteria_id` (string, required) — El criterio de evaluación del agente que cumple una llamada satisfactoria.

### ValidationErrorLocItem

- string
- integer

### PhoneVoiceConfigOutput

- `ringing_timeout_secs` (integer, optional, default: 60) — Durante cuántos segundos sonará la llamada al destinatario antes de desistir. Ten en cuenta que también estará limitado por las restricciones del proveedor.
- `twilio_call_recording_enabled` (boolean, optional, default: false) — Si se graba la llamada mediante la grabación de llamadas de Twilio. Se ignora para proveedores que no sean Twilio. Las grabaciones se almacenan en tu cuenta de Twilio.
- `twilio_machine_detection` (TwilioMachineDetectionConfig, optional) — Configuración de la detección de contestadores automáticos (AMD) de Twilio a nivel de operador. Omítela o establécela en null para desactivarla. Se ignora para proveedores que no sean Twilio y para llamadas entrantes. El resultado se entrega como su propio evento de webhook `answering_machine_detection`, lo que requiere habilitar ese evento en la configuración de webhooks del espacio de trabajo o del agente; no forma parte de la conversación ni del webhook posterior a la llamada. La detección se ejecuta de forma asíncrona, por lo que nunca retrasa el inicio de la conversación, y el resultado puede llegar en cualquier momento durante la llamada -- con `detect_message_end`, incluso después de que haya finalizado. Twilio factura AMD por separado.
- `mode` ("voice", optional)

### WhatsAppChannelConfigModeConfig

- `mode`: `message`
  - `template` (WhatsAppTemplate, required) — La plantilla de Meta tal como se aprobó en el momento del envío.
- `mode`: `voice`
  - `whatsapp_call_permission_request_template_language_code` (string, required) — El código de idioma de esa plantilla.
  - `whatsapp_call_permission_request_template_name` (string, required) — La plantilla aprobada que solicita al contacto permiso para llamar.

### RetryPolicy

- `retry_delay_seconds` (integer, optional, default: 600) — Cuánto esperar antes de un reintento breve.
- `max_short_retries` (integer, optional, default: 1) — Reintentos que permite una franja de llamada tras una llamada fallida. Cuando se agotan, el siguiente reintento espera a la siguiente franja, que comienza de nuevo.
- `max_total_calls` (integer, optional, default: 6) — El número máximo de llamadas que recibe un contacto, incluida la primera.
- `max_callbacks` (integer, optional, default: 2) — El número máximo de devoluciones de llamada que se atenderán para un número.
- `max_redirects` (integer, optional, default: 2) — El número máximo de veces que un contacto sigue una solicitud para llamar a otro número.
- `interval_placement` (enum, optional, default: start) — En qué punto de una franja horaria posterior se realizará una llamada aplazada: en su `start`, en un momento `random` o con `rotate`, `rotate_step_seconds` después de donde falló la última llamada en esa franja.
  - Allowed values: `start`, `random`, `rotate`
- `rotate_step_seconds` (integer, optional, default: 900) — Cuánto desplaza cada llamada la asignación `rotate`. Solo se usa con `rotate`.
- `max_consecutive_failures_per_number` (integer, optional) — Llamadas consecutivas a un número que pueden fallar antes de que el contacto pase al siguiente número de su lista o finalice si no hay otro. Una llamada contestada o una redirección a un número nuevo reinicia el recuento. Si no se establece, solo se aplica `max_total_calls`.

### CallingPeriodPolicy

- `weekdays` (list of integer, required)
- `intervals` (list of CallingIntervalPolicy, required) — Franjas horarias en cada uno de esos días. No pueden solaparse en ningún día.

### DataCollectionPolicy

- `callback_time` (string, optional)
- `redirect_phone_number` (string, optional)
- `stop` (string, optional)
- `mappings` (map from string to string, optional) — Copia los resultados de recopilación de datos en variables dinámicas para llamadas posteriores: cada clave es un ID de elemento de recopilación de datos y su valor es el nombre de la variable.

### FollowupContextPolicy

Qué variables dinámicas `campaign__` reciben las llamadas de seguimiento.

- `call_type` (boolean, optional, default: true) — Pasa el tipo de llamada como `campaign__call_type`.
- `previous_conversation_id` (boolean, optional, default: true) — Pasa el ID de la última conversación como `campaign__previous_conversation_id`.
- `previous_summary` (boolean, optional, default: true) — Pasa el resumen de la última conversación como `campaign__previous_summary`.
- `previous_transcript` (boolean, optional, default: true) — Pasa la transcripción de la última conversación como `campaign__previous_transcript`.

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

### DataCollectionOutcomeEqualsItem

- string
- integer
- double
- boolean

### TwilioMachineDetectionConfig

Cómo ejecutar la detección de contestadores automáticos (AMD) a nivel de operador de Twilio en una llamada.

- `mode` (enum, optional, default: enable) — El grado de exhaustividad de la detección. `enable` devuelve un veredicto en cuanto Twilio puede distinguir a una persona de una máquina. `detect_message_end` también espera a que termine el saludo del buzón de voz, lo que produce los veredictos `machine_end_*`, pero devuelve el resultado más tarde.
  - Allowed values: `enable`, `detect_message_end`
- `actions` (list of TwilioMachineDetectionRule, optional) — Acciones que se deben realizar en la llamada según el veredicto de AMD. Cada acción puede aparecer como máximo en una regla, así que incluye todos sus veredictos juntos. Los veredictos sin regla dejan la llamada en curso.

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

### CallingIntervalPolicy

- `start` (string, required) — Hora local de inicio, como `HH:MM`.
- `end` (string, required) — Hora local de finalización, como `HH:MM`; `24:00` finaliza a medianoche.

### TwilioMachineDetectionRule

Acción que se debe realizar en una llamada en curso para los veredictos de AMD indicados.

- `action` ("hang_up", required)
- `answered_by` (list of enum, required) — Veredictos que activan la acción.
  - Allowed values: `human`, `fax`, `unknown`, `machine_start`, `machine_end_beep`, `machine_end_silence`, `machine_end_other`

### WhatsAppTemplateComponent

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

### WhatsAppTemplateComponentButton

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

## Examples

**Response**

```json
{
  "campaigns": [
    {
      "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
    }
  ],
  "has_more": true,
  "next_cursor": "next_cursor"
}
```

**SDK Code**

```python
import requests

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

querystring = {"agent_id":"agent_id","channel":"phone","cursor":"cursor","mode":"voice","page_size":"1","search":"search","status":"[\"active\"]"}

response = requests.get(url, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns?agent_id=agent_id&channel=phone&cursor=cursor&mode=voice&page_size=1&search=search&status=%5B%22active%22%5D';
const options = {method: 'GET'};

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"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns?agent_id=agent_id&channel=phone&cursor=cursor&mode=voice&page_size=1&search=search&status=%5B%22active%22%5D"

	req, _ := http.NewRequest("GET", url, nil)

	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?agent_id=agent_id&channel=phone&cursor=cursor&mode=voice&page_size=1&search=search&status=%5B%22active%22%5D")

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

request = Net::HTTP::Get.new(url)

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.get("https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns?agent_id=agent_id&channel=phone&cursor=cursor&mode=voice&page_size=1&search=search&status=%5B%22active%22%5D")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns?agent_id=agent_id&channel=phone&cursor=cursor&mode=voice&page_size=1&search=search&status=%5B%22active%22%5D');

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

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns?agent_id=agent_id&channel=phone&cursor=cursor&mode=voice&page_size=1&search=search&status=%5B%22active%22%5D");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/convai/outbound-campaigns/campaigns?agent_id=agent_id&channel=phone&cursor=cursor&mode=voice&page_size=1&search=search&status=%5B%22active%22%5D")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"

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()
```