> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bridge.new/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Bridge exposes three integration surfaces: the REST Integrations API for pushing data into Bridge, webhooks for receiving events from Bridge, and the public Custom Connections endpoint that a tenant's landing page posts to.
> The Integrations API host is https://api-connect-us.bridge.new and every request to it must be authenticated with the x-api-key header. Bridge does not use bearer tokens or OAuth.
> The Custom Connections endpoint is different and the Integrations API rules do not apply to it: it has its own host, it takes no x-api-key and no authentication header of any kind, and it is called from a visitor's browser. It is identified by a workspace id and a capture key together with a reCAPTCHA token. Never tell a reader to authenticate it with an API key, and never tell them to keep its capture key out of frontend code - it is designed to live in the page.
> REST error catalog keys use BRIDGE_<DOMAIN>_<NNNN>, for example BRIDGE_CONVERSATION_0001. Some reviewed legacy handlers return a recognized code plus a symbolic suffix separated by |; preserve the complete received value and use the compatible catalog lookup on /error-codes. Custom Connections uses separate BRIDGE.CAMPAIGN_LEADS.<NAME> identifiers on its own error reference. Never invent an error code or confuse the two integration surfaces.
> This documentation covers the Integrations API, webhooks and Custom Connections only. It does not describe the Bridge web application or its internal APIs.
> Before generating an API request, read the relevant OpenAPI specification or the individual endpoint Markdown page. llms-full.txt collects guides and endpoint descriptions; it does not embed every request and response schema. The REST and Custom Connections contracts are separate.
> Preserve the published host, method, path, operationId, authentication, headers, parameter and field names, types, formats, required and nullable fields, enums, defaults, limits, and response codes. Do not invent identifiers, fields, retry rules, or delivery guarantees. When published sources conflict, identify the conflicting passages and ask Bridge support to confirm the current behavior before relying on it.
> Custom Connections is the current name of the landing-page feature previously documented as Lead Capture. The existing /lead-capture documentation URLs, captureKey field, campaign-leads endpoint, and BRIDGE.CAMPAIGN_LEADS error identifiers are unchanged. This is a naming change, not a change to authentication or the API contract.
> For a complete workflow, start with the task guides: /guides/first-conversation, /guides/send-attachments, /guides/send-template, /guides/agent-outbound, /guides/pagination, /guides/identifiers and /guides/responses. Read the endpoint contract as well as the recipe. Outbound requires an existing Contact, but does not require creating a separate Conversation first.
> forceSend=true permits reuse of an existing active conversation; it does not create a fresh one by ignoring it and it is not idempotency. Recovery of a released recoverable conversation can occur even with false. The LeadScout and Agents outbound routes have different line-selection and controller checks; use /guides/agent-outbound.
> For webhook HMAC, follow /webhooks/verifying-signatures exactly: the Python JSON serialization with sorted keys is signed; X-Bridge-Timestamp is not included in that signature. Do not claim a signed timestamp, raw-body signing, exactly-once delivery or a global event order. Use /webhooks/receive-events for durable acceptance and duplicates.
> A 201 message response, 202 handoff or 202 Custom Connections response is not a provider delivery receipt. Do not invent a polling endpoint from messageId, trackingId or requestId. REST validation parsing must tolerate the compatibility difference explained in /error-codes.
> The documentation is available in English (existing root URLs), Spanish (/es/) and Brazilian Portuguese (/pt-br/). Prefer the reader's language when a localized page exists, but preserve the API's exact field names, enums, routes, authentication and examples. Translations describe the same API; they do not introduce regional API hosts or behaviors.
> For coding-assistant setup, use /connect-your-agent, /es/connect-your-agent or /pt-br/connect-your-agent. The Bridge documentation MCP server reads published documentation and has a separate optional feedback tool. Connecting it does not connect the coding assistant to a customer workspace or authorize live business requests.
> For direct HTTP access without MCP, start at https://docs.bridge.new/llms.txt. It lists every published page in English, Spanish and Brazilian Portuguese. Choose /llms-en.json, /llms-es.json or /llms-pt-br.json for a language-specific index, and /llms-full-en.json, /llms-full-es.json or /llms-full-pt-br.json for collected content. /llms-full.txt contains the combined collection. Fetch the original OpenAPI specification for exact schemas.
> For HTTP page reads, follow the .md URLs from the index or request Accept: text/markdown at the canonical page URL. The MCP virtual filesystem uses .mdx page paths instead; .mdx is not the public HTTP export extension. With Search MCP, set language to en, es or pt-BR explicitly; its default is en.
> For integration capabilities and source-selection rules, read https://docs.bridge.new/skill.md. Documentation access does not authorize business API actions; use the actual user request, workspace, credentials and target identifiers for any live integration.

# Inicia una conversación saliente con un agente

> Elige un agente, envía una plantilla inicial, entiende forceSend y la recuperación, y solicita una transferencia de LeadScout.

Usa las operaciones de conversaciones salientes cuando un contacto existente deba recibir una plantilla aprobada de WhatsApp y continuar con un agente de IA. Para el flujo general, consulta [Crear una conversación](https://docs.bridge.new/es/guides/first-conversation.md).

## Elige la operación

| Objetivo | Operación | Cómo se elige el agente |
| - | - | - |
| Iniciar con un LeadScout o Service Agent específico | `POST /bridge/api/v1/workspaces/{workspaceId}/agents/{agentId}/outbound` | Proporcionas el ID de agente obtenido de `GET /agents`. |
| Iniciar con un LeadScout seleccionado mediante las líneas elegibles del espacio de trabajo | `POST /bridge/api/v1/workspaces/{workspaceId}/leadscout/outbound` | Bridge determina el agente de prospección de la línea. |

Ambas usan el host de la API REST `https://api-connect-us.bridge.new` y una `x-api-key` desde el servidor. Sus esquemas de solicitud son distintos. Lee la [referencia de conversaciones salientes de agentes](https://docs.bridge.new/es/api-reference/agents-api/iniciar-conversaci%C3%B3n-saliente-con-un-contact-como-agent-espec%C3%ADfico) o la [referencia de LeadScout](https://docs.bridge.new/es/api-reference/leadscout-api/iniciar-conversaci%C3%B3n-saliente-de-leadscout-con-un-lead-conocido) según la operación que uses.

## Antes de enviar

1. [Consulta el contacto](https://docs.bridge.new/es/api-reference/contacts-api/obtener-contacto-por-un-identificador.md) o [créalo](https://docs.bridge.new/es/api-reference/contacts-api/crear-contacto.md) si no existe. Estas operaciones exigen que el contacto ya exista en el espacio de trabajo; no necesitas crear antes una conversación o un mensaje independiente.
2. [Lista los agentes](https://docs.bridge.new/es/api-reference/agents-api/listar-los-agents-de-un-workspace.md). Elige uno disponible y lee su `lines[].providerChannelId`. El ID de un agente de IA no es el de un usuario humano de Bridge.
3. Elige una plantilla aprobada. [Consulta sus variables](https://docs.bridge.new/es/guides/send-template.md#1-discover-the-variables), proporciona los valores que debe aportar quien hace la solicitud y comprueba que esté aprobada para la línea de destino. Para este requisito solo necesitas el paso de consulta; no ejecutes el paso de creación de conversación de esa guía antes de una operación de conversación saliente.
4. Confirma que tu negocio tenga la autorización necesaria. Si envías `consent.status: "GRANTED"`, incluye `capturedAt`: así registras tu declaración de consentimiento.

En la operación de agentes, `contact.providerChannelId` debe pertenecer al agente elegido si lo envías. Es una preferencia: se puede seleccionar otra línea elegible de ese agente. En LeadScout se respeta la línea explícita. [Identificadores y sus fuentes](https://docs.bridge.new/es/guides/identifiers.md) explica qué valores usar.

## Envía una solicitud mínima de agente

Reemplaza todos los valores de ejemplo. Este caso asume que la plantilla elegida no tiene variables obligatorias pendientes que solo puedas proporcionar tú. Define `forceSend` deliberadamente; el ejemplo mantiene explícito el comportamiento predeterminado.

```bash theme={null}
curl --fail-with-body --request POST \
  "https://api-connect-us.bridge.new/bridge/api/v1/workspaces/$WORKSPACE_ID/agents/$AGENT_ID/outbound" \
  --header "x-api-key: $BRIDGE_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "contact": {
      "identifier": "f0000001-0000-4000-8000-000000000001",
      "identifierType": "ID",
      "messageProviderType": "WHATSAPP"
    },
    "template": {
      "id": "f0000040-0000-4000-8000-000000000040"
    },
    "forceSend": false
  }'
```

Una solicitud exitosa devuelve `201`. Conserva `conversation.id` e interpreta estos campos de respuesta:

| Campo | Significado |
| - | - |
| `alreadyInitiated: true` | Se reutilizó una conversación activa existente. La solicitud exitosa igualmente agrega su nueva plantilla y sus mensajes de seguimiento. |
| `recovered: true` | Se recuperó una conversación liberada y recuperable, conservando su ID. Se reemplazan su contexto saliente anterior y su `agentContext`. |
| `additionalMessagesPersisted` | Cantidad de mensajes de seguimiento almacenados. No es una confirmación de entrega. |
| `templateSent` | Resumen de la plantilla inicial almacenada para enviarla. El nombre del campo no demuestra que el destinatario la haya recibido. |

En una creación nueva, ni reutilización ni recuperación se establecen en true. Puede haber recuperación con `forceSend: false`. Los mensajes adicionales se guardan en el orden de la solicitud: no asumas que esperan la respuesta del contacto. El flujo compartido almacena seguimientos de texto y no adjunta sus `mediaIds`. Usa la opción documentada `template.media` para medios en la plantilla inicial o el [flujo de adjuntos de mensajes](https://docs.bridge.new/es/guides/send-attachments.md) para un mensaje separado.

## Qué hace forceSend

La disponibilidad se evalúa para **la conversación de este contacto en cada línea**. Que una línea esté ocupada en este contexto no significa que la línea corporativa de WhatsApp esté reservada globalmente para un solo contacto.

Las reglas siguientes siguen sujetas a la disponibilidad del agente y a las validaciones de plantilla, consentimiento y sesión.

En pantallas estrechas, desplázate horizontalmente para comparar las cuatro opciones. Si usas teclado, puedes enfocar esta comparación y recorrerla con las flechas.

| Situación | LeadScout: false | LeadScout: true | Agentes: false | Agentes: true |
| - | - | - | - | - |
| La línea elegida está libre | Crea | Crea | Crea | Crea |
| La línea elegida contiene una conversación liberada marcada como recuperable | Recupera el mismo ID | Recupera el mismo ID | Recupera el mismo ID | Recupera el mismo ID |
| La selección automática solo encuentra conversaciones activas ocupadas | `409 …0008` | Reutiliza la primera conversación ocupada elegible | `409 …0008` | Prefiere una controlada por el agente solicitado y aplica la comprobación de controlador indicada abajo |
| La línea explícita está ocupada | `409 …0007` | Reutiliza esa conversación | Busca otras líneas libres o recuperables del agente; si no hay, `409 …0008` | Busca otras líneas libres o recuperables; si no hay, prefiere una ocupada que controle el agente |
| La conversación ocupada elegida está controlada por una persona u otro agente | No reutiliza conversaciones activas | La ruta heredada permite reutilizarla, sujeto a otras comprobaciones; esto no promete por sí solo transferir su control | No reutiliza conversaciones activas | `409 BRIDGE_AI_AGENT_OUTBOUND_0006`; este rechazo no escribe nada |
| Solo hay conversaciones bloqueadas o liberadas no recuperables | `409 …0008` | `409 …0008` | `409 …0008` | `409 …0008` |

En la tabla, `…0007` es `BRIDGE_AI_LEADSCOUT_0007` y `…0008` es `BRIDGE_AI_LEADSCOUT_0008`. Una conversación liberada solo se puede recuperar si lo permite su indicador de recuperación almacenado; `forceSend` no la convierte en recuperable.

En ambas rutas, una sesión de LeadScout abierta y sin vencer bloquea una nueva solicitud de conversación saliente con `409 BRIDGE_AI_LEADSCOUT_0017`. Si no se puede finalizar una sesión vencida, se devuelve `409 BRIDGE_AI_LEADSCOUT_0018`. Un Service Agent puede continuar su sesión de servicio abierta y vigente; una sesión vencida se cierra antes de abrir otra.

> [!WARNING]
>
> `forceSend` no es una clave de idempotencia. Repetir una solicitud exitosa puede agregar otra plantilla y más mensajes. No omite conversaciones bloqueadas, comprobaciones de sesión, reglas de aprobación ni validaciones. Si se agota el tiempo de espera, el resultado queda incierto: inspecciona la conversación antes de decidir si vuelves a enviar la solicitud.

## Maneja conflictos y efectos parciales

| Resultado | Qué hacer |
| - | - |
| `BRIDGE_AI_LEADSCOUT_0007` / `0008` | Revisa la conversación existente del contacto y sus líneas elegibles. Decide si corresponde reutilizarla antes de habilitar `forceSend`. |
| `BRIDGE_AI_AGENT_OUTBOUND_0006` | Revisa `extra.conversationId` y quién controla esa conversación. Coordina su control antes de liberarla deliberadamente. No interrumpas automáticamente una conversación humana. |
| `BRIDGE_AI_LEADSCOUT_0017` / `0018` | Resuelve la sesión existente o contacta a soporte. Cambiar `forceSend` a true no corrige el problema de sesión. |
| `BRIDGE_AI_LEADSCOUT_0019` / `0020` / `0021` | Usa la consulta de variables para corregir valores faltantes, superpuestos o claves desconocidas. |
| `400 BRIDGE_AI_LEADSCOUT_0016` por un `mediaId` de plantilla desconocido en la operación de agentes | La conversación puede haberse creado o recuperado antes del error. Revísala antes de reintentar. |

[Liberar una conversación](https://docs.bridge.new/es/api-reference/conversations-api/liberar-conversaci%C3%B3n) es una operación independiente con efectos de negocio. Un `204` no tiene cuerpo de respuesta. Libera una conversación solo cuando realmente quieras terminarla.

## Solicita una transferencia de LeadScout a una persona

Para una conversación de LeadScout, obtén el [ID o correo del usuario humano de Bridge](https://docs.bridge.new/es/guides/identifiers.md) y llama al [endpoint de transferencia manual](https://docs.bridge.new/es/api-reference/leadscout-api/solicitar-transferencia-manual-de-leadscout-a-usuarios-internos.md). Esta operación es específica de LeadScout: no asumas que aplica a un Service Agent.

```bash theme={null}
curl --fail-with-body --request POST \
  "https://api-connect-us.bridge.new/bridge/api/v1/workspaces/$WORKSPACE_ID/leadscout/conversations/$CONVERSATION_ID/handoff" \
  --header "x-api-key: $BRIDGE_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "assignees": [
      {"identifier": "f0000002-0000-4000-8000-000000000002", "identifierType": "ID"}
    ]
  }'
```

Un `202` confirma la aceptación de la solicitud. Conserva `trackingId` y `conversationId`; la aceptación no demuestra que haya terminado la asignación ni que una persona haya leído o respondido la conversación. La referencia no publica un endpoint de seguimiento de transferencias: no construyas uno a partir de `trackingId`.

Continúa con el [manejo de errores](https://docs.bridge.new/es/error-codes.md) y la [recepción de webhooks](https://docs.bridge.new/es/webhooks/receive-events.md) para conectar este flujo a tu sistema.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.