Start an outbound conversation with a Contact as a given Agent
Start an outbound conversation with a known Contact, answered by the given Agent.
Works for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in
the workspace and be available (see GET /agents). The template must exist and be APPROVED, and a
handoffOverride Bridge User must be valid. If template.media.mediaId is unknown, the request fails
with 400 BRIDGE_AI_LEADSCOUT_0016 only after the conversation was created or recovered, so a retry after
that error may answer differently. Body rules (consent.status=GRANTED without capturedAt, template.media
without exactly one of mediaId or url) fail with 400 BRIDGE_CORE_0103.
The conversation opens on one of the Agent’s active WhatsApp lines, controlled by the Agent, with the template
as its first message. A line is picked in this order:
A free line.
Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering
returns recovered=true and replaces the previous outbound context and agentContext. This happens even
with forceSend=false.
Otherwise, when no line is free or recoverable: forceSend=false (default) fails with 409
BRIDGE_AI_LEADSCOUT_0008; forceSend=true reuses a line occupied by an active conversation with this
Contact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a
Bridge User, the call fails with 409 BRIDGE_AI_AGENT_OUTBOUND_0006 and nothing is written. Release it
first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so
if no line is occupied by an active conversation the call fails with 409 BRIDGE_AI_LEADSCOUT_0008 even
with forceSend=true.
contact.providerChannelId is a preference: the pinned line is used when it is free or recoverable;
otherwise the same order applies over all the Agent’s lines. Among occupied lines, one this Agent controls
comes first; if none does, the pinned line is the one reused (and may fail with 0006).
Reusing a conversation depends on the Agent type:
LeadScout: if its LeadScout session is still open and not expired, the call fails with 409
BRIDGE_AI_LEADSCOUT_0017 (extra carries conversationId, sessionId and stage). If an expired
session cannot be finalized, it fails with 409 BRIDGE_AI_LEADSCOUT_0018.
Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a
new one opens.
POST
/
bridge
/
api
/
v1
/
workspaces
/
{workspaceId}
/
agents
/
{agentId}
/
outbound
Start an outbound conversation with a Contact as a given Agent
Up to five text follow-ups stored on the conversation right after the opening template, in the order given, and sent like the template. Attachments (mediaIds) are not sent yet.
Optional brand id. When given, only the Agent's lines linked to this brand are eligible; if none is, the request fails with 404. Omit to consider every line of the Agent.
Controls what happens when no line of the Agent is free or recoverable. A free line always wins, then a line holding a released conversation with this Contact that can be recovered, whatever this flag says. When neither exists: with false (default) the request fails with 409 BRIDGE_AI_LEADSCOUT_0008; with true, a line occupied by an active conversation with this Contact is reused, preferring one this Agent controls. If the chosen conversation is held by another Agent or a Bridge User the request fails with 409 BRIDGE_AI_AGENT_OUTBOUND_0006 and nothing is written; release it first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so with no line occupied by an active conversation the request fails with 409 BRIDGE_AI_LEADSCOUT_0008 even with true.
Examples:
false
true
Response
Successful Response
Response body for a successful Agent outbound initiation.
True when this request landed on a pre-existing conversation (forceSend=true reuse path); false when a fresh conversation was created. Informational only — the new template and follow-ups are persisted either way.
True when a released conversation the Contact had on the line was recovered instead of creating a new one. Recovery replaces the previous outbound context and agentContext. Recoverable lines are used even with forceSend=false.
Examples:
false
true
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Bridge REST Integrations API \u0026 Webhooks","description":"Documentation for Bridge Integrations API Webhooks","colors":{"primary":"#2563EB","light":"#3B82F6","dark":"#1D4ED8"},"logo":{"light":"https://mintcdn.com/sainapsisinc/MRBSc5DvZcNEOxd1/logo/bridge_full_logo_light.png?fit=max\u0026auto=format\u0026n=MRBSc5DvZcNEOxd1\u0026q=85\u0026s=9a9d74ac33a89d538635507ba8d12eb9","dark":"https://mintcdn.com/sainapsisinc/MRBSc5DvZcNEOxd1/logo/bridge_full_logo_dark.png?fit=max\u0026auto=format\u0026n=MRBSc5DvZcNEOxd1\u0026q=85\u0026s=0c0905478472ab3f3b07066824f7f4ca"},"favicon":"https://mintcdn.com/sainapsisinc/OxyPsTqCEnnNpE4v/favicon.png?fit=max\u0026auto=format\u0026n=OxyPsTqCEnnNpE4v\u0026q=85\u0026s=8262683efaf26e188f464e1f0f02a189","navbar":{"links":[{"href":"mailto:support@sainapsis.com","label":"Contact Support"}],"primary":{"type":"button","label":"Bridge app","href":"https://app.bridge.new"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/sainapsis-inc"}},"markdown":{"instructions":["Bridge exposes three integration surfaces: the REST Integrations API for pushing data into Bridge, webhooks for receiving events from Bridge, and the public Lead Capture 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 Lead Capture 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.","Integrations API error codes follow the BRIDGE_\u003cDOMAIN>_\u003cNNNN> format, for example BRIDGE_CONVERSATION_0001, and are listed on the error codes page. Lead Capture error codes follow a different format, BRIDGE.CAMPAIGN_LEADS.\u003cNAME>, and are listed on the Lead Capture error reference. Never invent a code that is not listed on the page for its own surface.","This documentation covers the Integrations API, webhooks and Lead Capture only. It does not describe the Bridge web application or its internal APIs."]},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"sainapsisinc","hasAudioNarration":false,"actualSubdomain":"sainapsisinc","customDomains":["docs.bridge.new"],"gitSource":{"type":"github","owner":"sainapsis","repo":"open-api-public-documentation-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ac4fa21407ba61c44c6207e","collectionId":"132bc2f9-70e6-4658-a660-b3eb5e90fda1","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ac4fa21407ba61c44c6207e"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6aedffec4348304151cb5742","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"REST API","count":23},{"language":"default","tag":"Introduction","count":6},{"language":"default","tag":"Lead Capture","count":6},{"language":"default","tag":"Contacts API","count":5},{"language":"default","tag":"Conversations API","count":5},{"language":"default","tag":"Webhooks","count":4},{"language":"default","tag":"Integration","count":3},{"language":"default","tag":"Before you launch","count":2},{"language":"default","tag":"Agents API","count":2},{"language":"default","tag":"Internal Users API","count":2}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".nav-logo{height:2.5rem}"}],"page":{"pagePath":"api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent","slug":"/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent","pageMetadata":{"title":"Start an outbound conversation with a Contact as a given Agent","description":"Start an outbound conversation with a known Contact, answered by the given Agent.\n\nWorks for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in\nthe workspace and be available (see `GET /agents`). The template must exist and be APPROVED, and a\n`handoffOverride` Bridge User must be valid. If `template.media.mediaId` is unknown, the request fails\nwith 400 `BRIDGE_AI_LEADSCOUT_0016` only after the conversation was created or recovered, so a retry after\nthat error may answer differently. Body rules (`consent.status=GRANTED` without `capturedAt`, `template.media`\nwithout exactly one of `mediaId` or `url`) fail with 400 `BRIDGE_CORE_0103`.\n\nThe conversation opens on one of the Agent's active WhatsApp lines, controlled by the Agent, with the template\nas its first message. A line is picked in this order:\n- A free line.\n- Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering\n returns `recovered=true` and replaces the previous outbound context and `agentContext`. This happens even\n with `forceSend=false`.\n- Otherwise, when no line is free or recoverable: `forceSend=false` (default) fails with 409\n `BRIDGE_AI_LEADSCOUT_0008`; `forceSend=true` reuses a line occupied by an active conversation with this\n Contact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a\n Bridge User, the call fails with 409 `BRIDGE_AI_AGENT_OUTBOUND_0006` and nothing is written. Release it\n first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so\n if no line is occupied by an active conversation the call fails with 409 `BRIDGE_AI_LEADSCOUT_0008` even\n with `forceSend=true`.\n\n`contact.providerChannelId` is a preference: the pinned line is used when it is free or recoverable;\notherwise the same order applies over all the Agent's lines. Among occupied lines, one this Agent controls\ncomes first; if none does, the pinned line is the one reused (and may fail with 0006).\n\nReusing a conversation depends on the Agent type:\n- LeadScout: if its LeadScout session is still open and not expired, the call fails with 409\n `BRIDGE_AI_LEADSCOUT_0017` (`extra` carries `conversationId`, `sessionId` and `stage`). If an expired\n session cannot be finalized, it fails with 409 `BRIDGE_AI_LEADSCOUT_0018`.\n- Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a\n new one opens.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/agents/{agentId}/outbound","href":"/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Start an outbound conversation with a known Contact, answered by the given Agent.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Works for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in\\nthe workspace and be available (see \", _jsx(_components.code, {\n children: \"GET /agents\"\n }), \"). The template must exist and be APPROVED, and a\\n\", _jsx(_components.code, {\n children: \"handoffOverride\"\n }), \" Bridge User must be valid. If \", _jsx(_components.code, {\n children: \"template.media.mediaId\"\n }), \" is unknown, the request fails\\nwith 400 \", _jsx(_components.code, {\n children: \"BRIDGE_AI_LEADSCOUT_0016\"\n }), \" only after the conversation was created or recovered, so a retry after\\nthat error may answer differently. Body rules (\", _jsx(_components.code, {\n children: \"consent.status=GRANTED\"\n }), \" without \", _jsx(_components.code, {\n children: \"capturedAt\"\n }), \", \", _jsx(_components.code, {\n children: \"template.media\"\n }), \"\\nwithout exactly one of \", _jsx(_components.code, {\n children: \"mediaId\"\n }), \" or \", _jsx(_components.code, {\n children: \"url\"\n }), \") fail with 400 \", _jsx(_components.code, {\n children: \"BRIDGE_CORE_0103\"\n }), \".\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"The conversation opens on one of the Agent’s active WhatsApp lines, controlled by the Agent, with the template\\nas its first message. A line is picked in this order:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"A free line.\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering\\nreturns \", _jsx(_components.code, {\n children: \"recovered=true\"\n }), \" and replaces the previous outbound context and \", _jsx(_components.code, {\n children: \"agentContext\"\n }), \". This happens even\\nwith \", _jsx(_components.code, {\n children: \"forceSend=false\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Otherwise, when no line is free or recoverable: \", _jsx(_components.code, {\n children: \"forceSend=false\"\n }), \" (default) fails with 409\\n\", _jsx(_components.code, {\n children: \"BRIDGE_AI_LEADSCOUT_0008\"\n }), \"; \", _jsx(_components.code, {\n children: \"forceSend=true\"\n }), \" reuses a line occupied by an active conversation with this\\nContact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a\\nBridge User, the call fails with 409 \", _jsx(_components.code, {\n children: \"BRIDGE_AI_AGENT_OUTBOUND_0006\"\n }), \" and nothing is written. Release it\\nfirst, then retry. Lines whose conversation is blocked or was released without recovery are never used, so\\nif no line is occupied by an active conversation the call fails with 409 \", _jsx(_components.code, {\n children: \"BRIDGE_AI_LEADSCOUT_0008\"\n }), \" even\\nwith \", _jsx(_components.code, {\n children: \"forceSend=true\"\n }), \".\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"contact.providerChannelId\"\n }), \" is a preference: the pinned line is used when it is free or recoverable;\\notherwise the same order applies over all the Agent’s lines. Among occupied lines, one this Agent controls\\ncomes first; if none does, the pinned line is the one reused (and may fail with 0006).\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Reusing a conversation depends on the Agent type:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"LeadScout: if its LeadScout session is still open and not expired, the call fails with 409\\n\", _jsx(_components.code, {\n children: \"BRIDGE_AI_LEADSCOUT_0017\"\n }), \" (\", _jsx(_components.code, {\n children: \"extra\"\n }), \" carries \", _jsx(_components.code, {\n children: \"conversationId\"\n }), \", \", _jsx(_components.code, {\n children: \"sessionId\"\n }), \" and \", _jsx(_components.code, {\n children: \"stage\"\n }), \"). If an expired\\nsession cannot be finalized, it fails with 409 \", _jsx(_components.code, {\n children: \"BRIDGE_AI_LEADSCOUT_0018\"\n }), \".\"]\n }), \"\\n\", _jsx(_components.li, {\n children: \"Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a\\nnew one opens.\"\n }), \"\\n\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Start an outbound conversation with a Contact as a given Agent","description":"Start an outbound conversation with a known Contact, answered by the given Agent.\n\nWorks for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in\nthe workspace and be available (see `GET /agents`). The template must exist and be APPROVED, and a\n`handoffOverride` Bridge User must be valid. If `template.media.mediaId` is unknown, the request fails\nwith 400 `BRIDGE_AI_LEADSCOUT_0016` only after the conversation was created or recovered, so a retry after\nthat error may answer differently. Body rules (`consent.status=GRANTED` without `capturedAt`, `template.media`\nwithout exactly one of `mediaId` or `url`) fail with 400 `BRIDGE_CORE_0103`.\n\nThe conversation opens on one of the Agent's active WhatsApp lines, controlled by the Agent, with the template\nas its first message. A line is picked in this order:\n- A free line.\n- Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering\n returns `recovered=true` and replaces the previous outbound context and `agentContext`. This happens even\n with `forceSend=false`.\n- Otherwise, when no line is free or recoverable: `forceSend=false` (default) fails with 409\n `BRIDGE_AI_LEADSCOUT_0008`; `forceSend=true` reuses a line occupied by an active conversation with this\n Contact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a\n Bridge User, the call fails with 409 `BRIDGE_AI_AGENT_OUTBOUND_0006` and nothing is written. Release it\n first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so\n if no line is occupied by an active conversation the call fails with 409 `BRIDGE_AI_LEADSCOUT_0008` even\n with `forceSend=true`.\n\n`contact.providerChannelId` is a preference: the pinned line is used when it is free or recoverable;\notherwise the same order applies over all the Agent's lines. Among occupied lines, one this Agent controls\ncomes first; if none does, the pinned line is the one reused (and may fail with 0006).\n\nReusing a conversation depends on the Agent type:\n- LeadScout: if its LeadScout session is still open and not expired, the call fails with 409\n `BRIDGE_AI_LEADSCOUT_0017` (`extra` carries `conversationId`, `sessionId` and `stage`). If an expired\n session cannot be finalized, it fails with 409 `BRIDGE_AI_LEADSCOUT_0018`.\n- Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a\n new one opens.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/agents/{agentId}/outbound","href":"/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Agents API"],"summary":"Start an outbound conversation with a Contact as a given Agent","description":"Start an outbound conversation with a known Contact, answered by the given Agent.\n\nWorks for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in\nthe workspace and be available (see `GET /agents`). The template must exist and be APPROVED, and a\n`handoffOverride` Bridge User must be valid. If `template.media.mediaId` is unknown, the request fails\nwith 400 `BRIDGE_AI_LEADSCOUT_0016` only after the conversation was created or recovered, so a retry after\nthat error may answer differently. Body rules (`consent.status=GRANTED` without `capturedAt`, `template.media`\nwithout exactly one of `mediaId` or `url`) fail with 400 `BRIDGE_CORE_0103`.\n\nThe conversation opens on one of the Agent's active WhatsApp lines, controlled by the Agent, with the template\nas its first message. A line is picked in this order:\n- A free line.\n- Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering\n returns `recovered=true` and replaces the previous outbound context and `agentContext`. This happens even\n with `forceSend=false`.\n- Otherwise, when no line is free or recoverable: `forceSend=false` (default) fails with 409\n `BRIDGE_AI_LEADSCOUT_0008`; `forceSend=true` reuses a line occupied by an active conversation with this\n Contact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a\n Bridge User, the call fails with 409 `BRIDGE_AI_AGENT_OUTBOUND_0006` and nothing is written. Release it\n first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so\n if no line is occupied by an active conversation the call fails with 409 `BRIDGE_AI_LEADSCOUT_0008` even\n with `forceSend=true`.\n\n`contact.providerChannelId` is a preference: the pinned line is used when it is free or recoverable;\notherwise the same order applies over all the Agent's lines. Among occupied lines, one this Agent controls\ncomes first; if none does, the pinned line is the one reused (and may fail with 0006).\n\nReusing a conversation depends on the Agent type:\n- LeadScout: if its LeadScout session is still open and not expired, the call fails with 409\n `BRIDGE_AI_LEADSCOUT_0017` (`extra` carries `conversationId`, `sessionId` and `stage`). If an expired\n session cannot be finalized, it fails with 409 `BRIDGE_AI_LEADSCOUT_0018`.\n- Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a\n new one opens.","operationId":"start_agent_outbound_bridge_api_v1_workspaces__workspaceId__agents__agentId__outbound_post","security":["3966ad54-9c0f-46f5-97dc-76b1a7cab432"],"parameters":["e79cde7e-9f66-4553-9d18-81aaed2f9875","920f3e83-1054-4d16-9f6e-3a22c929f776"],"requestBody":"1b82842f-9ca5-4a99-a2c6-791159428c9a","responses":{"201":"18f08137-d391-4238-b15a-51c38b5beb9e","400":"4447f99a-1d64-4612-9c48-273821d14187","403":"ff91416d-8dca-44e0-9ad9-f1d89b8f0b64","404":"465ee309-54dd-4445-931e-c2a7bd11e980","409":"370710fb-1e3f-4ec5-a216-bbda222820af","422":"b1f8f6f4-d7b9-48a6-8511-bbe13ca2d5ca","429":"278abe95-50d8-4f0d-8888-4ef401786716"},"method":"post","type":"path","servers":["2ab3b376-6ea8-4949-a2e4-fb60760c5462"],"path":"/bridge/api/v1/workspaces/{workspaceId}/agents/{agentId}/outbound","baseUrlOptions":["https://api-connect-us.bridge.new"],"title":"Start an outbound conversation with a Contact as a given Agent","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"e79cde7e-9f66-4553-9d18-81aaed2f9875":{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Unique identifier of the workspace (UUID v4).","examples":["b6cf1c4a-2b1e-4e63-8f3e-0f9d1a2a1234"],"title":"Workspaceid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"Unique identifier of the workspace (UUID v4)."},"920f3e83-1054-4d16-9f6e-3a22c929f776":{"name":"agentId","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Unique identifier of the Agent (UUID v4), as listed by `GET /agents`.","examples":["4e362e2b-67b2-4a7e-a9df-e9ecf9141be8"],"title":"Agentid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"Unique identifier of the Agent (UUID v4), as listed by `GET /agents`."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"contact":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"Phone number in E.164 format identifying the contact.","examples":["+573001234567"],"isRequired":true,"uniqueKey":"contact.identifier","typeLabel":"string"},"identifierType":{"type":"string","enum":["ID","EMAIL","PHONE"],"title":"Identifier Type","description":"Type of identifier.","examples":["PHONE","EMAIL","ID"],"isRequired":true,"uniqueKey":"contact.identifierType","typeLabel":"enum\u003cstring>"},"messageProviderType":{"type":"string","enum":["WHATSAPP","SMS","TELEGRAM","INSTAGRAM","TWITTER","LINE","FACEBOOK","IMESSAGE","WHATSAPP_TEST","HEYGIA"],"title":"Message Provider Type","description":"Provider used to deliver the template.","examples":["WHATSAPP"],"isRequired":true,"uniqueKey":"contact.messageProviderType","typeLabel":"enum\u003cstring>"},"providerChannelId":{"oneOf":[{"type":"string","title":"Provider Channel Identifier","description":"Optional. A line of the Agent to prefer (the `providerChannelId` of one of its `lines` in `GET /agents`). When omitted, any of the Agent's lines can be used. When given, it must be an active line of the Agent, otherwise the request fails with 422. It is a preference, not a guarantee: if that line is neither free nor recoverable, the same order applies over all the Agent's lines (with `forceSend=true`, an occupied line this Agent controls comes first, then the pinned one), and the response does not say which line was used.","example":"c4f2a1e0-9b8d-4e7c-a6f5-1d2e3f4a5b6c","uniqueKey":"contact.providerChannelId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Provider Channel Identifier","description":"Optional. A line of the Agent to prefer (the `providerChannelId` of one of its `lines` in `GET /agents`). When omitted, any of the Agent's lines can be used. When given, it must be an active line of the Agent, otherwise the request fails with 422. It is a preference, not a guarantee: if that line is neither free nor recoverable, the same order applies over all the Agent's lines (with `forceSend=true`, an occupied line this Agent controls comes first, then the pinned one), and the response does not say which line was used.","example":"c4f2a1e0-9b8d-4e7c-a6f5-1d2e3f4a5b6c","uniqueKey":"contact.providerChannelId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.providerChannelId","typeLabel":"string | null"}},"type":"object","required":["identifier","identifierType","messageProviderType"],"title":"Contact","description":"The Contact this outbound conversation targets. Must already exist in the workspace.","isRequired":true,"uniqueKey":"contact","typeLabel":"Contact · object"},"template":{"properties":{"name":{"type":"string","title":"Template Name","description":"Name of the registered Meta-approved template to send.","examples":["leadscout_outbound_fb_v1"],"isRequired":true,"uniqueKey":"template.name","typeLabel":"string"},"orderedParams":{"items":{"type":"string","uniqueKey":"template.orderedParams.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Ordered Parameters","description":"Caller-supplied values for the template's CALLER-source parameter slots, in position order.","examples":[["Maria","ACME"]],"uniqueKey":"template.orderedParams","typeLabel":"string[]"},"parameters":{"additionalProperties":{"type":"string","uniqueKey":"template.parameters.additionalProperties","typeLabel":"string"},"type":"object","title":"Parameters","description":"Caller-supplied values keyed by the template's variable key (see GET /templates/{id} for the key inventory), covering both body and button slots. Prefer this over orderedParams for any template that has a dynamic button. An unknown key, or a key that overlaps a slot already covered by orderedParams, is rejected with 422.","examples":[{"recipient_first_name":"Maria","tracking_code":"TRK123"}],"uniqueKey":"template.parameters","typeLabel":"Parameters · object"},"media":{"oneOf":[{"type":"object","title":"OutboundTemplateMedia","description":"Optional header media attached to the opening template message.\n\nProvide exactly one of ``mediaId`` (a UUID returned by ``POST /preloaded-files``)\nor ``url`` (a public source URL fetched asynchronously by the URL file fetcher).","required":["type"],"properties":{"type":{"type":"string","enum":["IMAGE","VIDEO","GIF"],"title":"Media Type","description":"Header media kind. Must match the template header type configured in Meta.","examples":["IMAGE","VIDEO"],"isRequired":true,"uniqueKey":"template.media.oneOf.0.type","typeLabel":"enum\u003cstring>"},"mediaId":{"oneOf":[{"type":"string","title":"Media Identifier","description":"UUID returned by /preloaded-files. Mutually exclusive with url.","example":null,"uniqueKey":"template.media.oneOf.0.mediaId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Media Identifier","description":"UUID returned by /preloaded-files. Mutually exclusive with url.","example":null,"uniqueKey":"template.media.oneOf.0.mediaId.oneOf.1","typeLabel":"null"}],"uniqueKey":"template.media.oneOf.0.mediaId","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","title":"Source URL","description":"Public source URL fetched asynchronously via the URL file fetcher. Mutually exclusive with mediaId.","example":null,"uniqueKey":"template.media.oneOf.0.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Source URL","description":"Public source URL fetched asynchronously via the URL file fetcher. Mutually exclusive with mediaId.","example":null,"uniqueKey":"template.media.oneOf.0.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"template.media.oneOf.0.url","typeLabel":"string | null"}},"uniqueKey":"template.media.oneOf.0","typeLabel":"OutboundTemplateMedia · object"},{"type":"null","title":"Header Media","description":"Optional header media (image/video) to attach to the template message. Accepts either a preloaded mediaId or a public url.","uniqueKey":"template.media.oneOf.1","typeLabel":"null"}],"uniqueKey":"template.media","typeLabel":"OutboundTemplateMedia · object | null"}},"type":"object","required":["name"],"title":"Template","description":"The opening template to send.","isRequired":true,"uniqueKey":"template","typeLabel":"Template · object"},"additionalMessages":{"items":{"properties":{"messageBody":{"type":"string","title":"Message Body","description":"Plain-text body for the follow-up message.","examples":["Just confirming we're still on for tomorrow at 10am."],"isRequired":true,"uniqueKey":"additionalMessages.items.[INDEX].messageBody","typeLabel":"string"},"mediaIds":{"items":{"type":"string","uniqueKey":"additionalMessages.items.[INDEX].mediaIds.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Media Identifiers","description":"Accepted but not used yet: follow-ups are stored as text only, so attachments are not sent.","examples":[[],["7e1d2c3b-4a5f-6e7d-8c9b-0a1b2c3d4e5f"]],"uniqueKey":"additionalMessages.items.[INDEX].mediaIds","typeLabel":"string[]"}},"type":"object","required":["messageBody"],"title":"AgentOutboundFollowUp","description":"A text follow-up stored on the conversation right after the opening template.","uniqueKey":"additionalMessages.items.[INDEX]","typeLabel":"AgentOutboundFollowUp · object"},"type":"array","maxItems":5,"title":"Additional Messages","description":"Up to five text follow-ups stored on the conversation right after the opening template, in the order given, and sent like the template. Attachments (`mediaIds`) are not sent yet.","uniqueKey":"additionalMessages","typeLabel":"AgentOutboundFollowUp · object[]"},"agentContext":{"oneOf":[{"type":"object","title":"AgentOutboundContext","description":"Notes and media stored on the conversation as context for the Agent and for Bridge Users.","properties":{"notes":{"oneOf":[{"type":"string","title":"Notes","description":"Free-text notes for the Agent, capped at 2000 characters.","maxLength":2000,"example":"The Contact asked about pricing tiers last week.","uniqueKey":"agentContext.oneOf.0.notes.oneOf.0","typeLabel":"string"},{"type":"null","title":"Notes","description":"Free-text notes for the Agent, capped at 2000 characters.","example":"The Contact asked about pricing tiers last week.","uniqueKey":"agentContext.oneOf.0.notes.oneOf.1","typeLabel":"null"}],"uniqueKey":"agentContext.oneOf.0.notes","typeLabel":"string | null"},"mediaIds":{"items":{"type":"string","uniqueKey":"agentContext.oneOf.0.mediaIds.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Media Identifiers","description":"Optional preloaded-file identifiers persisted on the conversation as context for the Agent.","examples":[[],["7e1d2c3b-4a5f-6e7d-8c9b-0a1b2c3d4e5f"]],"uniqueKey":"agentContext.oneOf.0.mediaIds","typeLabel":"string[]"}},"uniqueKey":"agentContext.oneOf.0","typeLabel":"AgentOutboundContext · object"},{"type":"null","title":"Agent Context","description":"Optional notes and media stored on the conversation as context for the Agent.","uniqueKey":"agentContext.oneOf.1","typeLabel":"null"}],"uniqueKey":"agentContext","typeLabel":"AgentOutboundContext · object | null"},"consent":{"oneOf":[{"type":"object","title":"OutboundConsentRequest","description":"Tenant-affirmed opt-in evidence recorded verbatim on the conversation.","required":["status"],"properties":{"status":{"type":"string","enum":["GRANTED","NOT_PROVIDED"],"title":"Status","description":"Tenant-affirmed consent state. Use GRANTED (with capturedAt) for explicit opt-in or NOT_PROVIDED when the tenant has no opt-in evidence to attest.","examples":["GRANTED","NOT_PROVIDED"],"isRequired":true,"uniqueKey":"consent.oneOf.0.status","typeLabel":"enum\u003cstring>"},"capturedAt":{"oneOf":[{"type":"string","title":"Captured At","description":"ISO8601 timestamp (with milliseconds) when consent was captured by the tenant. Required when status=GRANTED; null/omitted is accepted when status=NOT_PROVIDED.","format":"date-time","example":"2026-04-20T10:00:00.000Z","uniqueKey":"consent.oneOf.0.capturedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Captured At","description":"ISO8601 timestamp (with milliseconds) when consent was captured by the tenant. Required when status=GRANTED; null/omitted is accepted when status=NOT_PROVIDED.","example":"2026-04-20T10:00:00.000Z","uniqueKey":"consent.oneOf.0.capturedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"consent.oneOf.0.capturedAt","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"consent.oneOf.0","typeLabel":"OutboundConsentRequest · object"},{"type":"null","title":"Consent","description":"Optional tenant-affirmed opt-in evidence recorded on the conversation.","uniqueKey":"consent.oneOf.1","typeLabel":"null"}],"uniqueKey":"consent","typeLabel":"OutboundConsentRequest · object | null"},"handoffOverride":{"oneOf":[{"type":"object","title":"AgentOutboundHandoffOverride","description":"Pre-assigns the Bridge User who receives the handoff of the outbound conversation.","required":["preAssignedUser"],"properties":{"preAssignedUser":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"Value that identifies the Bridge User, interpreted according to identifierType.","examples":["advisor@acme.com","usr_01HZ2K3J4M5N6P7Q8R9S0T1UV2"],"isRequired":true,"uniqueKey":"handoffOverride.oneOf.0.preAssignedUser.identifier","typeLabel":"string"},"identifierType":{"type":"string","enum":["ID","EMAIL"],"title":"Identifier Type","description":"How to resolve the identifier. ID looks up by Bridge User ID; EMAIL looks up by email address.","examples":["EMAIL","ID"],"isRequired":true,"uniqueKey":"handoffOverride.oneOf.0.preAssignedUser.identifierType","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"type":"object","required":["identifier","identifierType"],"title":"Pre-assigned User","description":"The Bridge User to assign as advisor when the Agent hands off the conversation. Validated at request time: the request is rejected if the user does not exist, belongs to another workspace, or has been deleted.","examples":[{"identifier":"advisor@acme.com","identifierType":"EMAIL"}],"isRequired":true,"uniqueKey":"handoffOverride.oneOf.0.preAssignedUser","typeLabel":"Pre-assigned User · object"}},"additionalProperties":false,"uniqueKey":"handoffOverride.oneOf.0","typeLabel":"AgentOutboundHandoffOverride · object"},{"type":"null","title":"Handoff Override","description":"Optional. Pre-assigns a specific Bridge User as the advisor for the handoff. The Bridge User is validated before anything is written: the request is rejected if the user does not exist, belongs to another workspace, or has been deleted.","uniqueKey":"handoffOverride.oneOf.1","typeLabel":"null"}],"uniqueKey":"handoffOverride","typeLabel":"AgentOutboundHandoffOverride · object | null"},"brandId":{"oneOf":[{"type":"string","title":"Brand Identifier","description":"Optional brand id. When given, only the Agent's lines linked to this brand are eligible; if none is, the request fails with 404. Omit to consider every line of the Agent.","example":null,"uniqueKey":"brandId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Brand Identifier","description":"Optional brand id. When given, only the Agent's lines linked to this brand are eligible; if none is, the request fails with 404. Omit to consider every line of the Agent.","example":null,"uniqueKey":"brandId.oneOf.1","typeLabel":"null"}],"uniqueKey":"brandId","typeLabel":"string | null"},"campaignId":{"oneOf":[{"type":"string","title":"Campaign Identifier","description":"Optional campaign reference stored on the conversation for audit and reporting.","example":null,"uniqueKey":"campaignId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Campaign Identifier","description":"Optional campaign reference stored on the conversation for audit and reporting.","example":null,"uniqueKey":"campaignId.oneOf.1","typeLabel":"null"}],"uniqueKey":"campaignId","typeLabel":"string | null"},"forceSend":{"type":"boolean","title":"Force Send","description":"Controls what happens when no line of the Agent is free or recoverable. A free line always wins, then a line holding a released conversation with this Contact that can be recovered, whatever this flag says. When neither exists: with false (default) the request fails with 409 `BRIDGE_AI_LEADSCOUT_0008`; with true, a line occupied by an active conversation with this Contact is reused, preferring one this Agent controls. If the chosen conversation is held by another Agent or a Bridge User the request fails with 409 `BRIDGE_AI_AGENT_OUTBOUND_0006` and nothing is written; release it first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so with no line occupied by an active conversation the request fails with 409 `BRIDGE_AI_LEADSCOUT_0008` even with true.","default":false,"examples":[false,true],"uniqueKey":"forceSend","typeLabel":"boolean"}},"type":"object","required":["contact","template"],"title":"AgentOutboundRequest","description":"Request body for starting an outbound conversation answered by a given Agent.","uniqueKey":"","typeLabel":"AgentOutboundRequest · object"},"examples":{"Example":{"title":"Example","value":{"contact":{"identifier":"+573001234567","identifierType":"PHONE","messageProviderType":"WHATSAPP","providerChannelId":"c4f2a1e0-9b8d-4e7c-a6f5-1d2e3f4a5b6c"},"template":{"name":"leadscout_outbound_fb_v1","orderedParams":["Maria","ACME"],"parameters":{"recipient_first_name":"Maria","tracking_code":"TRK123"},"media":{"type":"IMAGE","mediaId":null,"url":null}},"additionalMessages":[{"messageBody":"Just confirming we're still on for tomorrow at 10am.","mediaIds":[]}],"agentContext":{"notes":"The Contact asked about pricing tiers last week.","mediaIds":[]},"consent":{"status":"GRANTED","capturedAt":"2026-04-20T10:00:00.000Z"},"handoffOverride":{"preAssignedUser":{"identifier":"advisor@acme.com","identifierType":"EMAIL"}},"brandId":null,"campaignId":null,"forceSend":false}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"18f08137-d391-4238-b15a-51c38b5beb9e":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"conversation":{"properties":{"id":{"type":"string","title":"Identifier","description":"Unique identifier of the conversation (UUID v4).","examples":["b6cf1c4a-2b1e-4e63-8f3e-0f9d1a2a1234"],"isRequired":true,"uniqueKey":"conversation.id","typeLabel":"string"},"workspaceId":{"type":"string","title":"Workspace Identifier","description":"Unique identifier of the workspace (UUID v4).","examples":["b6cf1c4a-2b1e-4e63-8f3e-0f9d1a2a1234"],"isRequired":true,"uniqueKey":"conversation.workspaceId","typeLabel":"string"},"participants":{"properties":{"externals":{"items":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"Participant identifier value.","examples":["ef7ee722-5f95-415a-9a98-81eeae178b11"],"isRequired":true,"uniqueKey":"conversation.participants.externals.items.[INDEX].identifier","typeLabel":"string"},"identifierType":{"type":"string","enum":["ID","EMAIL","PHONE"],"title":"Identifier Type","description":"Type of identifier for external participants (ID, EMAIL, or PHONE).","examples":["EMAIL","PHONE","ID"],"isRequired":true,"uniqueKey":"conversation.participants.externals.items.[INDEX].identifierType","typeLabel":"enum\u003cstring>"},"role":{"type":"string","enum":["INTERNAL","EXTERNAL","BOT"],"title":"Role","description":"Participant role in the conversation.","examples":["EXTERNAL","INTERNAL"],"isRequired":true,"uniqueKey":"conversation.participants.externals.items.[INDEX].role","typeLabel":"enum\u003cstring>"},"joinedAt":{"type":"string","format":"date-time","title":"Joined At","description":"Timestamp when participant joined the conversation.","examples":["2004-04-10T09:00:00.000Z"],"isRequired":true,"uniqueKey":"conversation.participants.externals.items.[INDEX].joinedAt","typeLabel":"string\u003cdate-time>"},"lastSeenAt":{"oneOf":[{"type":"string","title":"Last Seen At","description":"Timestamp when participant was last seen.","format":"date-time","example":null,"uniqueKey":"conversation.participants.externals.items.[INDEX].lastSeenAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Last Seen At","description":"Timestamp when participant was last seen.","example":null,"uniqueKey":"conversation.participants.externals.items.[INDEX].lastSeenAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"conversation.participants.externals.items.[INDEX].lastSeenAt","typeLabel":"string\u003cdate-time> | null"}},"type":"object","required":["identifier","identifierType","role","joinedAt"],"title":"Participant","description":"Object representing the external participant in the conversation.","uniqueKey":"conversation.participants.externals.items.[INDEX]","typeLabel":"Participant · object"},"type":"array","title":"Externals","description":"List of external participants.","isRequired":true,"uniqueKey":"conversation.participants.externals","typeLabel":"Participant · object[]"},"internals":{"items":{"properties":{"identifier":{"type":"string","title":"Identifier","description":"Participant identifier value.","examples":["ef7ee722-5f95-415a-9a98-81eeae178b11"],"isRequired":true,"uniqueKey":"conversation.participants.internals.items.[INDEX].identifier","typeLabel":"string"},"identifierType":{"type":"string","enum":["ID","EMAIL"],"title":"Identifier Type","description":"Type of identifier for internal participants (ID or EMAIL).","examples":["EMAIL","ID"],"isRequired":true,"uniqueKey":"conversation.participants.internals.items.[INDEX].identifierType","typeLabel":"enum\u003cstring>"},"role":{"type":"string","enum":["INTERNAL","EXTERNAL","BOT"],"title":"Role","description":"Participant role in the conversation.","examples":["EXTERNAL","INTERNAL"],"isRequired":true,"uniqueKey":"conversation.participants.internals.items.[INDEX].role","typeLabel":"enum\u003cstring>"},"joinedAt":{"type":"string","format":"date-time","title":"Joined At","description":"Timestamp when participant joined the conversation.","examples":["2004-04-10T09:00:00.000Z"],"isRequired":true,"uniqueKey":"conversation.participants.internals.items.[INDEX].joinedAt","typeLabel":"string\u003cdate-time>"},"lastSeenAt":{"oneOf":[{"type":"string","title":"Last Seen At","description":"Timestamp when participant was last seen.","format":"date-time","example":null,"uniqueKey":"conversation.participants.internals.items.[INDEX].lastSeenAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Last Seen At","description":"Timestamp when participant was last seen.","example":null,"uniqueKey":"conversation.participants.internals.items.[INDEX].lastSeenAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"conversation.participants.internals.items.[INDEX].lastSeenAt","typeLabel":"string\u003cdate-time> | null"}},"type":"object","required":["identifier","identifierType","role","joinedAt"],"title":"Participant","description":"Object representing the internal participant in the conversation.","uniqueKey":"conversation.participants.internals.items.[INDEX]","typeLabel":"Participant · object"},"type":"array","title":"Internals","description":"List of internal participants.","isRequired":true,"uniqueKey":"conversation.participants.internals","typeLabel":"Participant · object[]"}},"type":"object","required":["externals","internals"],"title":"Participants","description":"Participants of the conversation.","isRequired":true,"uniqueKey":"conversation.participants","typeLabel":"Participants · object"},"createdAt":{"type":"string","format":"date-time","title":"Created At","description":"Timestamp when the conversation was created.","examples":["2003-04-10T09:00:00.000Z"],"isRequired":true,"uniqueKey":"conversation.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","title":"Updated At","description":"Timestamp when the conversation was last updated.","examples":["2003-04-10T09:00:00.000Z"],"isRequired":true,"uniqueKey":"conversation.updatedAt","typeLabel":"string\u003cdate-time>"},"name":{"oneOf":[{"type":"string","title":"Name","description":"Optional name/title for the conversation.","example":"Bridge Support Team","uniqueKey":"conversation.name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","description":"Optional name/title for the conversation.","example":"Bridge Support Team","uniqueKey":"conversation.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"conversation.name","typeLabel":"string | null"},"status":{"oneOf":[{"type":"string","title":"ConversationStatus","description":"Current conversation status - 'ACTIVE' for visible conversations, 'GHOST' for invisible until first interaction.","enum":["ACTIVE","GHOST","RELEASED","NOT_ASSIGNED_TO_HUMAN","BLOCKED"],"example":"ACTIVE","uniqueKey":"conversation.status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Status","description":"Current conversation status - 'ACTIVE' for visible conversations, 'GHOST' for invisible until first interaction.","example":"ACTIVE","uniqueKey":"conversation.status.oneOf.1","typeLabel":"null"}],"uniqueKey":"conversation.status","typeLabel":"enum\u003cstring> | null"}},"type":"object","required":["id","workspaceId","participants","createdAt","updatedAt"],"title":"Conversation","description":"The conversation the Agent now controls: newly created, reused (`alreadyInitiated`) or recovered (`recovered`).","isRequired":true,"uniqueKey":"conversation","typeLabel":"Conversation · object"},"contact":{"properties":{"id":{"type":"string","title":"Identifier","description":"Unique identifier for the contact (UUID v4).","examples":["b6cf1c4a-2b1e-4e63-8f3e-0f9d1a2a1234"],"isRequired":true,"uniqueKey":"contact.id","typeLabel":"string"},"workspaceId":{"type":"string","title":"Workspace Identifier","description":"Unique identifier of the workspace this contact belongs to","examples":["92b2d4f3-81e1-4b61-a7ec-6f4ff3b58be5"],"isRequired":true,"uniqueKey":"contact.workspaceId","typeLabel":"string"},"type":{"type":"string","enum":["PARTIAL","NORMAL"],"title":"Contact Type","description":"NORMAL when all required identity and custom attribute fields are present, PARTIAL otherwise.","examples":["NORMAL","PARTIAL"],"isRequired":true,"uniqueKey":"contact.type","typeLabel":"enum\u003cstring>"},"createdAt":{"type":"string","title":"Created At","description":"Timestamp when the contact was created.","examples":["2003-04-10T08:00:00.000Z"],"isRequired":true,"uniqueKey":"contact.createdAt","typeLabel":"string"},"updatedAt":{"type":"string","title":"Updated At","description":"Timestamp when the contact was last updated.","examples":["2003-04-10T08:00:00.000Z"],"isRequired":true,"uniqueKey":"contact.updatedAt","typeLabel":"string"},"firstName":{"oneOf":[{"type":"string","title":"First Name","description":"Contact's first name.","example":"John","uniqueKey":"contact.firstName.oneOf.0","typeLabel":"string"},{"type":"null","title":"First Name","description":"Contact's first name.","example":"John","uniqueKey":"contact.firstName.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.firstName","typeLabel":"string | null"},"lastName":{"oneOf":[{"type":"string","title":"Last Name","description":"Contact's last name.","example":"Doe","uniqueKey":"contact.lastName.oneOf.0","typeLabel":"string"},{"type":"null","title":"Last Name","description":"Contact's last name.","example":"Doe","uniqueKey":"contact.lastName.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.lastName","typeLabel":"string | null"},"email":{"oneOf":[{"type":"string","title":"Email","description":"Contact's email address.","format":"email","example":"john.doe@example.com","uniqueKey":"contact.email.oneOf.0","typeLabel":"string\u003cemail>"},{"type":"null","title":"Email","description":"Contact's email address.","example":"john.doe@example.com","uniqueKey":"contact.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.email","typeLabel":"string\u003cemail> | null"},"cellphone":{"oneOf":[{"type":"string","title":"Cellphone","description":"Contact's cellphone address.","format":"phone","example":"+14084029292","uniqueKey":"contact.cellphone.oneOf.0","typeLabel":"string\u003cphone>"},{"type":"null","title":"Cellphone","description":"Contact's cellphone address.","example":"+14084029292","uniqueKey":"contact.cellphone.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.cellphone","typeLabel":"string\u003cphone> | null"},"customAttributes":{"items":{"properties":{"key":{"type":"string","title":"Key","description":"Attribute key/name","isRequired":true,"uniqueKey":"contact.customAttributes.items.[INDEX].key","typeLabel":"string"},"values":{"items":{"type":"string","uniqueKey":"contact.customAttributes.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Values","description":"Attribute value","uniqueKey":"contact.customAttributes.items.[INDEX].values","typeLabel":"string[]"}},"type":"object","required":["key"],"title":"CustomAttributeResponse","description":"Response body for custom attributes in contact-related operations.","uniqueKey":"contact.customAttributes.items.[INDEX]","typeLabel":"CustomAttributeResponse · object"},"type":"array","title":"Custom Attributes","description":"Array of custom key-value attributes.","uniqueKey":"contact.customAttributes","typeLabel":"CustomAttributeResponse · object[]"},"languageCode":{"oneOf":[{"type":"string","title":"LanguageCode","description":"Language code from external user.","enum":["ES","EN"],"example":"EN","uniqueKey":"contact.languageCode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Language Code","description":"Language code from external user.","example":"EN","uniqueKey":"contact.languageCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.languageCode","typeLabel":"enum\u003cstring> | null"},"ownerId":{"oneOf":[{"type":"string","title":"Owner Identifier","description":"Email address of the salesperson or user who owns this contact.","example":"37673840-6259-40f9-bbe5-a7db40f8e3cf","uniqueKey":"contact.ownerId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Owner Identifier","description":"Email address of the salesperson or user who owns this contact.","example":"37673840-6259-40f9-bbe5-a7db40f8e3cf","uniqueKey":"contact.ownerId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.ownerId","typeLabel":"string | null"}},"type":"object","required":["id","workspaceId","type","createdAt","updatedAt"],"title":"Contact","description":"The contact the conversation was initiated with.","isRequired":true,"uniqueKey":"contact","typeLabel":"Contact · object"},"templateSent":{"oneOf":[{"type":"object","title":"AgentTemplateSent","description":"Summary of the template stored to open the conversation.","required":["name"],"properties":{"name":{"type":"string","title":"Template Name","description":"Name of the template that was dispatched.","examples":["leadscout_outbound_fb_v1"],"isRequired":true,"uniqueKey":"templateSent.oneOf.0.name","typeLabel":"string"},"messageId":{"oneOf":[{"type":"string","title":"Message Identifier","description":"Bridge message id of the template. Always present; it is not a WhatsApp `wamid`.","example":"7e1d2c3b-4a5f-6e7d-8c9b-0a1b2c3d4e5f","uniqueKey":"templateSent.oneOf.0.messageId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Message Identifier","description":"Bridge message id of the template. Always present; it is not a WhatsApp `wamid`.","example":"7e1d2c3b-4a5f-6e7d-8c9b-0a1b2c3d4e5f","uniqueKey":"templateSent.oneOf.0.messageId.oneOf.1","typeLabel":"null"}],"uniqueKey":"templateSent.oneOf.0.messageId","typeLabel":"string | null"}},"uniqueKey":"templateSent.oneOf.0","typeLabel":"AgentTemplateSent · object"},{"type":"null","title":"Template Sent","description":"Summary of the template stored to open the conversation.","uniqueKey":"templateSent.oneOf.1","typeLabel":"null"}],"uniqueKey":"templateSent","typeLabel":"AgentTemplateSent · object | null"},"additionalMessagesPersisted":{"type":"integer","title":"Additional Messages Persisted","description":"Count of follow-up messages persisted on the conversation.","default":0,"examples":[0,3],"uniqueKey":"additionalMessagesPersisted","typeLabel":"integer"},"alreadyInitiated":{"type":"boolean","title":"Already Initiated","description":"True when this request landed on a pre-existing conversation (forceSend=true reuse path); false when a fresh conversation was created. Informational only — the new template and follow-ups are persisted either way.","default":false,"examples":[false,true],"uniqueKey":"alreadyInitiated","typeLabel":"boolean"},"recovered":{"type":"boolean","title":"Recovered","description":"True when a released conversation the Contact had on the line was recovered instead of creating a new one. Recovery replaces the previous outbound context and `agentContext`. Recoverable lines are used even with `forceSend=false`.","default":false,"examples":[false,true],"uniqueKey":"recovered","typeLabel":"boolean"}},"type":"object","required":["conversation","contact"],"title":"AgentOutboundResponse","description":"Response body for a successful Agent outbound initiation.","uniqueKey":"","typeLabel":"AgentOutboundResponse · object"},"examples":{"Example":{"title":"Example","value":{"conversation":{"id":"b6cf1c4a-2b1e-4e63-8f3e-0f9d1a2a1234","workspaceId":"b6cf1c4a-2b1e-4e63-8f3e-0f9d1a2a1234","participants":{"externals":[{"identifier":"ef7ee722-5f95-415a-9a98-81eeae178b11","identifierType":"EMAIL","role":"EXTERNAL","joinedAt":"2004-04-10T09:00:00.000Z","lastSeenAt":null}],"internals":[{"identifier":"ef7ee722-5f95-415a-9a98-81eeae178b11","identifierType":"EMAIL","role":"EXTERNAL","joinedAt":"2004-04-10T09:00:00.000Z","lastSeenAt":null}]},"createdAt":"2003-04-10T09:00:00.000Z","updatedAt":"2003-04-10T09:00:00.000Z","name":"Bridge Support Team","status":"ACTIVE"},"contact":{"id":"b6cf1c4a-2b1e-4e63-8f3e-0f9d1a2a1234","workspaceId":"92b2d4f3-81e1-4b61-a7ec-6f4ff3b58be5","type":"NORMAL","createdAt":"2003-04-10T08:00:00.000Z","updatedAt":"2003-04-10T08:00:00.000Z","firstName":"John","lastName":"Doe","email":"john.doe@example.com","cellphone":"+14084029292","customAttributes":[{"key":"\u003cstring>","values":["\u003cstring>"]}],"languageCode":"EN","ownerId":"37673840-6259-40f9-bbe5-a7db40f8e3cf"},"templateSent":{"name":"leadscout_outbound_fb_v1","messageId":"7e1d2c3b-4a5f-6e7d-8c9b-0a1b2c3d4e5f"},"additionalMessagesPersisted":0,"alreadyInitiated":false,"recovered":false}}},"exampleType":"generated"}},"exampleType":"generated"},"4447f99a-1d64-4612-9c48-273821d14187":{"description":"Bad Request","content":{"application/json":{"examples":{"BAD_REQUEST":{"title":"BAD_REQUEST","value":{"title":"Bad Request","status":400,"code":"BRIDGE_CORE_0103"}},"OUTBOUND_VALIDATION_ERROR":{"title":"OUTBOUND_VALIDATION_ERROR","value":{"title":"Outbound Validation Error","status":400,"code":"BRIDGE_AI_LEADSCOUT_0016"}},"TEMPLATE_ORDERED_PARAMS_MISMATCH":{"title":"TEMPLATE_ORDERED_PARAMS_MISMATCH","value":{"title":"Template Params Mismatch","status":400,"code":"BRIDGE_AI_LEADSCOUT_0006"}}},"schema":{"properties":{"title":{"type":"string","title":"Title","description":"Short, summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","title":"Status","description":"HTTP status code generated by the origin server for this occurrence of the problem.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"oneOf":[{"type":"string","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"},"traceId":{"oneOf":[{"type":"string","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"traceId","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"errors":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.0","typeLabel":"Errors · object[]"},{"type":"null","title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"Errors · object[] | null"},"extra":{"oneOf":[{"type":"object","title":"Extra","description":"Extra information about the problem.","additionalProperties":true,"uniqueKey":"extra.oneOf.0","typeLabel":"Extra · object"},{"type":"null","title":"Extra","description":"Extra information about the problem.","uniqueKey":"extra.oneOf.1","typeLabel":"null"}],"uniqueKey":"extra","typeLabel":"Extra · object | null"}},"type":"object","required":["title","status"],"title":"Problem","description":"Object representing a Problem response body.","uniqueKey":"","typeLabel":"Problem · object"},"exampleType":"examples"}},"exampleType":"examples"},"ff91416d-8dca-44e0-9ad9-f1d89b8f0b64":{"description":"Forbidden","content":{"application/json":{"examples":{"FORBIDDEN":{"title":"FORBIDDEN","value":{"title":"Forbidden","status":403,"code":"BRIDGE_CORE_0301"}}},"schema":{"properties":{"title":{"type":"string","title":"Title","description":"Short, summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","title":"Status","description":"HTTP status code generated by the origin server for this occurrence of the problem.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"oneOf":[{"type":"string","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"},"traceId":{"oneOf":[{"type":"string","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"traceId","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"errors":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.0","typeLabel":"Errors · object[]"},{"type":"null","title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"Errors · object[] | null"},"extra":{"oneOf":[{"type":"object","title":"Extra","description":"Extra information about the problem.","additionalProperties":true,"uniqueKey":"extra.oneOf.0","typeLabel":"Extra · object"},{"type":"null","title":"Extra","description":"Extra information about the problem.","uniqueKey":"extra.oneOf.1","typeLabel":"null"}],"uniqueKey":"extra","typeLabel":"Extra · object | null"}},"type":"object","required":["title","status"],"title":"Problem","description":"Object representing a Problem response body.","uniqueKey":"","typeLabel":"Problem · object"},"exampleType":"examples"}},"exampleType":"examples"},"465ee309-54dd-4445-931e-c2a7bd11e980":{"description":"Not Found","content":{"application/json":{"examples":{"AGENT_NOT_FOUND":{"title":"AGENT_NOT_FOUND","value":{"title":"Agent Not Found","status":404,"code":"BRIDGE_AI_AGENT_OUTBOUND_0001"}},"NO_CHANNELS_FOR_AGENT":{"title":"NO_CHANNELS_FOR_AGENT","value":{"title":"No Channels For Agent","status":404,"code":"BRIDGE_AI_AGENT_OUTBOUND_0004"}},"EXTERNAL_USER_NOT_FOUND":{"title":"EXTERNAL_USER_NOT_FOUND","value":{"title":"External User Not Found","status":404,"code":"BRIDGE_AI_LEADSCOUT_0001"}},"INTERNAL_USER_NOT_FOUND":{"title":"INTERNAL_USER_NOT_FOUND","value":{"title":"Internal User Not Found","status":404,"code":"BRIDGE_AI_LEADSCOUT_0002"}},"TEMPLATE_NOT_FOUND":{"title":"TEMPLATE_NOT_FOUND","value":{"title":"Template Not Found","status":404,"code":"BRIDGE_AI_LEADSCOUT_0004"}},"NO_CHANNELS_FOR_BRAND":{"title":"NO_CHANNELS_FOR_BRAND","value":{"title":"No Channels For Brand","status":404,"code":"BRIDGE_AI_LEADSCOUT_0009"}}},"schema":{"properties":{"title":{"type":"string","title":"Title","description":"Short, summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","title":"Status","description":"HTTP status code generated by the origin server for this occurrence of the problem.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"oneOf":[{"type":"string","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"},"traceId":{"oneOf":[{"type":"string","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"traceId","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"errors":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.0","typeLabel":"Errors · object[]"},{"type":"null","title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"Errors · object[] | null"},"extra":{"oneOf":[{"type":"object","title":"Extra","description":"Extra information about the problem.","additionalProperties":true,"uniqueKey":"extra.oneOf.0","typeLabel":"Extra · object"},{"type":"null","title":"Extra","description":"Extra information about the problem.","uniqueKey":"extra.oneOf.1","typeLabel":"null"}],"uniqueKey":"extra","typeLabel":"Extra · object | null"}},"type":"object","required":["title","status"],"title":"Problem","description":"Object representing a Problem response body.","uniqueKey":"","typeLabel":"Problem · object"},"exampleType":"examples"}},"exampleType":"examples"},"370710fb-1e3f-4ec5-a216-bbda222820af":{"description":"Conflict","content":{"application/json":{"examples":{"AGENT_NOT_AVAILABLE":{"title":"AGENT_NOT_AVAILABLE","value":{"title":"Agent Not Available","status":409,"code":"BRIDGE_AI_AGENT_OUTBOUND_0002"}},"ACTIVE_CONVERSATION_CONTROLLED_BY_OTHER_AGENT":{"title":"ACTIVE_CONVERSATION_CONTROLLED_BY_OTHER_AGENT","value":{"title":"Conversation Controlled By Other Agent","status":409,"code":"BRIDGE_AI_AGENT_OUTBOUND_0006"}},"INTERNAL_USER_DELETED":{"title":"INTERNAL_USER_DELETED","value":{"title":"Internal User Deleted","status":409,"code":"BRIDGE_AI_LEADSCOUT_0003"}},"TEMPLATE_NOT_APPROVED":{"title":"TEMPLATE_NOT_APPROVED","value":{"title":"Template Not Approved","status":409,"code":"BRIDGE_AI_LEADSCOUT_0005"}},"ACTIVE_CONVERSATION_ALREADY_EXISTS":{"title":"ACTIVE_CONVERSATION_ALREADY_EXISTS","value":{"title":"Active Conversation Exists","status":409,"code":"BRIDGE_AI_LEADSCOUT_0007"}},"ALL_PROVIDER_CHANNELS_OCCUPIED":{"title":"ALL_PROVIDER_CHANNELS_OCCUPIED","value":{"title":"All Channels Occupied","status":409,"code":"BRIDGE_AI_LEADSCOUT_0008"}},"LATEST_SESSION_NOT_FINAL":{"title":"LATEST_SESSION_NOT_FINAL","value":{"title":"Latest Session Not Final","status":409,"code":"BRIDGE_AI_LEADSCOUT_0017"}},"SESSION_FINALIZATION_FAILED":{"title":"SESSION_FINALIZATION_FAILED","value":{"title":"Session Finalization Failed","status":409,"code":"BRIDGE_AI_LEADSCOUT_0018"}}},"schema":{"properties":{"title":{"type":"string","title":"Title","description":"Short, summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","title":"Status","description":"HTTP status code generated by the origin server for this occurrence of the problem.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"oneOf":[{"type":"string","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"},"traceId":{"oneOf":[{"type":"string","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"traceId","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"errors":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.0","typeLabel":"Errors · object[]"},{"type":"null","title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"Errors · object[] | null"},"extra":{"oneOf":[{"type":"object","title":"Extra","description":"Extra information about the problem.","additionalProperties":true,"uniqueKey":"extra.oneOf.0","typeLabel":"Extra · object"},{"type":"null","title":"Extra","description":"Extra information about the problem.","uniqueKey":"extra.oneOf.1","typeLabel":"null"}],"uniqueKey":"extra","typeLabel":"Extra · object | null"}},"type":"object","required":["title","status"],"title":"Problem","description":"Object representing a Problem response body.","uniqueKey":"","typeLabel":"Problem · object"},"exampleType":"examples"}},"exampleType":"examples"},"b1f8f6f4-d7b9-48a6-8511-bbe13ca2d5ca":{"description":"Unprocessable Content","content":{"application/json":{"examples":{"AGENT_TYPE_NOT_SUPPORTED":{"title":"AGENT_TYPE_NOT_SUPPORTED","value":{"title":"Agent Type Not Supported","status":422,"code":"BRIDGE_AI_AGENT_OUTBOUND_0003"}},"AGENT_NOT_ASSIGNED_TO_CHANNEL":{"title":"AGENT_NOT_ASSIGNED_TO_CHANNEL","value":{"title":"Agent Not Assigned To Channel","status":422,"code":"BRIDGE_AI_AGENT_OUTBOUND_0005"}},"MISSING_TEMPLATE_VARIABLES":{"title":"MISSING_TEMPLATE_VARIABLES","value":{"title":"Missing Template Variables","status":422,"code":"BRIDGE_AI_LEADSCOUT_0019"}},"CONFLICTING_TEMPLATE_PARAMETERS":{"title":"CONFLICTING_TEMPLATE_PARAMETERS","value":{"title":"Conflicting Template Parameters","status":422,"code":"BRIDGE_AI_LEADSCOUT_0020"}},"UNKNOWN_TEMPLATE_PARAMETER_KEY":{"title":"UNKNOWN_TEMPLATE_PARAMETER_KEY","value":{"title":"Unknown Template Parameter Key","status":422,"code":"BRIDGE_AI_LEADSCOUT_0021"}}},"schema":{"properties":{"title":{"type":"string","title":"Title","description":"Short, summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","title":"Status","description":"HTTP status code generated by the origin server for this occurrence of the problem.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"oneOf":[{"type":"string","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"},"traceId":{"oneOf":[{"type":"string","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"traceId","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"errors":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.0","typeLabel":"Errors · object[]"},{"type":"null","title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"Errors · object[] | null"},"extra":{"oneOf":[{"type":"object","title":"Extra","description":"Extra information about the problem.","additionalProperties":true,"uniqueKey":"extra.oneOf.0","typeLabel":"Extra · object"},{"type":"null","title":"Extra","description":"Extra information about the problem.","uniqueKey":"extra.oneOf.1","typeLabel":"null"}],"uniqueKey":"extra","typeLabel":"Extra · object | null"}},"type":"object","required":["title","status"],"title":"Problem","description":"Object representing a Problem response body.","uniqueKey":"","typeLabel":"Problem · object"},"exampleType":"examples"}},"exampleType":"examples"},"278abe95-50d8-4f0d-8888-4ef401786716":{"description":"Too Many Requests","content":{"application/json":{"schema":{"properties":{"title":{"type":"string","title":"Title","description":"Short, summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","title":"Status","description":"HTTP status code generated by the origin server for this occurrence of the problem.","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"oneOf":[{"type":"string","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","title":"Detail","description":"Explanation specific to this occurrence of the problem.","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","title":"Instance","description":"A URI reference that identifies the specific occurrence of the problem.","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"},"traceId":{"oneOf":[{"type":"string","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Traceid","description":"Trace ID for debugging purposes.","uniqueKey":"traceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"traceId","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Code","description":"Error code for identification, view the error codes page for more details.","uniqueKey":"code.oneOf.1","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"string | null"},"errors":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.0","typeLabel":"Errors · object[]"},{"type":"null","title":"Errors","description":"List of error details.","uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"Errors · object[] | null"},"extra":{"oneOf":[{"type":"object","title":"Extra","description":"Extra information about the problem.","additionalProperties":true,"uniqueKey":"extra.oneOf.0","typeLabel":"Extra · object"},{"type":"null","title":"Extra","description":"Extra information about the problem.","uniqueKey":"extra.oneOf.1","typeLabel":"null"}],"uniqueKey":"extra","typeLabel":"Extra · object | null"}},"type":"object","required":["title","status"],"title":"Problem","description":"Object representing a Problem response body.","uniqueKey":"","typeLabel":"Problem · object"},"examples":{"WORKSPACE_BUDGET_EXHAUSTED":{"title":"WORKSPACE_BUDGET_EXHAUSTED","value":{"title":"Too Many Requests","status":429,"code":"BRIDGE_RATE_LIMIT_0001"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"3966ad54-9c0f-46f5-97dc-76b1a7cab432":{"x-api-key":{"type":"apiKey","description":"Copy the API key as provided by the Bridge Console.","in":"header","name":"x-api-key","scopes":[],"schemeName":"x-api-key"}}},"servers":{"2ab3b376-6ea8-4949-a2e4-fb60760c5462":{"url":"https://api-connect-us.bridge.new","description":"Production server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","description":"Copy the API key as provided by the Bridge Console.","in":"header","name":"x-api-key","scopes":[],"schemeName":"x-api-key"},"schema":{"title":"x-api-key","type":"string","description":"Copy the API key as provided by the Bridge Console.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"x-api-key","name":"x-api-key"}],"title":"x-api-key"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"sainapsisinc","siteName":"Bridge REST Integrations API \u0026 Webhooks","title":"Start an outbound conversation with a Contact as a given Agent - Bridge REST Integrations API \u0026 Webhooks","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T16:27:29.957Z","originalFileLocation":"api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Start an outbound conversation with a known Contact, answered by the given Agent. Works for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in the workspace and be available (see GET /agents). The template must exist and be APPROVED, and a handoffOverride Bridge User must be valid. If template.media.mediaId is unknown, the request fails with 400 BRIDGE_AI_LEADSCOUT_0016 only after the conversation was created or recovered, so a retry after that error may answer differently. Body rules (consent.status=GRANTED without capturedAt, template.media without exactly one of mediaId or url) fail with 400 BRIDGE_CORE_0103. The conversation opens on one of the Agent\u0026#x27;s active WhatsApp lines, controlled by the Agent, with the template as its first message. A line is picked in this order: - A free line. - Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering returns recovered=true and replaces the previous outbound context and agentContext. This happens even with forceSend=false. - Otherwise, when no line is free or recoverable: forceSend=false (default) fails with 409 BRIDGE_AI_LEADSCOUT_0008; forceSend=true reuses a line occupied by an active conversation with this Contact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a Bridge User, the call fails with 409 BRIDGE_AI_AGENT_OUTBOUND_0006 and nothing is written. Release it first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so if no line is occupied by an active conversation the call fails with 409 BRIDGE_AI_LEADSCOUT_0008 even with forceSend=true. contact.providerChannelId is a preference: the pinned line is used when it is free or recoverable; otherwise the same order applies over all the Agent\u0026#x27;s lines. Among occupied lines, one this Agent controls comes first; if none does, the pinned line is the one reused (and may fail with 0006). Reusing a conversation depends on the Agent type: - LeadScout: if its LeadScout session is still open and not expired, the call fails with 409 BRIDGE_AI_LEADSCOUT_0017 (extra carries conversationId, sessionId and stage). If an expired session cannot be finalized, it fails with 409 BRIDGE_AI_LEADSCOUT_0018. - Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a new one opens.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Bridge REST Integrations API \u0026amp; Webhooks\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Start an outbound conversation with a Contact as a given Agent - Bridge REST Integrations API \u0026amp; Webhooks\">\u003cmeta data-mint-head property=\"og:description\" content=\"Start an outbound conversation with a known Contact, answered by the given Agent. Works for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in the workspace and be available (see GET /agents). The template must exist and be APPROVED, and a handoffOverride Bridge User must be valid. If template.media.mediaId is unknown, the request fails with 400 BRIDGE_AI_LEADSCOUT_0016 only after the conversation was created or recovered, so a retry after that error may answer differently. Body rules (consent.status=GRANTED without capturedAt, template.media without exactly one of mediaId or url) fail with 400 BRIDGE_CORE_0103. The conversation opens on one of the Agent\u0026#x27;s active WhatsApp lines, controlled by the Agent, with the template as its first message. A line is picked in this order: - A free line. - Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering returns recovered=true and replaces the previous outbound context and agentContext. This happens even with forceSend=false. - Otherwise, when no line is free or recoverable: forceSend=false (default) fails with 409 BRIDGE_AI_LEADSCOUT_0008; forceSend=true reuses a line occupied by an active conversation with this Contact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a Bridge User, the call fails with 409 BRIDGE_AI_AGENT_OUTBOUND_0006 and nothing is written. Release it first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so if no line is occupied by an active conversation the call fails with 409 BRIDGE_AI_LEADSCOUT_0008 even with forceSend=true. contact.providerChannelId is a preference: the pinned line is used when it is free or recoverable; otherwise the same order applies over all the Agent\u0026#x27;s lines. Among occupied lines, one this Agent controls comes first; if none does, the pinned line is the one reused (and may fail with 0006). Reusing a conversation depends on the Agent type: - LeadScout: if its LeadScout session is still open and not expired, the call fails with 409 BRIDGE_AI_LEADSCOUT_0017 (extra carries conversationId, sessionId and stage). If an expired session cannot be finalized, it fails with 409 BRIDGE_AI_LEADSCOUT_0018. - Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a new one opens.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Bridge REST Integrations API \u0026amp; Webhooks\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://sainapsisinc.mintlify.site/_mintlify/api/og/v2?division=Agents+API\u0026amp;title=Start+an+outbound+conversation+with+a+Contact+as+a+given+Agent\u0026amp;description=Start+an+outbound+conversation+with+a+known+Contact%2C+answered+by+the+given+Agent.%0A%0AWorks+for+LeadScout+and+Service+Agents.+The+Contact+is+resolved+first%2C+then+t\u0026amp;theme=fbb9ff84c04418b3fc52c1b9\u0026amp;signature=f62c70f6a47db54546987f967e76d0cd7895e1066981327cd52020a987abfdb5\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Start an outbound conversation with a Contact as a given Agent - Bridge REST Integrations API \u0026amp; Webhooks\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Start an outbound conversation with a known Contact, answered by the given Agent. Works for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in the workspace and be available (see GET /agents). The template must exist and be APPROVED, and a handoffOverride Bridge User must be valid. If template.media.mediaId is unknown, the request fails with 400 BRIDGE_AI_LEADSCOUT_0016 only after the conversation was created or recovered, so a retry after that error may answer differently. Body rules (consent.status=GRANTED without capturedAt, template.media without exactly one of mediaId or url) fail with 400 BRIDGE_CORE_0103. The conversation opens on one of the Agent\u0026#x27;s active WhatsApp lines, controlled by the Agent, with the template as its first message. A line is picked in this order: - A free line. - Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering returns recovered=true and replaces the previous outbound context and agentContext. This happens even with forceSend=false. - Otherwise, when no line is free or recoverable: forceSend=false (default) fails with 409 BRIDGE_AI_LEADSCOUT_0008; forceSend=true reuses a line occupied by an active conversation with this Contact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a Bridge User, the call fails with 409 BRIDGE_AI_AGENT_OUTBOUND_0006 and nothing is written. Release it first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so if no line is occupied by an active conversation the call fails with 409 BRIDGE_AI_LEADSCOUT_0008 even with forceSend=true. contact.providerChannelId is a preference: the pinned line is used when it is free or recoverable; otherwise the same order applies over all the Agent\u0026#x27;s lines. Among occupied lines, one this Agent controls comes first; if none does, the pinned line is the one reused (and may fail with 0006). Reusing a conversation depends on the Agent type: - LeadScout: if its LeadScout session is still open and not expired, the call fails with 409 BRIDGE_AI_LEADSCOUT_0017 (extra carries conversationId, sessionId and stage). If an expired session cannot be finalized, it fails with 409 BRIDGE_AI_LEADSCOUT_0018. - Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a new one opens.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://sainapsisinc.mintlify.site/_mintlify/api/og/v2?division=Agents+API\u0026amp;title=Start+an+outbound+conversation+with+a+Contact+as+a+given+Agent\u0026amp;description=Start+an+outbound+conversation+with+a+known+Contact%2C+answered+by+the+given+Agent.%0A%0AWorks+for+LeadScout+and+Service+Agents.+The+Contact+is+resolved+first%2C+then+t\u0026amp;theme=fbb9ff84c04418b3fc52c1b9\u0026amp;signature=f62c70f6a47db54546987f967e76d0cd7895e1066981327cd52020a987abfdb5\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/sainapsisinc/LWksyfunHyleJ2tH/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Bridge REST Integrations API \u0026amp; Webhooks\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2563EB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.bridge.new/#organization\",\"name\":\"Bridge REST Integrations API \u0026 Webhooks\",\"url\":\"https://docs.bridge.new\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/sainapsisinc/MRBSc5DvZcNEOxd1/logo/bridge_full_logo_light.png?fit=max\u0026auto=format\u0026n=MRBSc5DvZcNEOxd1\u0026q=85\u0026s=9a9d74ac33a89d538635507ba8d12eb9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.bridge.new#website\",\"name\":\"Bridge REST Integrations API \u0026 Webhooks\",\"url\":\"https://docs.bridge.new\",\"publisher\":{\"@id\":\"https://docs.bridge.new/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent#webpage\",\"url\":\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent\",\"name\":\"Start an outbound conversation with a Contact as a given Agent\",\"description\":\"Start an outbound conversation with a known Contact, answered by the given Agent. Works for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in the workspace and be available (see GET /agents). The template must exist and be APPROVED, and a handoffOverride Bridge User must be valid. If template.media.mediaId is unknown, the request fails with 400 BRIDGE_AI_LEADSCOUT_0016 only after the conversation was created or recovered, so a retry after that error may answer differently. Body rules (consent.status=GRANTED without capturedAt, template.media without exactly one of mediaId or url) fail with 400 BRIDGE_CORE_0103. The conversation opens on one of the Agent's active WhatsApp lines, controlled by the Agent, with the template as its first message. A line is picked in this order: - A free line. - Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering returns recovered=true and replaces the previous outbound context and agentContext. This happens even with forceSend=false. - Otherwise, when no line is free or recoverable: forceSend=false (default) fails with 409 BRIDGE_AI_LEADSCOUT_0008; forceSend=true reuses a line occupied by an active conversation with this Contact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a Bridge User, the call fails with 409 BRIDGE_AI_AGENT_OUTBOUND_0006 and nothing is written. Release it first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so if no line is occupied by an active conversation the call fails with 409 BRIDGE_AI_LEADSCOUT_0008 even with forceSend=true. contact.providerChannelId is a preference: the pinned line is used when it is free or recoverable; otherwise the same order applies over all the Agent's lines. Among occupied lines, one this Agent controls comes first; if none does, the pinned line is the one reused (and may fail with 0006). Reusing a conversation depends on the Agent type: - LeadScout: if its LeadScout session is still open and not expired, the call fails with 409 BRIDGE_AI_LEADSCOUT_0017 (extra carries conversationId, sessionId and stage). If an expired session cannot be finalized, it fails with 409 BRIDGE_AI_LEADSCOUT_0018. - Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a new one opens.\",\"dateModified\":\"2026-11-06T16:27:29.957Z\",\"isPartOf\":{\"@id\":\"https://docs.bridge.new#website\"},\"breadcrumb\":{\"@id\":\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Agents API\",\"item\":\"https://docs.bridge.new/api-reference/agents-api/list-the-agents-of-a-workspace\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Start an outbound conversation with a Contact as a given Agent\",\"item\":\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent#apireference\",\"headline\":\"Start an outbound conversation with a Contact as a given Agent\",\"name\":\"Start an outbound conversation with a Contact as a given Agent\",\"description\":\"Start an outbound conversation with a known Contact, answered by the given Agent. Works for LeadScout and Service Agents. The Contact is resolved first, then the Agent, which must exist in the workspace and be available (see GET /agents). The template must exist and be APPROVED, and a handoffOverride Bridge User must be valid. If template.media.mediaId is unknown, the request fails with 400 BRIDGE_AI_LEADSCOUT_0016 only after the conversation was created or recovered, so a retry after that error may answer differently. Body rules (consent.status=GRANTED without capturedAt, template.media without exactly one of mediaId or url) fail with 400 BRIDGE_CORE_0103. The conversation opens on one of the Agent's active WhatsApp lines, controlled by the Agent, with the template as its first message. A line is picked in this order: - A free line. - Otherwise, a line holding a released conversation with this Contact that can be recovered. Recovering returns recovered=true and replaces the previous outbound context and agentContext. This happens even with forceSend=false. - Otherwise, when no line is free or recoverable: forceSend=false (default) fails with 409 BRIDGE_AI_LEADSCOUT_0008; forceSend=true reuses a line occupied by an active conversation with this Contact, preferring one this Agent controls. If the chosen conversation is held by another Agent or a Bridge User, the call fails with 409 BRIDGE_AI_AGENT_OUTBOUND_0006 and nothing is written. Release it first, then retry. Lines whose conversation is blocked or was released without recovery are never used, so if no line is occupied by an active conversation the call fails with 409 BRIDGE_AI_LEADSCOUT_0008 even with forceSend=true. contact.providerChannelId is a preference: the pinned line is used when it is free or recoverable; otherwise the same order applies over all the Agent's lines. Among occupied lines, one this Agent controls comes first; if none does, the pinned line is the one reused (and may fail with 0006). Reusing a conversation depends on the Agent type: - LeadScout: if its LeadScout session is still open and not expired, the call fails with 409 BRIDGE_AI_LEADSCOUT_0017 (extra carries conversationId, sessionId and stage). If an expired session cannot be finalized, it fails with 409 BRIDGE_AI_LEADSCOUT_0018. - Service Agent: an open, unexpired service session is continued; an expired one is closed as abandoned and a new one opens.\",\"url\":\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent\",\"mainEntityOfPage\":{\"@id\":\"https://docs.bridge.new/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent#webpage\"},\"dateModified\":\"2026-11-06T16:27:29.957Z\",\"publisher\":{\"@id\":\"https://docs.bridge.new/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.bridge.new#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Bridge REST Integrations API \u0026 Webhooks\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Bridge REST Integrations API \u0026 Webhooks","nav":{"global":null,"tabs":[{"tab":"Introduction","pages":[{"title":"Introduction","href":""}]},{"tab":"REST API","groups":[{"group":"Health","pages":[{"title":"Health check","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/health","href":"/api-reference/health/health-check"}]},{"group":"Conversations API","pages":[{"title":"Get conversation by id","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/conversations/{conversationId}","href":"/api-reference/conversations-api/get-conversation-by-id"},{"title":"Update conversation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /bridge/api/v1/workspaces/{workspaceId}/conversations/{conversationId}","href":"/api-reference/conversations-api/update-conversation"},{"title":"Retrieve conversations with flexible filtering options","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/conversations","href":"/api-reference/conversations-api/retrieve-conversations-with-flexible-filtering-options"},{"title":"Creates a new conversation with flexible user identification.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/conversations","href":"/api-reference/conversations-api/creates-a-new-conversation-with-flexible-user-identification"},{"title":"Release conversation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/conversations/{conversationId}/release","href":"/api-reference/conversations-api/release-conversation"}]},{"group":"Messages API","pages":[{"title":"Create a new message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/messages","href":"/api-reference/messages-api/create-a-new-message"}]},{"group":"Contacts API","pages":[{"title":"Retrieve a contact by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/contacts/{contactId}","href":"/api-reference/contacts-api/retrieve-a-contact-by-id"},{"title":"Update contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /bridge/api/v1/workspaces/{workspaceId}/contacts/{contactId}","href":"/api-reference/contacts-api/update-contact"},{"title":"List contacts with filtering and pagination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/contacts","href":"/api-reference/contacts-api/list-contacts-with-filtering-and-pagination"},{"title":"Create a new contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/contacts","href":"/api-reference/contacts-api/create-a-new-contact"},{"title":"Create or update a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/contacts/partial","href":"/api-reference/contacts-api/create-or-update-a-contact"}]},{"group":"Files API","pages":[{"title":"Create presigned uploads for files","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/files","href":"/api-reference/files-api/create-presigned-uploads-for-files"}]},{"group":"Custom attributes API","pages":[{"title":"Retrieve custom attributes by workspaceId","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/settings/attributes","href":"/api-reference/custom-attributes-api/retrieve-custom-attributes-by-workspaceid"}]},{"group":"Provider channels API","pages":[{"title":"Get provider channels by workspace id","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/provider-channels","href":"/api-reference/provider-channels-api/get-provider-channels-by-workspace-id"},{"title":"Get provider channels by workspace id and provider type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/provider-channels/{messageProviderType}","href":"/api-reference/provider-channels-api/get-provider-channels-by-workspace-id-and-provider-type"}]},{"group":"LeadScout API","pages":[{"title":"Initiate a LeadScout outbound conversation with a known lead","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/leadscout/outbound","href":"/api-reference/leadscout-api/initiate-a-leadscout-outbound-conversation-with-a-known-lead"},{"title":"Request a manual handoff of a LeadScout conversation to internal users","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/leadscout/conversations/{conversationId}/handoff","href":"/api-reference/leadscout-api/request-a-manual-handoff-of-a-leadscout-conversation-to-internal-users"}]},{"group":"Templates API","pages":[{"title":"Discover a template's agnostic variable inventory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/templates/{templateId}","href":"/api-reference/templates-api/discover-a-templates-agnostic-variable-inventory"}]},{"group":"Internal Users API","pages":[{"title":"Retrieve an internal user by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/users/{userId}","href":"/api-reference/internal-users-api/retrieve-an-internal-user-by-id"},{"title":"List internal users with filtering and pagination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/users","href":"/api-reference/internal-users-api/list-internal-users-with-filtering-and-pagination"}]},{"group":"Agents API","pages":[{"title":"List the Agents of a workspace","description":"List the workspace's Agents with their status, availability and lines.\n\nEvery Agent is listed whatever its status; `available` tells whether it can start conversations.\nA page can hold fewer than `limit` items; keep paging while `cursor` is not null.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bridge/api/v1/workspaces/{workspaceId}/agents","href":"/api-reference/agents-api/list-the-agents-of-a-workspace"},{"title":"Start an outbound conversation with a Contact as a given Agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bridge/api/v1/workspaces/{workspaceId}/agents/{agentId}/outbound","href":"/api-reference/agents-api/start-an-outbound-conversation-with-a-contact-as-a-given-agent"}]}]},{"tab":"Lead Capture","pages":[{"title":"Lead Capture","href":"/lead-capture"}]},{"tab":"Webhooks","pages":[{"title":"Webhooks","href":"/webhooks"}]}]},"basePath":"","title":"Start an outbound conversation with a Contact as a given Agent - Bridge REST Integrations API \u0026 Webhooks","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}