Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click here.
Updated conversation flow (node graph) for the Pearl. When omitted, the current flow is kept unchanged.
When provided, it replaces the whole flow, so send the complete node graph.
Variables that can be defined, stored, and used by the agent during conversations. Used together with Pearl.
For details on variable groups and how to use variables in supported fields, see: Flow Variables
Partial update of the inbound text settings: only the fields present in the JSON are applied.
When omitted, the inbound settings are kept unchanged. Must not be provided together with Outbound.
Partial update of the outbound text settings: only the fields present in the JSON are applied.
When omitted, the outbound settings are kept unchanged. Must not be provided together with Inbound.
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"NLPearl Documentation","colors":{"primary":"#111111","light":"#F7F7F7","dark":"#111111"},"logo":{"light":"https://mintcdn.com/nlpearl/DSJnNLmkdffV1qq-/images/light_mode/logo_dark.png?fit=max\u0026auto=format\u0026n=DSJnNLmkdffV1qq-\u0026q=85\u0026s=a0f34eb8d06f12c8f03693ffc4dfffeb","dark":"https://mintcdn.com/nlpearl/OLkkXJCUYovrG0y1/images/dark_mode/logo_white.png?fit=max\u0026auto=format\u0026n=OLkkXJCUYovrG0y1\u0026q=85\u0026s=ca1df5c71744266b64671933f827dfa0"},"favicon":"https://mintcdn.com/nlpearl/yjNN1PpSs3yxoZOQ/logo/NLPearlPhoneBlack.png?fit=max\u0026auto=format\u0026n=yjNN1PpSs3yxoZOQ\u0026q=85\u0026s=e3e03483b2f74c5695aba247785b4980","background":{"color":{"dark":"#1A1A19"}},"fonts":{"family":"Roboto"},"banner":{"content":"🎙️ Pearl TTS is now live! [Turn text into speech](/pages/voice_studio) and clone your own voice in Voice Studio.","dismissible":true},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"nlpearl","hasAudioNarration":false,"actualSubdomain":"nlpearl","customDomains":["developers.nlpearl.ai"],"gitSource":{"type":"github","owner":"nlpearldev","repo":"nlpearldocumentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad77025710dce97c7a197e7","collectionId":"1f4496a1-f4d8-4e3b-a9d2-fe78b38aa409","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad77025710dce97c7a197e7"},"entitlements":{},"buildId":"6ad77025710dce97c7a197e7","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"API Reference","count":79},{"language":"default","tag":"API V2","count":47},{"language":"default","tag":"Docs","count":46},{"language":"default","tag":"API V1","count":26},{"language":"default","tag":"Outbound","count":25},{"language":"default","tag":"Pearl Configurations","count":20},{"language":"default","tag":"General","count":14},{"language":"default","tag":"Pearl Voice","count":13},{"language":"default","tag":"Pearl Text","count":11},{"language":"default","tag":"Account","count":10}]},"assistantConfig":{},"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"css/custom.css","content":"a[href=\"https://platform.nlpearl.ai/\"]{transition:color .3s ease,fill .3s ease}a[href=\"https://platform.nlpearl.ai/\"]:hover{color:#006ffe}a[href=\"https://platform.nlpearl.ai/\"]:hover svg,a[href=\"https://platform.nlpearl.ai/\"]:hover svg path{fill:#1620aa!important}[class*=max-w-xl][class*=grow],[class*=max-w-xl][class*=max-w-2xl]{max-width:48rem!important}a.nav-tabs-item[href*=api-reference]{color:#2dbe73!important;font-weight:600!important}a.nav-tabs-item[href*=api-reference]:hover,a.nav-tabs-item[href*=api-reference][class*=text-shadow]{color:#2dbe73!important}.dark a.nav-tabs-item[href*=api-reference][class*=text-shadow]{color:#fff!important}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:#a1a1a1;text-align:left}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){display:table}.dark #content-area div.mdx-content .prose li,.dark #content-area div.mdx-content .prose span[data-as=p],.dark #content-area div.mdx-content .prose td,.dark #content-area div.mdx-content.prose li,.dark #content-area div.mdx-content.prose td,.dark #content-area div.mdx-content.prose>span[data-as=p]{color:#c8c8c8!important}.dark #content-area div.mdx-content .callout li,.dark #content-area div.mdx-content .callout p,.dark #content-area div.mdx-content .callout span,.dark #content-area div.mdx-content .callout span[data-as=p],.dark #content-area div.mdx-content .callout td{color:inherit!important}details.accordion{background-color:rgba(255,255,255,.025)!important}details.accordion>summary{padding:13px 12px!important;transition:background-color .2s ease}details.accordion>summary:hover{background-color:rgba(255,255,255,.05)!important}details.accordion p[data-component-part=accordion-title]{font-size:.9rem!important}.accordion-group,details.accordion{border-color:rgba(255,255,255,.08)!important}.accordion-group>details{border-color:rgba(255,255,255,.06)!important}#banner{background-color:#1f1f1f!important}:root[class~=dark]{--background:60 2% 10%!important;--background-dark:26 26 25!important}"}],"page":{"pagePath":"api-reference/v2/pearlFlow/update-text-pearl","slug":"/api-reference/v2/pearlFlow/update-text-pearl","pageMetadata":{"openapi":"put /v2/Pearl/Text/{pearlId}","title":"Update Text Pearl","description":"Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click [here](/api-reference/building_a_flow).","href":"/api-reference/v2/pearlFlow/update-text-pearl"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click \", _jsx(_components.a, {\n href: \"/api-reference/building_a_flow\",\n children: \"here\"\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":{"openapi":"put /v2/Pearl/Text/{pearlId}","title":"Update Text Pearl","description":"Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click [here](/api-reference/building_a_flow).","href":"/api-reference/v2/pearlFlow/update-text-pearl"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Pearl"],"summary":"Update Text Pearl","description":"Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click [here](/api-reference/building_a_flow).","parameters":["5db43da1-f6a1-4e66-aa9d-71f3007a13e9"],"requestBody":"3dc767fa-a73b-4dbe-83c5-8ec96c8893f9","responses":{"200":"682fdc8c-b2e5-4e9b-90fd-f01ea004ce29","400":"df4a7e67-9bb5-4d18-b6a4-6c32519fa461"},"method":"put","type":"path","servers":["31330d28-5e54-49c3-a09a-2d05db9b1d8c"],"security":["5fa4ed7a-1df3-4139-95c8-ed349099ff1a","8c5918d2-96d7-4250-9504-fe7b9e421590"],"path":"/v2/Pearl/Text/{pearlId}","baseUrlOptions":["https://api.nlpearl.ai"],"title":"Update Text Pearl","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"5db43da1-f6a1-4e66-aa9d-71f3007a13e9":{"name":"pearlId","in":"path","required":true,"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"The updated name of the Pearl.","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The updated name of the Pearl.","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"pearl":{"oneOf":[{"type":"object","description":"Updated conversation flow (node graph) for the Pearl. When omitted, the current flow is kept unchanged.\r\nWhen provided, it replaces the whole flow, so send the complete node graph.","properties":{"agentPersonality":{"oneOf":[{"type":"string","description":"Defines the agent's personality and tone (for example, more assertive or more calm).\n\nConstraints:\n- Max length: 35 characters.","uniqueKey":"pearl.oneOf.0.agentPersonality.oneOf.0","typeLabel":"string"},{"type":"null","description":"Defines the agent's personality and tone (for example, more assertive or more calm).\n\nConstraints:\n- Max length: 35 characters.","uniqueKey":"pearl.oneOf.0.agentPersonality.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.agentPersonality","typeLabel":"string | null"},"timeZone":{"oneOf":[{"type":"string","description":"Time zone identifier used by the Pearl's agents.\r\n \r\nThe agent will operate according to this time zone, regardless of the lead/customer local time zone.\r\nFor accepted values, refer to the [Windows Time Zones list](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11).\r\n \r\nExample: \"Pacific Standard Time\", \"Romance Standard Time\".","uniqueKey":"pearl.oneOf.0.timeZone.oneOf.0","typeLabel":"string"},{"type":"null","description":"Time zone identifier used by the Pearl's agents.\r\n \r\nThe agent will operate according to this time zone, regardless of the lead/customer local time zone.\r\nFor accepted values, refer to the [Windows Time Zones list](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11).\r\n \r\nExample: \"Pacific Standard Time\", \"Romance Standard Time\".","uniqueKey":"pearl.oneOf.0.timeZone.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.timeZone","typeLabel":"string | null"},"modelType":{"oneOf":[{"type":"integer","description":"Agent model type.\n\nVoice Pearls use one of these models:\n- Trident: Highest-quality model with standard rate. Optimized for natural, human-like interactions.\n- Oyster: Most cost-effective model (2 credits cheaper per minute). Straightforward, prioritizes simplicity and efficiency.\n- Arrow: Default for voice Pearls. High-intelligence model with the same depth as Trident, built for ultra-low latency (fastest). Costs 2 credits more per minute.\n- Hydra: Smartest model, built for demanding tasks that need deeper reasoning. Costs 2 credits more per minute.\n\nText Pearls (chat and messaging conversations) use one of these models:\n- Orchid: Default for text Pearls. The most advanced text model, smarter than Swan, with high reasoning. Costs 1 credit more per message.\n- Swan: Text model with high reasoning and standard rate.\n\nOrchid and Swan are not available for voice Pearls, and the voice models are not available for text Pearls.\n\n`1 - Trident`\n\n`2 - Oyster`\n\n`3 - Arrow`\n\n`4 - Hydra`\n\n`5 - Flame`\n\n`11 - Swan`\n\n`12 - Orchid`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.modelType.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.modelType.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.modelType","typeLabel":"integer\u003cint32> | null"},"companyName":{"oneOf":[{"type":"string","description":"The company name used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 100 characters.","uniqueKey":"pearl.oneOf.0.companyName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The company name used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 100 characters.","uniqueKey":"pearl.oneOf.0.companyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.companyName","typeLabel":"string | null"},"companyDescription":{"oneOf":[{"type":"string","description":"The company description used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 500 characters.","uniqueKey":"pearl.oneOf.0.companyDescription.oneOf.0","typeLabel":"string"},{"type":"null","description":"The company description used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 500 characters.","uniqueKey":"pearl.oneOf.0.companyDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.companyDescription","typeLabel":"string | null"},"generalInstructions":{"oneOf":[{"type":"string","description":"General behavior guidelines applied to the agent across the whole conversation, on top of the\r\nper-node scripts and instructions (for example a tone to keep or rules that always apply).\r\n \r\nConstraints:\r\n- Max length: 2,500 characters.\r\n- Cannot contain variables.","uniqueKey":"pearl.oneOf.0.generalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"General behavior guidelines applied to the agent across the whole conversation, on top of the\r\nper-node scripts and instructions (for example a tone to keep or rules that always apply).\r\n \r\nConstraints:\r\n- Max length: 2,500 characters.\r\n- Cannot contain variables.","uniqueKey":"pearl.oneOf.0.generalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.generalInstructions","typeLabel":"string | null"},"knowledgeBase":{"oneOf":[{"type":"string","description":"Knowledge base content provided to the agent, such as FAQs, internal context, and operational instructions.\r\n \r\nConstraints:\r\n- Max length: 20,000 characters.","uniqueKey":"pearl.oneOf.0.knowledgeBase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Knowledge base content provided to the agent, such as FAQs, internal context, and operational instructions.\r\n \r\nConstraints:\r\n- Max length: 20,000 characters.","uniqueKey":"pearl.oneOf.0.knowledgeBase.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.knowledgeBase","typeLabel":"string | null"},"memory":{"oneOf":[{"type":"boolean","description":"Indicates whether memory is enabled. When enabled, the Pearl can remember previous conversations for a given phone number.","uniqueKey":"pearl.oneOf.0.memory.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether memory is enabled. When enabled, the Pearl can remember previous conversations for a given phone number.","uniqueKey":"pearl.oneOf.0.memory.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.memory","typeLabel":"boolean | null"},"successDescription":{"oneOf":[{"type":"string","description":"Description of what makes a conversation successful. Used to evaluate and report the conversation outcome.\r\n \r\nConstraints:\r\n- Max length: 200 characters.","uniqueKey":"pearl.oneOf.0.successDescription.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description of what makes a conversation successful. Used to evaluate and report the conversation outcome.\r\n \r\nConstraints:\r\n- Max length: 200 characters.","uniqueKey":"pearl.oneOf.0.successDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.successDescription","typeLabel":"string | null"},"indicatorTags":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z).","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z).","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"The label name.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The label name.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"color":{"type":"integer","description":"The color of the indicator tag.\n\n`1 - purple`\n\n`2 - red`\n\n`3 - yellow`\n\n`4 - green`\n\n`5 - blue`\n\n`6 - pink`\n\n`7 - teal`\n\n`8 - lime`\n\n`8 - gradient1`\n\n`9 - gradient2`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].color","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Indicator tags used to classify conversations (name, description and color).\r\n \r\nConstraints:\r\n- Max entries: 10.\r\n- Colors must be unique across tags.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z)."},{"type":"null","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z)."}]},"name":{"oneOf":[{"type":"string","description":"The label name.\r\n \r\nMax 25 characters only."},{"type":"null","description":"The label name.\r\n \r\nMax 25 characters only."}]},"description":{"oneOf":[{"type":"string","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only."},{"type":"null","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only."}]},"color":{"type":"integer","description":"The color of the indicator tag.\n\n`1 - purple`\n\n`2 - red`\n\n`3 - yellow`\n\n`4 - green`\n\n`5 - blue`\n\n`6 - pink`\n\n`7 - teal`\n\n`8 - lime`\n\n`8 - gradient1`\n\n`9 - gradient2`\n\n","format":"int32"}},"additionalProperties":false},"description":"Indicator tags used to classify conversations (name, description and color).\r\n \r\nConstraints:\r\n- Max entries: 10.\r\n- Colors must be unique across tags.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags","typeLabel":"object[] | null"},"nodes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"nodeId":{"oneOf":[{"type":"string","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeId","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Display name of the node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name of the node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"nodeType":{"type":"integer","description":"The type of a node in a Pearl's conversation flow. It determines what the node does and which settings object it carries.\n\n- OpeningSentence: the first message the agent sends to start the conversation.\n- PreCallAPI: an API call executed before the conversation starts (for example a customer lookup). Its transitions use apiResult to branch on success or failure.\n- Dialogue: a scripted node where the agent converses with the customer.\n- HandoffChatToHuman: hands the conversation over to a human operator. Text Pearls only.\n- API: an API call executed during the conversation.\n- SMS: sends an SMS message.\n- Email: sends an email.\n- TransferCall: transfers the call to another phone number. Voice Pearls only.\n- StartCallRecording: starts recording the call from this point. Voice Pearls only. This node carries no settings.\n- SearchKnowledgeBase: searches the agent's knowledge base and returns the answer.\n- EndCall: terminates the conversation. Exactly one per flow, and every path must lead to it.\n- PostCallActions: a container whose nested actions run after the conversation ends.\n\n`2 - OpeningSentence`\n\n`3 - PreCallAPI`\n\n`10 - Dialogue`\n\n`31 - HandoffChatToHuman`\n\n`40 - API`\n\n`50 - SMS`\n\n`51 - Email`\n\n`60 - TransferCall`\n\n`65 - StartCallRecording`\n\n`80 - SearchKnowledgeBase`\n\n`100 - EndCall`\n\n`200 - PostCallActions`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeType","typeLabel":"integer\u003cint32>"},"transitions":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].toNodeId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The NodeId of the target node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].toNodeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].toNodeId","typeLabel":"string | null"},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].apiResult.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].apiResult.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].apiResult","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions","typeLabel":"object[] | null"},"script":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].script.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].script.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].script","typeLabel":"string | null"},"instructions":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].instructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].instructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].instructions","typeLabel":"string | null"},"apiSettings":{"oneOf":[{"type":"object","description":"API call configuration. Required when the node type is API or PreCallAPI.","properties":{"name":{"oneOf":[{"type":"string","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.name","typeLabel":"string | null"},"method":{"type":"integer","description":"The HTTP method used for the API request.\n\n`1 - GET`\n\n`2 - POST`\n\n`3 - PUT`\n\n`4 - DELETE`\n\n`5 - PATCH`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.method","typeLabel":"integer\u003cint32>"},"endpointUrl":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.endpointUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.endpointUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.endpointUrl","typeLabel":"string | null"},"body":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].key.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].key","typeLabel":"string | null"},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].variableId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].variableId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].variableId","typeLabel":"string | null"},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].type.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].type","typeLabel":"integer\u003cint32> | null"},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"required":{"type":"boolean","description":"Indicates whether this request body field is required.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].required","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body","typeLabel":"object[] | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional HTTP headers to include in the API request.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional HTTP headers to include in the API request.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers","typeLabel":"object | null"},"description":{"oneOf":[{"type":"string","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.description","typeLabel":"string | null"},"outputBody":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].key.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].key","typeLabel":"string | null"},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].variableId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].variableId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].variableId","typeLabel":"string | null"},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].type.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].type","typeLabel":"integer\u003cint32> | null"},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"required":{"type":"boolean","description":"Indicates whether this request body field is required.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].required","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody","typeLabel":"object[] | null"},"credentialId":{"oneOf":[{"type":"string","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId}).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.credentialId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId}).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.credentialId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.credentialId","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings","typeLabel":"object | null"},"smsSettings":{"oneOf":[{"type":"object","description":"SMS configuration. Required when the node type is SMS.","properties":{"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0.body.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0.body","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings","typeLabel":"object | null"},"emailSettings":{"oneOf":[{"type":"object","description":"Email configuration. Required when the node type is Email.","properties":{"to":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to","typeLabel":"string[] | null"},"cc":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc","typeLabel":"string[] | null"},"subject":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.subject.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.subject.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.subject","typeLabel":"string | null"},"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.body.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.body","typeLabel":"string | null"},"smtpSettings":{"oneOf":[{"type":"object","description":"Optional SMTP configuration used to send the email.\r\nIf not provided, the email is sent using the default platform email sender.","properties":{"id":{"oneOf":[{"type":"string","description":"Optional SMTP configuration identifier.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional SMTP configuration identifier.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.id.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"integer","description":"The email provider used to send the emails.\n\n`1 - Gmail`\n\n`2 - Office365`\n\n`10 - Custom`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.provider.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.provider","typeLabel":"integer\u003cint32> | null"},"smtpServer":{"oneOf":[{"type":"string","description":"SMTP server hostname.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.smtpServer.oneOf.0","typeLabel":"string"},{"type":"null","description":"SMTP server hostname.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.smtpServer.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.smtpServer","typeLabel":"string | null"},"port":{"oneOf":[{"type":"integer","description":"SMTP server port.","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.port.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"SMTP server port.","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.port.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.port","typeLabel":"integer\u003cint32> | null"},"enableSsl":{"oneOf":[{"type":"boolean","description":"Indicates whether SSL/TLS is enabled for the SMTP connection.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.enableSsl.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether SSL/TLS is enabled for the SMTP connection.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.enableSsl.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.enableSsl","typeLabel":"boolean | null"},"senderEmail":{"oneOf":[{"type":"string","description":"Sender email address used for SMTP authentication and as the \"From\" address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderEmail.oneOf.0","typeLabel":"string"},{"type":"null","description":"Sender email address used for SMTP authentication and as the \"From\" address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderEmail.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderEmail","typeLabel":"string | null"},"senderPassword":{"oneOf":[{"type":"string","description":"Sender password or SMTP credential used for authentication.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderPassword.oneOf.0","typeLabel":"string"},{"type":"null","description":"Sender password or SMTP credential used for authentication.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderPassword.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderPassword","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name shown in the recipient inbox (the \"From\" name).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name shown in the recipient inbox (the \"From\" name).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings","typeLabel":"object | null"},"transferCallSettings":{"oneOf":[{"type":"object","description":"Call transfer configuration. Required when the node type is TransferCall (voice Pearls only).","properties":{"transferCallPhoneNumber":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.transferCallPhoneNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.transferCallPhoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.transferCallPhoneNumber","typeLabel":"string | null"},"triggerDescription":{"oneOf":[{"type":"string","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.triggerDescription.oneOf.0","typeLabel":"string"},{"type":"null","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.triggerDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.triggerDescription","typeLabel":"string | null"},"warmTransferMessage":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.warmTransferMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.warmTransferMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.warmTransferMessage","typeLabel":"string | null"},"isWhisper":{"type":"boolean","description":"The warm transfer mode. Only applies when a warm transfer message is set.\r\n \r\n- `true` (Whisper): only the recipient hears the warm transfer message, the caller stays on hold.\r\n- `false` (3-way): both the caller and the recipient hear the warm transfer message.\r\n \r\nDefaults to `false` (3-way) when omitted.\r\n \r\nSee [Transfer Call](/pages/transfer_call#transfer-types) for more information.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.isWhisper","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings","typeLabel":"object | null"},"handOffAction":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].handOffAction.oneOf.0","typeLabel":"array"},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].handOffAction.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].handOffAction","typeLabel":"array | null"},"postCallActions":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].postCallActions.oneOf.0","typeLabel":"array"},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].postCallActions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].postCallActions","typeLabel":"array | null"}},"additionalProperties":false,"description":"A node of the Pearl's conversation graph.\r\nThe settings object matching the node type must be provided (for example ApiSettings for an API node).\r\nA StartCallRecording node is the exception: it carries no settings, its presence alone starts the recording.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The nodes of the conversation graph. Each node has a unique NodeId and its transitions\r\nreference the NodeId of the target node.\r\n \r\nThe entry point is determined automatically: the PreCallAPI node if present, otherwise the OpeningSentence node.\r\n \r\nConstraints:\r\n- Exactly one OpeningSentence node (or one PreCallAPI leading to one or two OpeningSentence nodes).\r\n- Exactly one EndCall node, and every path must be able to reach it.\r\n- Every non-start node needs at least one incoming transition (except a TransferCall node, which may\r\n be left unwired and is then fired by the agent from its trigger description).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"nodeId":{"oneOf":[{"type":"string","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side."},{"type":"null","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side."}]},"name":{"oneOf":[{"type":"string","description":"Display name of the node."},{"type":"null","description":"Display name of the node."}]},"nodeType":{"type":"integer","description":"The type of a node in a Pearl's conversation flow. It determines what the node does and which settings object it carries.\n\n- OpeningSentence: the first message the agent sends to start the conversation.\n- PreCallAPI: an API call executed before the conversation starts (for example a customer lookup). Its transitions use apiResult to branch on success or failure.\n- Dialogue: a scripted node where the agent converses with the customer.\n- HandoffChatToHuman: hands the conversation over to a human operator. Text Pearls only.\n- API: an API call executed during the conversation.\n- SMS: sends an SMS message.\n- Email: sends an email.\n- TransferCall: transfers the call to another phone number. Voice Pearls only.\n- StartCallRecording: starts recording the call from this point. Voice Pearls only. This node carries no settings.\n- SearchKnowledgeBase: searches the agent's knowledge base and returns the answer.\n- EndCall: terminates the conversation. Exactly one per flow, and every path must lead to it.\n- PostCallActions: a container whose nested actions run after the conversation ends.\n\n`2 - OpeningSentence`\n\n`3 - PreCallAPI`\n\n`10 - Dialogue`\n\n`31 - HandoffChatToHuman`\n\n`40 - API`\n\n`50 - SMS`\n\n`51 - Email`\n\n`60 - TransferCall`\n\n`65 - StartCallRecording`\n\n`80 - SearchKnowledgeBase`\n\n`100 - EndCall`\n\n`200 - PostCallActions`\n\n","format":"int32"},"transitions":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node."},{"type":"null","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node."}]},"script":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes)."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes)."}]},"instructions":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node."}]},"apiSettings":{"oneOf":[{"type":"object","description":"API call configuration. Required when the node type is API or PreCallAPI.","properties":{"name":{"oneOf":[{"type":"string","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only."},{"type":"null","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only."}]},"method":{"type":"integer","description":"The HTTP method used for the API request.\n\n`1 - GET`\n\n`2 - POST`\n\n`3 - PUT`\n\n`4 - DELETE`\n\n`5 - PATCH`\n\n","format":"int32"},"endpointUrl":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available."}]},"body":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body)."},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body)."}]},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Optional HTTP headers to include in the API request."},{"type":"null","additionalProperties":{"type":"string"},"description":"Optional HTTP headers to include in the API request."}]},"description":{"oneOf":[{"type":"string","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only."},{"type":"null","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only."}]},"outputBody":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation."},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation."}]},"credentialId":{"oneOf":[{"type":"string","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId})."},{"type":"null","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId})."}]}},"additionalProperties":false},{"type":"null"}]},"smsSettings":{"oneOf":[{"type":"object","description":"SMS configuration. Required when the node type is SMS.","properties":{"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]}},"additionalProperties":false},{"type":"null"}]},"emailSettings":{"oneOf":[{"type":"object","description":"Email configuration. Required when the node type is Email.","properties":{"to":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."},{"type":"null","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."}]},"cc":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."},{"type":"null","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."}]},"subject":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]},"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]},"smtpSettings":{"oneOf":[{"type":"object","description":"Optional SMTP configuration used to send the email.\r\nIf not provided, the email is sent using the default platform email sender.","properties":{"id":{"oneOf":[{"type":"string","description":"Optional SMTP configuration identifier."},{"type":"null","description":"Optional SMTP configuration identifier."}]},"provider":{"oneOf":[{"type":"integer","description":"The email provider used to send the emails.\n\n`1 - Gmail`\n\n`2 - Office365`\n\n`10 - Custom`\n\n","format":"int32"},{"type":"null"}]},"smtpServer":{"oneOf":[{"type":"string","description":"SMTP server hostname."},{"type":"null","description":"SMTP server hostname."}]},"port":{"oneOf":[{"type":"integer","description":"SMTP server port.","format":"int32"},{"type":"null","description":"SMTP server port.","format":"int32"}]},"enableSsl":{"oneOf":[{"type":"boolean","description":"Indicates whether SSL/TLS is enabled for the SMTP connection."},{"type":"null","description":"Indicates whether SSL/TLS is enabled for the SMTP connection."}]},"senderEmail":{"oneOf":[{"type":"string","description":"Sender email address used for SMTP authentication and as the \"From\" address."},{"type":"null","description":"Sender email address used for SMTP authentication and as the \"From\" address."}]},"senderPassword":{"oneOf":[{"type":"string","description":"Sender password or SMTP credential used for authentication."},{"type":"null","description":"Sender password or SMTP credential used for authentication."}]},"displayName":{"oneOf":[{"type":"string","description":"Display name shown in the recipient inbox (the \"From\" name)."},{"type":"null","description":"Display name shown in the recipient inbox (the \"From\" name)."}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]},"transferCallSettings":{"oneOf":[{"type":"object","description":"Call transfer configuration. Required when the node type is TransferCall (voice Pearls only).","properties":{"transferCallPhoneNumber":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only."}]},"triggerDescription":{"oneOf":[{"type":"string","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens)."},{"type":"null","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens)."}]},"warmTransferMessage":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only."}]},"isWhisper":{"type":"boolean","description":"The warm transfer mode. Only applies when a warm transfer message is set.\r\n \r\n- `true` (Whisper): only the recipient hears the warm transfer message, the caller stays on hold.\r\n- `false` (3-way): both the caller and the recipient hear the warm transfer message.\r\n \r\nDefaults to `false` (3-way) when omitted.\r\n \r\nSee [Transfer Call](/pages/transfer_call#transfer-types) for more information."}},"additionalProperties":false},{"type":"null"}]},"handOffAction":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."}]},"postCallActions":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."}]}},"additionalProperties":false,"description":"A node of the Pearl's conversation graph.\r\nThe settings object matching the node type must be provided (for example ApiSettings for an API node).\r\nA StartCallRecording node is the exception: it carries no settings, its presence alone starts the recording."},"description":"The nodes of the conversation graph. Each node has a unique NodeId and its transitions\r\nreference the NodeId of the target node.\r\n \r\nThe entry point is determined automatically: the PreCallAPI node if present, otherwise the OpeningSentence node.\r\n \r\nConstraints:\r\n- Exactly one OpeningSentence node (or one PreCallAPI leading to one or two OpeningSentence nodes).\r\n- Exactly one EndCall node, and every path must be able to reach it.\r\n- Every non-start node needs at least one incoming transition (except a TransferCall node, which may\r\n be left unwired and is then fired by the agent from its trigger description).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes","typeLabel":"object[] | null"},"agentName":{"oneOf":[{"type":"string","description":"The display name of the agent in the conversation.","uniqueKey":"pearl.oneOf.0.agentName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The display name of the agent in the conversation.","uniqueKey":"pearl.oneOf.0.agentName.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.agentName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl","typeLabel":"object | null"},"variables":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-).","uniqueKey":"variables.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-).","uniqueKey":"variables.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"group":{"type":"integer","description":"Variable group.\n\n- PreCall: Variables available before the call (used in pre-call contexts such as opening sentence or pre-call API).\n- InCall: Variables collected or updated during the call.\n- PostCall: Variables generated after the call by the platform (cannot be created via the API).\n\n`1 - PreCall`\n\n`2 - InCall`\n\n`3 - PostCall`\n\n","format":"int32","uniqueKey":"variables.oneOf.0.items.[INDEX].group","typeLabel":"integer\u003cint32>"},"type":{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32","uniqueKey":"variables.oneOf.0.items.[INDEX].type","typeLabel":"integer\u003cint32>"},"isList":{"type":"boolean","description":"Indicates whether the variable can contain multiple values (list) or a single value.","uniqueKey":"variables.oneOf.0.items.[INDEX].isList","typeLabel":"boolean"},"description":{"oneOf":[{"type":"string","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"value":{"oneOf":[{"type":"string","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied.","uniqueKey":"variables.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied.","uniqueKey":"variables.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"options":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color).","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color).","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].code.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].code","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."}]},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."}]}},"additionalProperties":false},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].options","typeLabel":"object[] | null"},"isSessionScoped":{"type":"boolean","description":"Indicates whether the variable is reset for every interaction (\"Reset Every Interaction\" on the platform).\r\n \r\nNotes:\r\n- If true, the variable starts empty in every new call or chat.\r\n- It is never pre-filled from outside the interaction: a value sent in `CallData` for this variable, or stored on the contact by a previous interaction, is ignored.\r\n- Defaults to false.","uniqueKey":"variables.oneOf.0.items.[INDEX].isSessionScoped","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"variables.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Variables that can be defined, stored, and used by the agent during conversations. Used together with Pearl.\r\nFor details on variable groups and how to use variables in supported fields, see: [Flow Variables](/api-reference/flow_variables)","uniqueKey":"variables.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-)."},{"type":"null","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-)."}]},"name":{"oneOf":[{"type":"string","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only."},{"type":"null","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only."}]},"group":{"type":"integer","description":"Variable group.\n\n- PreCall: Variables available before the call (used in pre-call contexts such as opening sentence or pre-call API).\n- InCall: Variables collected or updated during the call.\n- PostCall: Variables generated after the call by the platform (cannot be created via the API).\n\n`1 - PreCall`\n\n`2 - InCall`\n\n`3 - PostCall`\n\n","format":"int32"},"type":{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},"isList":{"type":"boolean","description":"Indicates whether the variable can contain multiple values (list) or a single value."},"description":{"oneOf":[{"type":"string","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only."},{"type":"null","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only."}]},"value":{"oneOf":[{"type":"string","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied."},{"type":"null","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied."}]},"options":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."}]},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."}]}},"additionalProperties":false},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations."},{"type":"null","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."}]},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."}]}},"additionalProperties":false},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations."}]},"isSessionScoped":{"type":"boolean","description":"Indicates whether the variable is reset for every interaction (\"Reset Every Interaction\" on the platform).\r\n \r\nNotes:\r\n- If true, the variable starts empty in every new call or chat.\r\n- It is never pre-filled from outside the interaction: a value sent in `CallData` for this variable, or stored on the contact by a previous interaction, is ignored.\r\n- Defaults to false."}},"additionalProperties":false},"description":"Variables that can be defined, stored, and used by the agent during conversations. Used together with Pearl.\r\nFor details on variable groups and how to use variables in supported fields, see: [Flow Variables](/api-reference/flow_variables)","uniqueKey":"variables.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables","typeLabel":"object[] | null"},"inbound":{"oneOf":[{"type":"object","description":"Partial update of the inbound text settings: only the fields present in the JSON are applied.\r\nWhen omitted, the inbound settings are kept unchanged. Must not be provided together with Outbound.","properties":{"totalAgents":{"type":"object","description":"Total number of agents allocated to this inbound activity.","properties":{"value":{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.totalAgents.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.totalAgents","typeLabel":"object"},"transcriptOptions":{"type":"object","description":"Transcript generation mode (full transcript, sensitive info removed, or no transcript).","properties":{"value":{"type":"integer","description":"Defines how the conversation transcript is kept: in full, with sensitive information removed, or not at all.\n\n`1 - FullTranscript`\n\n`2 - SensitiveInfoRemoved`\n\n`3 - NoTranscript`\n\n","format":"int32","uniqueKey":"inbound.oneOf.0.transcriptOptions.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.transcriptOptions","typeLabel":"object"},"callWebhookUrl":{"type":"object","description":"Webhook URL to receive call events (for example call started and call ended). Send null to remove the webhook.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"inbound.oneOf.0.callWebhookUrl.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"inbound.oneOf.0.callWebhookUrl.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.callWebhookUrl.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.callWebhookUrl","typeLabel":"object"},"textChannelId":{"type":"object","description":"The text channel ID to use for this Pearl. When omitted, the current channel is kept.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"inbound.oneOf.0.textChannelId.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"inbound.oneOf.0.textChannelId.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.textChannelId.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.textChannelId","typeLabel":"object"},"maxTurns":{"type":"object","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.maxTurns.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.maxTurns","typeLabel":"object"},"autoCloseAfterInactivityHours":{"type":"object","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"object"},"inactivityFollowUps":{"type":"object","description":"Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message.","properties":{"value":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].delayMinutes","typeLabel":"integer\u003cint32>"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message","typeLabel":"string | null"}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."}]}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation."},"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.inactivityFollowUps","typeLabel":"object"},"responseDelaySeconds":{"type":"object","description":"Number of seconds the agent waits after a customer message before replying, so that consecutive messages are answered together.\r\nBetween 0 and 300. Set it to null or 0 to reply as soon as possible.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.responseDelaySeconds.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.responseDelaySeconds","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"inbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound","typeLabel":"object | null"},"outbound":{"oneOf":[{"type":"object","description":"Partial update of the outbound text settings: only the fields present in the JSON are applied.\r\nWhen omitted, the outbound settings are kept unchanged. Must not be provided together with Inbound.","properties":{"totalAgents":{"type":"object","description":"Total number of agents allocated to this outbound activity.","properties":{"value":{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.totalAgents.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.totalAgents","typeLabel":"object"},"transcriptOptions":{"type":"object","description":"Transcript generation mode (full transcript, sensitive info removed, or no transcript).","properties":{"value":{"type":"integer","description":"Defines how the conversation transcript is kept: in full, with sensitive information removed, or not at all.\n\n`1 - FullTranscript`\n\n`2 - SensitiveInfoRemoved`\n\n`3 - NoTranscript`\n\n","format":"int32","uniqueKey":"outbound.oneOf.0.transcriptOptions.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.transcriptOptions","typeLabel":"object"},"budgetTotal":{"type":"object","description":"Total budget allocated for the outbound activity. Send null to remove the budget limit.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.budgetTotal.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.budgetTotal","typeLabel":"object"},"timeZone":{"type":"object","description":"Default time zone for the outbound activity.\r\nFor accepted values, refer to the [Windows Time Zones list](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11).","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.timeZone.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.timeZone.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.timeZone.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.timeZone","typeLabel":"object"},"callingHours":{"type":"object","description":"Allowed calling hours for the outbound activity. The provided list replaces the current one.","properties":{"value":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","description":"`0 - Sunday`\n\n`1 - Monday`\n\n`2 - Tuesday`\n\n`3 - Wednesday`\n\n`4 - Thursday`\n\n`5 - Friday`\n\n`6 - Saturday`\n\n","format":"int32","uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX].day","typeLabel":"integer\u003cint32>"},"start":{"type":"string","description":"Start time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be before End.","format":"date-span","uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX].start","typeLabel":"string\u003cdate-span>"},"end":{"type":"string","description":"End time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be after Start.","format":"date-span","uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX].end","typeLabel":"string\u003cdate-span>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"day":{"type":"integer","description":"`0 - Sunday`\n\n`1 - Monday`\n\n`2 - Tuesday`\n\n`3 - Wednesday`\n\n`4 - Thursday`\n\n`5 - Friday`\n\n`6 - Saturday`\n\n","format":"int32"},"start":{"type":"string","description":"Start time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be before End.","format":"date-span"},"end":{"type":"string","description":"End time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be after Start.","format":"date-span"}},"additionalProperties":false},"uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callingHours.value","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callingHours","typeLabel":"object"},"callWebhookUrl":{"type":"object","description":"Webhook URL to receive call events (for example call started and call ended). Send null to remove the webhook.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.callWebhookUrl.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.callWebhookUrl.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callWebhookUrl.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callWebhookUrl","typeLabel":"object"},"leadWebhookUrl":{"type":"object","description":"Webhook URL to receive lead events (for example lead created/updated). Send null to remove the webhook.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.leadWebhookUrl.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.leadWebhookUrl","typeLabel":"object"},"textChannelId":{"type":"object","description":"The text channel ID to use for this Pearl. When omitted, the current channel is kept.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).\r\nOn a Pearl that is not paused, a WhatsApp channel is accepted only if every opening sentence of the flow matches an approved WhatsApp template.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.textChannelId.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.textChannelId.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.textChannelId.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.textChannelId","typeLabel":"object"},"maxTurns":{"type":"object","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.maxTurns.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.maxTurns","typeLabel":"object"},"autoCloseAfterInactivityHours":{"type":"object","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"object"},"inactivityFollowUps":{"type":"object","description":"Follow-up messages automatically sent when the customer stops responding. The provided list replaces the current one.","properties":{"value":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].delayMinutes","typeLabel":"integer\u003cint32>"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message","typeLabel":"string | null"}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."}]}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation."},"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.inactivityFollowUps","typeLabel":"object"},"responseDelaySeconds":{"type":"object","description":"Number of seconds the agent waits after a customer message before replying, so that consecutive messages are answered together.\r\nBetween 0 and 300. Set it to null or 0 to reply as soon as possible.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.responseDelaySeconds.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.responseDelaySeconds","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"outbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","pearl":{"agentPersonality":"\u003cstring>","timeZone":"\u003cstring>","modelType":123,"companyName":"\u003cstring>","companyDescription":"\u003cstring>","generalInstructions":"\u003cstring>","knowledgeBase":"\u003cstring>","memory":true,"successDescription":"\u003cstring>","indicatorTags":[{"id":"\u003cstring>","name":"\u003cstring>","description":"\u003cstring>","color":123}],"nodes":[{"nodeId":"\u003cstring>","name":"\u003cstring>","nodeType":123,"transitions":[{"name":"\u003cstring>","toNodeId":"\u003cstring>","apiResult":123}],"script":"\u003cstring>","instructions":"\u003cstring>","apiSettings":{"name":"\u003cstring>","method":123,"endpointUrl":"\u003cstring>","body":[{"key":"\u003cstring>","variableId":"\u003cstring>","type":123,"value":"\u003cstring>","required":true}],"headers":{},"description":"\u003cstring>","outputBody":[{"key":"\u003cstring>","variableId":"\u003cstring>","type":123,"value":"\u003cstring>","required":true}],"credentialId":"\u003cstring>"},"smsSettings":{"body":"\u003cstring>"},"emailSettings":{"to":["\u003cstring>"],"cc":["\u003cstring>"],"subject":"\u003cstring>","body":"\u003cstring>","smtpSettings":{"id":"\u003cstring>","provider":123,"smtpServer":"\u003cstring>","port":123,"enableSsl":true,"senderEmail":"\u003cstring>","senderPassword":"\u003cstring>","displayName":"\u003cstring>"}},"transferCallSettings":{"transferCallPhoneNumber":"\u003cstring>","triggerDescription":"\u003cstring>","warmTransferMessage":"\u003cstring>","isWhisper":true},"handOffAction":"\u003carray>","postCallActions":"\u003carray>"}],"agentName":"\u003cstring>"},"variables":[{"id":"\u003cstring>","name":"\u003cstring>","group":123,"type":123,"isList":true,"description":"\u003cstring>","value":"\u003cstring>","options":[{"value":"\u003cstring>","code":"\u003cstring>"}],"isSessionScoped":true}],"inbound":{"totalAgents":{"value":123},"transcriptOptions":{"value":123},"callWebhookUrl":{"value":"\u003cstring>"},"textChannelId":{"value":"\u003cstring>"},"maxTurns":{"value":123},"autoCloseAfterInactivityHours":{"value":123},"inactivityFollowUps":{"value":[{"delayMinutes":123,"message":"\u003cstring>"}]},"responseDelaySeconds":{"value":123}},"outbound":{"totalAgents":{"value":123},"transcriptOptions":{"value":123},"budgetTotal":{"value":123},"timeZone":{"value":"\u003cstring>"},"callingHours":{"value":[{"day":123,"start":"\u003cstring>","end":"\u003cstring>"}]},"callWebhookUrl":{"value":"\u003cstring>"},"leadWebhookUrl":{"value":"\u003cstring>"},"textChannelId":{"value":"\u003cstring>"},"maxTurns":{"value":123},"autoCloseAfterInactivityHours":{"value":123},"inactivityFollowUps":{"value":[{"delayMinutes":123,"message":"\u003cstring>"}]},"responseDelaySeconds":{"value":123}}}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"The updated name of the Pearl.","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The updated name of the Pearl.","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"pearl":{"oneOf":[{"type":"object","description":"Updated conversation flow (node graph) for the Pearl. When omitted, the current flow is kept unchanged.\r\nWhen provided, it replaces the whole flow, so send the complete node graph.","properties":{"agentPersonality":{"oneOf":[{"type":"string","description":"Defines the agent's personality and tone (for example, more assertive or more calm).\n\nConstraints:\n- Max length: 35 characters.","uniqueKey":"pearl.oneOf.0.agentPersonality.oneOf.0","typeLabel":"string"},{"type":"null","description":"Defines the agent's personality and tone (for example, more assertive or more calm).\n\nConstraints:\n- Max length: 35 characters.","uniqueKey":"pearl.oneOf.0.agentPersonality.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.agentPersonality","typeLabel":"string | null"},"timeZone":{"oneOf":[{"type":"string","description":"Time zone identifier used by the Pearl's agents.\r\n \r\nThe agent will operate according to this time zone, regardless of the lead/customer local time zone.\r\nFor accepted values, refer to the [Windows Time Zones list](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11).\r\n \r\nExample: \"Pacific Standard Time\", \"Romance Standard Time\".","uniqueKey":"pearl.oneOf.0.timeZone.oneOf.0","typeLabel":"string"},{"type":"null","description":"Time zone identifier used by the Pearl's agents.\r\n \r\nThe agent will operate according to this time zone, regardless of the lead/customer local time zone.\r\nFor accepted values, refer to the [Windows Time Zones list](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11).\r\n \r\nExample: \"Pacific Standard Time\", \"Romance Standard Time\".","uniqueKey":"pearl.oneOf.0.timeZone.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.timeZone","typeLabel":"string | null"},"modelType":{"oneOf":[{"type":"integer","description":"Agent model type.\n\nVoice Pearls use one of these models:\n- Trident: Highest-quality model with standard rate. Optimized for natural, human-like interactions.\n- Oyster: Most cost-effective model (2 credits cheaper per minute). Straightforward, prioritizes simplicity and efficiency.\n- Arrow: Default for voice Pearls. High-intelligence model with the same depth as Trident, built for ultra-low latency (fastest). Costs 2 credits more per minute.\n- Hydra: Smartest model, built for demanding tasks that need deeper reasoning. Costs 2 credits more per minute.\n\nText Pearls (chat and messaging conversations) use one of these models:\n- Orchid: Default for text Pearls. The most advanced text model, smarter than Swan, with high reasoning. Costs 1 credit more per message.\n- Swan: Text model with high reasoning and standard rate.\n\nOrchid and Swan are not available for voice Pearls, and the voice models are not available for text Pearls.\n\n`1 - Trident`\n\n`2 - Oyster`\n\n`3 - Arrow`\n\n`4 - Hydra`\n\n`5 - Flame`\n\n`11 - Swan`\n\n`12 - Orchid`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.modelType.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.modelType.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.modelType","typeLabel":"integer\u003cint32> | null"},"companyName":{"oneOf":[{"type":"string","description":"The company name used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 100 characters.","uniqueKey":"pearl.oneOf.0.companyName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The company name used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 100 characters.","uniqueKey":"pearl.oneOf.0.companyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.companyName","typeLabel":"string | null"},"companyDescription":{"oneOf":[{"type":"string","description":"The company description used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 500 characters.","uniqueKey":"pearl.oneOf.0.companyDescription.oneOf.0","typeLabel":"string"},{"type":"null","description":"The company description used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 500 characters.","uniqueKey":"pearl.oneOf.0.companyDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.companyDescription","typeLabel":"string | null"},"generalInstructions":{"oneOf":[{"type":"string","description":"General behavior guidelines applied to the agent across the whole conversation, on top of the\r\nper-node scripts and instructions (for example a tone to keep or rules that always apply).\r\n \r\nConstraints:\r\n- Max length: 2,500 characters.\r\n- Cannot contain variables.","uniqueKey":"pearl.oneOf.0.generalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"General behavior guidelines applied to the agent across the whole conversation, on top of the\r\nper-node scripts and instructions (for example a tone to keep or rules that always apply).\r\n \r\nConstraints:\r\n- Max length: 2,500 characters.\r\n- Cannot contain variables.","uniqueKey":"pearl.oneOf.0.generalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.generalInstructions","typeLabel":"string | null"},"knowledgeBase":{"oneOf":[{"type":"string","description":"Knowledge base content provided to the agent, such as FAQs, internal context, and operational instructions.\r\n \r\nConstraints:\r\n- Max length: 20,000 characters.","uniqueKey":"pearl.oneOf.0.knowledgeBase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Knowledge base content provided to the agent, such as FAQs, internal context, and operational instructions.\r\n \r\nConstraints:\r\n- Max length: 20,000 characters.","uniqueKey":"pearl.oneOf.0.knowledgeBase.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.knowledgeBase","typeLabel":"string | null"},"memory":{"oneOf":[{"type":"boolean","description":"Indicates whether memory is enabled. When enabled, the Pearl can remember previous conversations for a given phone number.","uniqueKey":"pearl.oneOf.0.memory.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether memory is enabled. When enabled, the Pearl can remember previous conversations for a given phone number.","uniqueKey":"pearl.oneOf.0.memory.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.memory","typeLabel":"boolean | null"},"successDescription":{"oneOf":[{"type":"string","description":"Description of what makes a conversation successful. Used to evaluate and report the conversation outcome.\r\n \r\nConstraints:\r\n- Max length: 200 characters.","uniqueKey":"pearl.oneOf.0.successDescription.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description of what makes a conversation successful. Used to evaluate and report the conversation outcome.\r\n \r\nConstraints:\r\n- Max length: 200 characters.","uniqueKey":"pearl.oneOf.0.successDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.successDescription","typeLabel":"string | null"},"indicatorTags":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z).","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z).","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"The label name.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The label name.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"color":{"type":"integer","description":"The color of the indicator tag.\n\n`1 - purple`\n\n`2 - red`\n\n`3 - yellow`\n\n`4 - green`\n\n`5 - blue`\n\n`6 - pink`\n\n`7 - teal`\n\n`8 - lime`\n\n`8 - gradient1`\n\n`9 - gradient2`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].color","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Indicator tags used to classify conversations (name, description and color).\r\n \r\nConstraints:\r\n- Max entries: 10.\r\n- Colors must be unique across tags.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z)."},{"type":"null","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z)."}]},"name":{"oneOf":[{"type":"string","description":"The label name.\r\n \r\nMax 25 characters only."},{"type":"null","description":"The label name.\r\n \r\nMax 25 characters only."}]},"description":{"oneOf":[{"type":"string","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only."},{"type":"null","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only."}]},"color":{"type":"integer","description":"The color of the indicator tag.\n\n`1 - purple`\n\n`2 - red`\n\n`3 - yellow`\n\n`4 - green`\n\n`5 - blue`\n\n`6 - pink`\n\n`7 - teal`\n\n`8 - lime`\n\n`8 - gradient1`\n\n`9 - gradient2`\n\n","format":"int32"}},"additionalProperties":false},"description":"Indicator tags used to classify conversations (name, description and color).\r\n \r\nConstraints:\r\n- Max entries: 10.\r\n- Colors must be unique across tags.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags","typeLabel":"object[] | null"},"nodes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"nodeId":{"oneOf":[{"type":"string","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeId","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Display name of the node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name of the node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"nodeType":{"type":"integer","description":"The type of a node in a Pearl's conversation flow. It determines what the node does and which settings object it carries.\n\n- OpeningSentence: the first message the agent sends to start the conversation.\n- PreCallAPI: an API call executed before the conversation starts (for example a customer lookup). Its transitions use apiResult to branch on success or failure.\n- Dialogue: a scripted node where the agent converses with the customer.\n- HandoffChatToHuman: hands the conversation over to a human operator. Text Pearls only.\n- API: an API call executed during the conversation.\n- SMS: sends an SMS message.\n- Email: sends an email.\n- TransferCall: transfers the call to another phone number. Voice Pearls only.\n- StartCallRecording: starts recording the call from this point. Voice Pearls only. This node carries no settings.\n- SearchKnowledgeBase: searches the agent's knowledge base and returns the answer.\n- EndCall: terminates the conversation. Exactly one per flow, and every path must lead to it.\n- PostCallActions: a container whose nested actions run after the conversation ends.\n\n`2 - OpeningSentence`\n\n`3 - PreCallAPI`\n\n`10 - Dialogue`\n\n`31 - HandoffChatToHuman`\n\n`40 - API`\n\n`50 - SMS`\n\n`51 - Email`\n\n`60 - TransferCall`\n\n`65 - StartCallRecording`\n\n`80 - SearchKnowledgeBase`\n\n`100 - EndCall`\n\n`200 - PostCallActions`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeType","typeLabel":"integer\u003cint32>"},"transitions":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].toNodeId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The NodeId of the target node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].toNodeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].toNodeId","typeLabel":"string | null"},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].apiResult.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].apiResult.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].apiResult","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions","typeLabel":"object[] | null"},"script":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].script.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].script.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].script","typeLabel":"string | null"},"instructions":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].instructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].instructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].instructions","typeLabel":"string | null"},"apiSettings":{"oneOf":[{"type":"object","description":"API call configuration. Required when the node type is API or PreCallAPI.","properties":{"name":{"oneOf":[{"type":"string","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.name","typeLabel":"string | null"},"method":{"type":"integer","description":"The HTTP method used for the API request.\n\n`1 - GET`\n\n`2 - POST`\n\n`3 - PUT`\n\n`4 - DELETE`\n\n`5 - PATCH`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.method","typeLabel":"integer\u003cint32>"},"endpointUrl":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.endpointUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.endpointUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.endpointUrl","typeLabel":"string | null"},"body":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].key.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].key","typeLabel":"string | null"},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].variableId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].variableId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].variableId","typeLabel":"string | null"},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].type.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].type","typeLabel":"integer\u003cint32> | null"},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"required":{"type":"boolean","description":"Indicates whether this request body field is required.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].required","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body","typeLabel":"object[] | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional HTTP headers to include in the API request.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional HTTP headers to include in the API request.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers","typeLabel":"object | null"},"description":{"oneOf":[{"type":"string","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.description","typeLabel":"string | null"},"outputBody":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].key.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].key","typeLabel":"string | null"},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].variableId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].variableId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].variableId","typeLabel":"string | null"},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].type.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].type","typeLabel":"integer\u003cint32> | null"},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"required":{"type":"boolean","description":"Indicates whether this request body field is required.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].required","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody","typeLabel":"object[] | null"},"credentialId":{"oneOf":[{"type":"string","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId}).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.credentialId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId}).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.credentialId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.credentialId","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings","typeLabel":"object | null"},"smsSettings":{"oneOf":[{"type":"object","description":"SMS configuration. Required when the node type is SMS.","properties":{"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0.body.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0.body","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings","typeLabel":"object | null"},"emailSettings":{"oneOf":[{"type":"object","description":"Email configuration. Required when the node type is Email.","properties":{"to":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to","typeLabel":"string[] | null"},"cc":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc","typeLabel":"string[] | null"},"subject":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.subject.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.subject.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.subject","typeLabel":"string | null"},"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.body.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.body","typeLabel":"string | null"},"smtpSettings":{"oneOf":[{"type":"object","description":"Optional SMTP configuration used to send the email.\r\nIf not provided, the email is sent using the default platform email sender.","properties":{"id":{"oneOf":[{"type":"string","description":"Optional SMTP configuration identifier.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional SMTP configuration identifier.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.id.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"integer","description":"The email provider used to send the emails.\n\n`1 - Gmail`\n\n`2 - Office365`\n\n`10 - Custom`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.provider.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.provider","typeLabel":"integer\u003cint32> | null"},"smtpServer":{"oneOf":[{"type":"string","description":"SMTP server hostname.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.smtpServer.oneOf.0","typeLabel":"string"},{"type":"null","description":"SMTP server hostname.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.smtpServer.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.smtpServer","typeLabel":"string | null"},"port":{"oneOf":[{"type":"integer","description":"SMTP server port.","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.port.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"SMTP server port.","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.port.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.port","typeLabel":"integer\u003cint32> | null"},"enableSsl":{"oneOf":[{"type":"boolean","description":"Indicates whether SSL/TLS is enabled for the SMTP connection.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.enableSsl.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether SSL/TLS is enabled for the SMTP connection.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.enableSsl.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.enableSsl","typeLabel":"boolean | null"},"senderEmail":{"oneOf":[{"type":"string","description":"Sender email address used for SMTP authentication and as the \"From\" address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderEmail.oneOf.0","typeLabel":"string"},{"type":"null","description":"Sender email address used for SMTP authentication and as the \"From\" address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderEmail.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderEmail","typeLabel":"string | null"},"senderPassword":{"oneOf":[{"type":"string","description":"Sender password or SMTP credential used for authentication.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderPassword.oneOf.0","typeLabel":"string"},{"type":"null","description":"Sender password or SMTP credential used for authentication.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderPassword.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderPassword","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name shown in the recipient inbox (the \"From\" name).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name shown in the recipient inbox (the \"From\" name).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings","typeLabel":"object | null"},"transferCallSettings":{"oneOf":[{"type":"object","description":"Call transfer configuration. Required when the node type is TransferCall (voice Pearls only).","properties":{"transferCallPhoneNumber":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.transferCallPhoneNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.transferCallPhoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.transferCallPhoneNumber","typeLabel":"string | null"},"triggerDescription":{"oneOf":[{"type":"string","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.triggerDescription.oneOf.0","typeLabel":"string"},{"type":"null","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.triggerDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.triggerDescription","typeLabel":"string | null"},"warmTransferMessage":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.warmTransferMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.warmTransferMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.warmTransferMessage","typeLabel":"string | null"},"isWhisper":{"type":"boolean","description":"The warm transfer mode. Only applies when a warm transfer message is set.\r\n \r\n- `true` (Whisper): only the recipient hears the warm transfer message, the caller stays on hold.\r\n- `false` (3-way): both the caller and the recipient hear the warm transfer message.\r\n \r\nDefaults to `false` (3-way) when omitted.\r\n \r\nSee [Transfer Call](/pages/transfer_call#transfer-types) for more information.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.isWhisper","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings","typeLabel":"object | null"},"handOffAction":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].handOffAction.oneOf.0","typeLabel":"array"},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].handOffAction.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].handOffAction","typeLabel":"array | null"},"postCallActions":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].postCallActions.oneOf.0","typeLabel":"array"},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].postCallActions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].postCallActions","typeLabel":"array | null"}},"additionalProperties":false,"description":"A node of the Pearl's conversation graph.\r\nThe settings object matching the node type must be provided (for example ApiSettings for an API node).\r\nA StartCallRecording node is the exception: it carries no settings, its presence alone starts the recording.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The nodes of the conversation graph. Each node has a unique NodeId and its transitions\r\nreference the NodeId of the target node.\r\n \r\nThe entry point is determined automatically: the PreCallAPI node if present, otherwise the OpeningSentence node.\r\n \r\nConstraints:\r\n- Exactly one OpeningSentence node (or one PreCallAPI leading to one or two OpeningSentence nodes).\r\n- Exactly one EndCall node, and every path must be able to reach it.\r\n- Every non-start node needs at least one incoming transition (except a TransferCall node, which may\r\n be left unwired and is then fired by the agent from its trigger description).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"nodeId":{"oneOf":[{"type":"string","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side."},{"type":"null","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side."}]},"name":{"oneOf":[{"type":"string","description":"Display name of the node."},{"type":"null","description":"Display name of the node."}]},"nodeType":{"type":"integer","description":"The type of a node in a Pearl's conversation flow. It determines what the node does and which settings object it carries.\n\n- OpeningSentence: the first message the agent sends to start the conversation.\n- PreCallAPI: an API call executed before the conversation starts (for example a customer lookup). Its transitions use apiResult to branch on success or failure.\n- Dialogue: a scripted node where the agent converses with the customer.\n- HandoffChatToHuman: hands the conversation over to a human operator. Text Pearls only.\n- API: an API call executed during the conversation.\n- SMS: sends an SMS message.\n- Email: sends an email.\n- TransferCall: transfers the call to another phone number. Voice Pearls only.\n- StartCallRecording: starts recording the call from this point. Voice Pearls only. This node carries no settings.\n- SearchKnowledgeBase: searches the agent's knowledge base and returns the answer.\n- EndCall: terminates the conversation. Exactly one per flow, and every path must lead to it.\n- PostCallActions: a container whose nested actions run after the conversation ends.\n\n`2 - OpeningSentence`\n\n`3 - PreCallAPI`\n\n`10 - Dialogue`\n\n`31 - HandoffChatToHuman`\n\n`40 - API`\n\n`50 - SMS`\n\n`51 - Email`\n\n`60 - TransferCall`\n\n`65 - StartCallRecording`\n\n`80 - SearchKnowledgeBase`\n\n`100 - EndCall`\n\n`200 - PostCallActions`\n\n","format":"int32"},"transitions":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node."},{"type":"null","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node."}]},"script":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes)."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes)."}]},"instructions":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node."}]},"apiSettings":{"oneOf":[{"type":"object","description":"API call configuration. Required when the node type is API or PreCallAPI.","properties":{"name":{"oneOf":[{"type":"string","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only."},{"type":"null","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only."}]},"method":{"type":"integer","description":"The HTTP method used for the API request.\n\n`1 - GET`\n\n`2 - POST`\n\n`3 - PUT`\n\n`4 - DELETE`\n\n`5 - PATCH`\n\n","format":"int32"},"endpointUrl":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available."}]},"body":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body)."},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body)."}]},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Optional HTTP headers to include in the API request."},{"type":"null","additionalProperties":{"type":"string"},"description":"Optional HTTP headers to include in the API request."}]},"description":{"oneOf":[{"type":"string","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only."},{"type":"null","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only."}]},"outputBody":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation."},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation."}]},"credentialId":{"oneOf":[{"type":"string","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId})."},{"type":"null","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId})."}]}},"additionalProperties":false},{"type":"null"}]},"smsSettings":{"oneOf":[{"type":"object","description":"SMS configuration. Required when the node type is SMS.","properties":{"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]}},"additionalProperties":false},{"type":"null"}]},"emailSettings":{"oneOf":[{"type":"object","description":"Email configuration. Required when the node type is Email.","properties":{"to":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."},{"type":"null","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."}]},"cc":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."},{"type":"null","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."}]},"subject":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]},"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]},"smtpSettings":{"oneOf":[{"type":"object","description":"Optional SMTP configuration used to send the email.\r\nIf not provided, the email is sent using the default platform email sender.","properties":{"id":{"oneOf":[{"type":"string","description":"Optional SMTP configuration identifier."},{"type":"null","description":"Optional SMTP configuration identifier."}]},"provider":{"oneOf":[{"type":"integer","description":"The email provider used to send the emails.\n\n`1 - Gmail`\n\n`2 - Office365`\n\n`10 - Custom`\n\n","format":"int32"},{"type":"null"}]},"smtpServer":{"oneOf":[{"type":"string","description":"SMTP server hostname."},{"type":"null","description":"SMTP server hostname."}]},"port":{"oneOf":[{"type":"integer","description":"SMTP server port.","format":"int32"},{"type":"null","description":"SMTP server port.","format":"int32"}]},"enableSsl":{"oneOf":[{"type":"boolean","description":"Indicates whether SSL/TLS is enabled for the SMTP connection."},{"type":"null","description":"Indicates whether SSL/TLS is enabled for the SMTP connection."}]},"senderEmail":{"oneOf":[{"type":"string","description":"Sender email address used for SMTP authentication and as the \"From\" address."},{"type":"null","description":"Sender email address used for SMTP authentication and as the \"From\" address."}]},"senderPassword":{"oneOf":[{"type":"string","description":"Sender password or SMTP credential used for authentication."},{"type":"null","description":"Sender password or SMTP credential used for authentication."}]},"displayName":{"oneOf":[{"type":"string","description":"Display name shown in the recipient inbox (the \"From\" name)."},{"type":"null","description":"Display name shown in the recipient inbox (the \"From\" name)."}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]},"transferCallSettings":{"oneOf":[{"type":"object","description":"Call transfer configuration. Required when the node type is TransferCall (voice Pearls only).","properties":{"transferCallPhoneNumber":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only."}]},"triggerDescription":{"oneOf":[{"type":"string","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens)."},{"type":"null","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens)."}]},"warmTransferMessage":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only."}]},"isWhisper":{"type":"boolean","description":"The warm transfer mode. Only applies when a warm transfer message is set.\r\n \r\n- `true` (Whisper): only the recipient hears the warm transfer message, the caller stays on hold.\r\n- `false` (3-way): both the caller and the recipient hear the warm transfer message.\r\n \r\nDefaults to `false` (3-way) when omitted.\r\n \r\nSee [Transfer Call](/pages/transfer_call#transfer-types) for more information."}},"additionalProperties":false},{"type":"null"}]},"handOffAction":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."}]},"postCallActions":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."}]}},"additionalProperties":false,"description":"A node of the Pearl's conversation graph.\r\nThe settings object matching the node type must be provided (for example ApiSettings for an API node).\r\nA StartCallRecording node is the exception: it carries no settings, its presence alone starts the recording."},"description":"The nodes of the conversation graph. Each node has a unique NodeId and its transitions\r\nreference the NodeId of the target node.\r\n \r\nThe entry point is determined automatically: the PreCallAPI node if present, otherwise the OpeningSentence node.\r\n \r\nConstraints:\r\n- Exactly one OpeningSentence node (or one PreCallAPI leading to one or two OpeningSentence nodes).\r\n- Exactly one EndCall node, and every path must be able to reach it.\r\n- Every non-start node needs at least one incoming transition (except a TransferCall node, which may\r\n be left unwired and is then fired by the agent from its trigger description).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes","typeLabel":"object[] | null"},"agentName":{"oneOf":[{"type":"string","description":"The display name of the agent in the conversation.","uniqueKey":"pearl.oneOf.0.agentName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The display name of the agent in the conversation.","uniqueKey":"pearl.oneOf.0.agentName.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.agentName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl","typeLabel":"object | null"},"variables":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-).","uniqueKey":"variables.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-).","uniqueKey":"variables.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"group":{"type":"integer","description":"Variable group.\n\n- PreCall: Variables available before the call (used in pre-call contexts such as opening sentence or pre-call API).\n- InCall: Variables collected or updated during the call.\n- PostCall: Variables generated after the call by the platform (cannot be created via the API).\n\n`1 - PreCall`\n\n`2 - InCall`\n\n`3 - PostCall`\n\n","format":"int32","uniqueKey":"variables.oneOf.0.items.[INDEX].group","typeLabel":"integer\u003cint32>"},"type":{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32","uniqueKey":"variables.oneOf.0.items.[INDEX].type","typeLabel":"integer\u003cint32>"},"isList":{"type":"boolean","description":"Indicates whether the variable can contain multiple values (list) or a single value.","uniqueKey":"variables.oneOf.0.items.[INDEX].isList","typeLabel":"boolean"},"description":{"oneOf":[{"type":"string","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"value":{"oneOf":[{"type":"string","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied.","uniqueKey":"variables.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied.","uniqueKey":"variables.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"options":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color).","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color).","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].code.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].code","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."}]},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."}]}},"additionalProperties":false},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].options","typeLabel":"object[] | null"},"isSessionScoped":{"type":"boolean","description":"Indicates whether the variable is reset for every interaction (\"Reset Every Interaction\" on the platform).\r\n \r\nNotes:\r\n- If true, the variable starts empty in every new call or chat.\r\n- It is never pre-filled from outside the interaction: a value sent in `CallData` for this variable, or stored on the contact by a previous interaction, is ignored.\r\n- Defaults to false.","uniqueKey":"variables.oneOf.0.items.[INDEX].isSessionScoped","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"variables.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Variables that can be defined, stored, and used by the agent during conversations. Used together with Pearl.\r\nFor details on variable groups and how to use variables in supported fields, see: [Flow Variables](/api-reference/flow_variables)","uniqueKey":"variables.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-)."},{"type":"null","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-)."}]},"name":{"oneOf":[{"type":"string","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only."},{"type":"null","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only."}]},"group":{"type":"integer","description":"Variable group.\n\n- PreCall: Variables available before the call (used in pre-call contexts such as opening sentence or pre-call API).\n- InCall: Variables collected or updated during the call.\n- PostCall: Variables generated after the call by the platform (cannot be created via the API).\n\n`1 - PreCall`\n\n`2 - InCall`\n\n`3 - PostCall`\n\n","format":"int32"},"type":{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},"isList":{"type":"boolean","description":"Indicates whether the variable can contain multiple values (list) or a single value."},"description":{"oneOf":[{"type":"string","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only."},{"type":"null","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only."}]},"value":{"oneOf":[{"type":"string","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied."},{"type":"null","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied."}]},"options":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."}]},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."}]}},"additionalProperties":false},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations."},{"type":"null","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."}]},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."}]}},"additionalProperties":false},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations."}]},"isSessionScoped":{"type":"boolean","description":"Indicates whether the variable is reset for every interaction (\"Reset Every Interaction\" on the platform).\r\n \r\nNotes:\r\n- If true, the variable starts empty in every new call or chat.\r\n- It is never pre-filled from outside the interaction: a value sent in `CallData` for this variable, or stored on the contact by a previous interaction, is ignored.\r\n- Defaults to false."}},"additionalProperties":false},"description":"Variables that can be defined, stored, and used by the agent during conversations. Used together with Pearl.\r\nFor details on variable groups and how to use variables in supported fields, see: [Flow Variables](/api-reference/flow_variables)","uniqueKey":"variables.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables","typeLabel":"object[] | null"},"inbound":{"oneOf":[{"type":"object","description":"Partial update of the inbound text settings: only the fields present in the JSON are applied.\r\nWhen omitted, the inbound settings are kept unchanged. Must not be provided together with Outbound.","properties":{"totalAgents":{"type":"object","description":"Total number of agents allocated to this inbound activity.","properties":{"value":{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.totalAgents.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.totalAgents","typeLabel":"object"},"transcriptOptions":{"type":"object","description":"Transcript generation mode (full transcript, sensitive info removed, or no transcript).","properties":{"value":{"type":"integer","description":"Defines how the conversation transcript is kept: in full, with sensitive information removed, or not at all.\n\n`1 - FullTranscript`\n\n`2 - SensitiveInfoRemoved`\n\n`3 - NoTranscript`\n\n","format":"int32","uniqueKey":"inbound.oneOf.0.transcriptOptions.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.transcriptOptions","typeLabel":"object"},"callWebhookUrl":{"type":"object","description":"Webhook URL to receive call events (for example call started and call ended). Send null to remove the webhook.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"inbound.oneOf.0.callWebhookUrl.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"inbound.oneOf.0.callWebhookUrl.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.callWebhookUrl.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.callWebhookUrl","typeLabel":"object"},"textChannelId":{"type":"object","description":"The text channel ID to use for this Pearl. When omitted, the current channel is kept.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"inbound.oneOf.0.textChannelId.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"inbound.oneOf.0.textChannelId.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.textChannelId.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.textChannelId","typeLabel":"object"},"maxTurns":{"type":"object","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.maxTurns.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.maxTurns","typeLabel":"object"},"autoCloseAfterInactivityHours":{"type":"object","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"object"},"inactivityFollowUps":{"type":"object","description":"Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message.","properties":{"value":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].delayMinutes","typeLabel":"integer\u003cint32>"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message","typeLabel":"string | null"}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."}]}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation."},"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.inactivityFollowUps","typeLabel":"object"},"responseDelaySeconds":{"type":"object","description":"Number of seconds the agent waits after a customer message before replying, so that consecutive messages are answered together.\r\nBetween 0 and 300. Set it to null or 0 to reply as soon as possible.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.responseDelaySeconds.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.responseDelaySeconds","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"inbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound","typeLabel":"object | null"},"outbound":{"oneOf":[{"type":"object","description":"Partial update of the outbound text settings: only the fields present in the JSON are applied.\r\nWhen omitted, the outbound settings are kept unchanged. Must not be provided together with Inbound.","properties":{"totalAgents":{"type":"object","description":"Total number of agents allocated to this outbound activity.","properties":{"value":{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.totalAgents.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.totalAgents","typeLabel":"object"},"transcriptOptions":{"type":"object","description":"Transcript generation mode (full transcript, sensitive info removed, or no transcript).","properties":{"value":{"type":"integer","description":"Defines how the conversation transcript is kept: in full, with sensitive information removed, or not at all.\n\n`1 - FullTranscript`\n\n`2 - SensitiveInfoRemoved`\n\n`3 - NoTranscript`\n\n","format":"int32","uniqueKey":"outbound.oneOf.0.transcriptOptions.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.transcriptOptions","typeLabel":"object"},"budgetTotal":{"type":"object","description":"Total budget allocated for the outbound activity. Send null to remove the budget limit.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.budgetTotal.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.budgetTotal","typeLabel":"object"},"timeZone":{"type":"object","description":"Default time zone for the outbound activity.\r\nFor accepted values, refer to the [Windows Time Zones list](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11).","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.timeZone.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.timeZone.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.timeZone.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.timeZone","typeLabel":"object"},"callingHours":{"type":"object","description":"Allowed calling hours for the outbound activity. The provided list replaces the current one.","properties":{"value":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","description":"`0 - Sunday`\n\n`1 - Monday`\n\n`2 - Tuesday`\n\n`3 - Wednesday`\n\n`4 - Thursday`\n\n`5 - Friday`\n\n`6 - Saturday`\n\n","format":"int32","uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX].day","typeLabel":"integer\u003cint32>"},"start":{"type":"string","description":"Start time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be before End.","format":"date-span","uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX].start","typeLabel":"string\u003cdate-span>"},"end":{"type":"string","description":"End time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be after Start.","format":"date-span","uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX].end","typeLabel":"string\u003cdate-span>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"day":{"type":"integer","description":"`0 - Sunday`\n\n`1 - Monday`\n\n`2 - Tuesday`\n\n`3 - Wednesday`\n\n`4 - Thursday`\n\n`5 - Friday`\n\n`6 - Saturday`\n\n","format":"int32"},"start":{"type":"string","description":"Start time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be before End.","format":"date-span"},"end":{"type":"string","description":"End time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be after Start.","format":"date-span"}},"additionalProperties":false},"uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callingHours.value","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callingHours","typeLabel":"object"},"callWebhookUrl":{"type":"object","description":"Webhook URL to receive call events (for example call started and call ended). Send null to remove the webhook.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.callWebhookUrl.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.callWebhookUrl.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callWebhookUrl.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callWebhookUrl","typeLabel":"object"},"leadWebhookUrl":{"type":"object","description":"Webhook URL to receive lead events (for example lead created/updated). Send null to remove the webhook.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.leadWebhookUrl.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.leadWebhookUrl","typeLabel":"object"},"textChannelId":{"type":"object","description":"The text channel ID to use for this Pearl. When omitted, the current channel is kept.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).\r\nOn a Pearl that is not paused, a WhatsApp channel is accepted only if every opening sentence of the flow matches an approved WhatsApp template.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.textChannelId.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.textChannelId.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.textChannelId.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.textChannelId","typeLabel":"object"},"maxTurns":{"type":"object","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.maxTurns.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.maxTurns","typeLabel":"object"},"autoCloseAfterInactivityHours":{"type":"object","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"object"},"inactivityFollowUps":{"type":"object","description":"Follow-up messages automatically sent when the customer stops responding. The provided list replaces the current one.","properties":{"value":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].delayMinutes","typeLabel":"integer\u003cint32>"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message","typeLabel":"string | null"}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."}]}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation."},"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.inactivityFollowUps","typeLabel":"object"},"responseDelaySeconds":{"type":"object","description":"Number of seconds the agent waits after a customer message before replying, so that consecutive messages are answered together.\r\nBetween 0 and 300. Set it to null or 0 to reply as soon as possible.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.responseDelaySeconds.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.responseDelaySeconds","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"outbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","pearl":{"agentPersonality":"\u003cstring>","timeZone":"\u003cstring>","modelType":123,"companyName":"\u003cstring>","companyDescription":"\u003cstring>","generalInstructions":"\u003cstring>","knowledgeBase":"\u003cstring>","memory":true,"successDescription":"\u003cstring>","indicatorTags":[{"id":"\u003cstring>","name":"\u003cstring>","description":"\u003cstring>","color":123}],"nodes":[{"nodeId":"\u003cstring>","name":"\u003cstring>","nodeType":123,"transitions":[{"name":"\u003cstring>","toNodeId":"\u003cstring>","apiResult":123}],"script":"\u003cstring>","instructions":"\u003cstring>","apiSettings":{"name":"\u003cstring>","method":123,"endpointUrl":"\u003cstring>","body":[{"key":"\u003cstring>","variableId":"\u003cstring>","type":123,"value":"\u003cstring>","required":true}],"headers":{},"description":"\u003cstring>","outputBody":[{"key":"\u003cstring>","variableId":"\u003cstring>","type":123,"value":"\u003cstring>","required":true}],"credentialId":"\u003cstring>"},"smsSettings":{"body":"\u003cstring>"},"emailSettings":{"to":["\u003cstring>"],"cc":["\u003cstring>"],"subject":"\u003cstring>","body":"\u003cstring>","smtpSettings":{"id":"\u003cstring>","provider":123,"smtpServer":"\u003cstring>","port":123,"enableSsl":true,"senderEmail":"\u003cstring>","senderPassword":"\u003cstring>","displayName":"\u003cstring>"}},"transferCallSettings":{"transferCallPhoneNumber":"\u003cstring>","triggerDescription":"\u003cstring>","warmTransferMessage":"\u003cstring>","isWhisper":true},"handOffAction":"\u003carray>","postCallActions":"\u003carray>"}],"agentName":"\u003cstring>"},"variables":[{"id":"\u003cstring>","name":"\u003cstring>","group":123,"type":123,"isList":true,"description":"\u003cstring>","value":"\u003cstring>","options":[{"value":"\u003cstring>","code":"\u003cstring>"}],"isSessionScoped":true}],"inbound":{"totalAgents":{"value":123},"transcriptOptions":{"value":123},"callWebhookUrl":{"value":"\u003cstring>"},"textChannelId":{"value":"\u003cstring>"},"maxTurns":{"value":123},"autoCloseAfterInactivityHours":{"value":123},"inactivityFollowUps":{"value":[{"delayMinutes":123,"message":"\u003cstring>"}]},"responseDelaySeconds":{"value":123}},"outbound":{"totalAgents":{"value":123},"transcriptOptions":{"value":123},"budgetTotal":{"value":123},"timeZone":{"value":"\u003cstring>"},"callingHours":{"value":[{"day":123,"start":"\u003cstring>","end":"\u003cstring>"}]},"callWebhookUrl":{"value":"\u003cstring>"},"leadWebhookUrl":{"value":"\u003cstring>"},"textChannelId":{"value":"\u003cstring>"},"maxTurns":{"value":123},"autoCloseAfterInactivityHours":{"value":123},"inactivityFollowUps":{"value":[{"delayMinutes":123,"message":"\u003cstring>"}]},"responseDelaySeconds":{"value":123}}}}},"exampleType":"generated"},"application/*+json":{"schema":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"The updated name of the Pearl.","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The updated name of the Pearl.","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"pearl":{"oneOf":[{"type":"object","description":"Updated conversation flow (node graph) for the Pearl. When omitted, the current flow is kept unchanged.\r\nWhen provided, it replaces the whole flow, so send the complete node graph.","properties":{"agentPersonality":{"oneOf":[{"type":"string","description":"Defines the agent's personality and tone (for example, more assertive or more calm).\n\nConstraints:\n- Max length: 35 characters.","uniqueKey":"pearl.oneOf.0.agentPersonality.oneOf.0","typeLabel":"string"},{"type":"null","description":"Defines the agent's personality and tone (for example, more assertive or more calm).\n\nConstraints:\n- Max length: 35 characters.","uniqueKey":"pearl.oneOf.0.agentPersonality.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.agentPersonality","typeLabel":"string | null"},"timeZone":{"oneOf":[{"type":"string","description":"Time zone identifier used by the Pearl's agents.\r\n \r\nThe agent will operate according to this time zone, regardless of the lead/customer local time zone.\r\nFor accepted values, refer to the [Windows Time Zones list](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11).\r\n \r\nExample: \"Pacific Standard Time\", \"Romance Standard Time\".","uniqueKey":"pearl.oneOf.0.timeZone.oneOf.0","typeLabel":"string"},{"type":"null","description":"Time zone identifier used by the Pearl's agents.\r\n \r\nThe agent will operate according to this time zone, regardless of the lead/customer local time zone.\r\nFor accepted values, refer to the [Windows Time Zones list](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11).\r\n \r\nExample: \"Pacific Standard Time\", \"Romance Standard Time\".","uniqueKey":"pearl.oneOf.0.timeZone.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.timeZone","typeLabel":"string | null"},"modelType":{"oneOf":[{"type":"integer","description":"Agent model type.\n\nVoice Pearls use one of these models:\n- Trident: Highest-quality model with standard rate. Optimized for natural, human-like interactions.\n- Oyster: Most cost-effective model (2 credits cheaper per minute). Straightforward, prioritizes simplicity and efficiency.\n- Arrow: Default for voice Pearls. High-intelligence model with the same depth as Trident, built for ultra-low latency (fastest). Costs 2 credits more per minute.\n- Hydra: Smartest model, built for demanding tasks that need deeper reasoning. Costs 2 credits more per minute.\n\nText Pearls (chat and messaging conversations) use one of these models:\n- Orchid: Default for text Pearls. The most advanced text model, smarter than Swan, with high reasoning. Costs 1 credit more per message.\n- Swan: Text model with high reasoning and standard rate.\n\nOrchid and Swan are not available for voice Pearls, and the voice models are not available for text Pearls.\n\n`1 - Trident`\n\n`2 - Oyster`\n\n`3 - Arrow`\n\n`4 - Hydra`\n\n`5 - Flame`\n\n`11 - Swan`\n\n`12 - Orchid`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.modelType.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.modelType.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.modelType","typeLabel":"integer\u003cint32> | null"},"companyName":{"oneOf":[{"type":"string","description":"The company name used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 100 characters.","uniqueKey":"pearl.oneOf.0.companyName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The company name used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 100 characters.","uniqueKey":"pearl.oneOf.0.companyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.companyName","typeLabel":"string | null"},"companyDescription":{"oneOf":[{"type":"string","description":"The company description used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 500 characters.","uniqueKey":"pearl.oneOf.0.companyDescription.oneOf.0","typeLabel":"string"},{"type":"null","description":"The company description used by the agent during conversations.\r\n \r\nConstraints:\r\n- Max length: 500 characters.","uniqueKey":"pearl.oneOf.0.companyDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.companyDescription","typeLabel":"string | null"},"generalInstructions":{"oneOf":[{"type":"string","description":"General behavior guidelines applied to the agent across the whole conversation, on top of the\r\nper-node scripts and instructions (for example a tone to keep or rules that always apply).\r\n \r\nConstraints:\r\n- Max length: 2,500 characters.\r\n- Cannot contain variables.","uniqueKey":"pearl.oneOf.0.generalInstructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"General behavior guidelines applied to the agent across the whole conversation, on top of the\r\nper-node scripts and instructions (for example a tone to keep or rules that always apply).\r\n \r\nConstraints:\r\n- Max length: 2,500 characters.\r\n- Cannot contain variables.","uniqueKey":"pearl.oneOf.0.generalInstructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.generalInstructions","typeLabel":"string | null"},"knowledgeBase":{"oneOf":[{"type":"string","description":"Knowledge base content provided to the agent, such as FAQs, internal context, and operational instructions.\r\n \r\nConstraints:\r\n- Max length: 20,000 characters.","uniqueKey":"pearl.oneOf.0.knowledgeBase.oneOf.0","typeLabel":"string"},{"type":"null","description":"Knowledge base content provided to the agent, such as FAQs, internal context, and operational instructions.\r\n \r\nConstraints:\r\n- Max length: 20,000 characters.","uniqueKey":"pearl.oneOf.0.knowledgeBase.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.knowledgeBase","typeLabel":"string | null"},"memory":{"oneOf":[{"type":"boolean","description":"Indicates whether memory is enabled. When enabled, the Pearl can remember previous conversations for a given phone number.","uniqueKey":"pearl.oneOf.0.memory.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether memory is enabled. When enabled, the Pearl can remember previous conversations for a given phone number.","uniqueKey":"pearl.oneOf.0.memory.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.memory","typeLabel":"boolean | null"},"successDescription":{"oneOf":[{"type":"string","description":"Description of what makes a conversation successful. Used to evaluate and report the conversation outcome.\r\n \r\nConstraints:\r\n- Max length: 200 characters.","uniqueKey":"pearl.oneOf.0.successDescription.oneOf.0","typeLabel":"string"},{"type":"null","description":"Description of what makes a conversation successful. Used to evaluate and report the conversation outcome.\r\n \r\nConstraints:\r\n- Max length: 200 characters.","uniqueKey":"pearl.oneOf.0.successDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.successDescription","typeLabel":"string | null"},"indicatorTags":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z).","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z).","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"The label name.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The label name.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"color":{"type":"integer","description":"The color of the indicator tag.\n\n`1 - purple`\n\n`2 - red`\n\n`3 - yellow`\n\n`4 - green`\n\n`5 - blue`\n\n`6 - pink`\n\n`7 - teal`\n\n`8 - lime`\n\n`8 - gradient1`\n\n`9 - gradient2`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX].color","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Indicator tags used to classify conversations (name, description and color).\r\n \r\nConstraints:\r\n- Max entries: 10.\r\n- Colors must be unique across tags.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z)."},{"type":"null","description":"Identifier of the label.\r\n \r\nIf not provided, it will be generated automatically.\r\n \r\nImportant:\r\n- The ID is the stable identifier of the label.\r\n- Changing the ID creates a new label.\r\n- Keeping the same ID while updating the name/description updates the existing label.\r\n \r\nConstraints:\r\n- Exactly 6 characters.\r\n- Letters only (A–Z, a–z)."}]},"name":{"oneOf":[{"type":"string","description":"The label name.\r\n \r\nMax 25 characters only."},{"type":"null","description":"The label name.\r\n \r\nMax 25 characters only."}]},"description":{"oneOf":[{"type":"string","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only."},{"type":"null","description":"Describes when this label should be applied.\r\n \r\nMax 250 characters only."}]},"color":{"type":"integer","description":"The color of the indicator tag.\n\n`1 - purple`\n\n`2 - red`\n\n`3 - yellow`\n\n`4 - green`\n\n`5 - blue`\n\n`6 - pink`\n\n`7 - teal`\n\n`8 - lime`\n\n`8 - gradient1`\n\n`9 - gradient2`\n\n","format":"int32"}},"additionalProperties":false},"description":"Indicator tags used to classify conversations (name, description and color).\r\n \r\nConstraints:\r\n- Max entries: 10.\r\n- Colors must be unique across tags.","uniqueKey":"pearl.oneOf.0.indicatorTags.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.indicatorTags","typeLabel":"object[] | null"},"nodes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"nodeId":{"oneOf":[{"type":"string","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeId","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Display name of the node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name of the node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"nodeType":{"type":"integer","description":"The type of a node in a Pearl's conversation flow. It determines what the node does and which settings object it carries.\n\n- OpeningSentence: the first message the agent sends to start the conversation.\n- PreCallAPI: an API call executed before the conversation starts (for example a customer lookup). Its transitions use apiResult to branch on success or failure.\n- Dialogue: a scripted node where the agent converses with the customer.\n- HandoffChatToHuman: hands the conversation over to a human operator. Text Pearls only.\n- API: an API call executed during the conversation.\n- SMS: sends an SMS message.\n- Email: sends an email.\n- TransferCall: transfers the call to another phone number. Voice Pearls only.\n- StartCallRecording: starts recording the call from this point. Voice Pearls only. This node carries no settings.\n- SearchKnowledgeBase: searches the agent's knowledge base and returns the answer.\n- EndCall: terminates the conversation. Exactly one per flow, and every path must lead to it.\n- PostCallActions: a container whose nested actions run after the conversation ends.\n\n`2 - OpeningSentence`\n\n`3 - PreCallAPI`\n\n`10 - Dialogue`\n\n`31 - HandoffChatToHuman`\n\n`40 - API`\n\n`50 - SMS`\n\n`51 - Email`\n\n`60 - TransferCall`\n\n`65 - StartCallRecording`\n\n`80 - SearchKnowledgeBase`\n\n`100 - EndCall`\n\n`200 - PostCallActions`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].nodeType","typeLabel":"integer\u003cint32>"},"transitions":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].toNodeId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The NodeId of the target node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].toNodeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].toNodeId","typeLabel":"string | null"},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].apiResult.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].apiResult.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX].apiResult","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transitions","typeLabel":"object[] | null"},"script":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].script.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].script.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].script","typeLabel":"string | null"},"instructions":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].instructions.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].instructions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].instructions","typeLabel":"string | null"},"apiSettings":{"oneOf":[{"type":"object","description":"API call configuration. Required when the node type is API or PreCallAPI.","properties":{"name":{"oneOf":[{"type":"string","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.name","typeLabel":"string | null"},"method":{"type":"integer","description":"The HTTP method used for the API request.\n\n`1 - GET`\n\n`2 - POST`\n\n`3 - PUT`\n\n`4 - DELETE`\n\n`5 - PATCH`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.method","typeLabel":"integer\u003cint32>"},"endpointUrl":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.endpointUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.endpointUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.endpointUrl","typeLabel":"string | null"},"body":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].key.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].key","typeLabel":"string | null"},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].variableId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].variableId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].variableId","typeLabel":"string | null"},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].type.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].type","typeLabel":"integer\u003cint32> | null"},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"required":{"type":"boolean","description":"Indicates whether this request body field is required.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX].required","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.body","typeLabel":"object[] | null"},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Optional HTTP headers to include in the API request.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Optional HTTP headers to include in the API request.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.headers","typeLabel":"object | null"},"description":{"oneOf":[{"type":"string","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.description","typeLabel":"string | null"},"outputBody":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].key.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].key.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].key","typeLabel":"string | null"},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].variableId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].variableId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].variableId","typeLabel":"string | null"},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].type.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].type","typeLabel":"integer\u003cint32> | null"},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"required":{"type":"boolean","description":"Indicates whether this request body field is required.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX].required","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.outputBody","typeLabel":"object[] | null"},"credentialId":{"oneOf":[{"type":"string","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId}).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.credentialId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId}).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.credentialId.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0.credentialId","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].apiSettings","typeLabel":"object | null"},"smsSettings":{"oneOf":[{"type":"object","description":"SMS configuration. Required when the node type is SMS.","properties":{"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0.body.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0.body","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].smsSettings","typeLabel":"object | null"},"emailSettings":{"oneOf":[{"type":"object","description":"Email configuration. Required when the node type is Email.","properties":{"to":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.to","typeLabel":"string[] | null"},"cc":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.cc","typeLabel":"string[] | null"},"subject":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.subject.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.subject.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.subject","typeLabel":"string | null"},"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.body.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.body.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.body","typeLabel":"string | null"},"smtpSettings":{"oneOf":[{"type":"object","description":"Optional SMTP configuration used to send the email.\r\nIf not provided, the email is sent using the default platform email sender.","properties":{"id":{"oneOf":[{"type":"string","description":"Optional SMTP configuration identifier.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional SMTP configuration identifier.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.id.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"integer","description":"The email provider used to send the emails.\n\n`1 - Gmail`\n\n`2 - Office365`\n\n`10 - Custom`\n\n","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.provider.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.provider","typeLabel":"integer\u003cint32> | null"},"smtpServer":{"oneOf":[{"type":"string","description":"SMTP server hostname.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.smtpServer.oneOf.0","typeLabel":"string"},{"type":"null","description":"SMTP server hostname.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.smtpServer.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.smtpServer","typeLabel":"string | null"},"port":{"oneOf":[{"type":"integer","description":"SMTP server port.","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.port.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"SMTP server port.","format":"int32","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.port.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.port","typeLabel":"integer\u003cint32> | null"},"enableSsl":{"oneOf":[{"type":"boolean","description":"Indicates whether SSL/TLS is enabled for the SMTP connection.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.enableSsl.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Indicates whether SSL/TLS is enabled for the SMTP connection.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.enableSsl.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.enableSsl","typeLabel":"boolean | null"},"senderEmail":{"oneOf":[{"type":"string","description":"Sender email address used for SMTP authentication and as the \"From\" address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderEmail.oneOf.0","typeLabel":"string"},{"type":"null","description":"Sender email address used for SMTP authentication and as the \"From\" address.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderEmail.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderEmail","typeLabel":"string | null"},"senderPassword":{"oneOf":[{"type":"string","description":"Sender password or SMTP credential used for authentication.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderPassword.oneOf.0","typeLabel":"string"},{"type":"null","description":"Sender password or SMTP credential used for authentication.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderPassword.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.senderPassword","typeLabel":"string | null"},"displayName":{"oneOf":[{"type":"string","description":"Display name shown in the recipient inbox (the \"From\" name).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.displayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name shown in the recipient inbox (the \"From\" name).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.displayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0.displayName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0.smtpSettings","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].emailSettings","typeLabel":"object | null"},"transferCallSettings":{"oneOf":[{"type":"object","description":"Call transfer configuration. Required when the node type is TransferCall (voice Pearls only).","properties":{"transferCallPhoneNumber":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.transferCallPhoneNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.transferCallPhoneNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.transferCallPhoneNumber","typeLabel":"string | null"},"triggerDescription":{"oneOf":[{"type":"string","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.triggerDescription.oneOf.0","typeLabel":"string"},{"type":"null","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.triggerDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.triggerDescription","typeLabel":"string | null"},"warmTransferMessage":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.warmTransferMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.warmTransferMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.warmTransferMessage","typeLabel":"string | null"},"isWhisper":{"type":"boolean","description":"The warm transfer mode. Only applies when a warm transfer message is set.\r\n \r\n- `true` (Whisper): only the recipient hears the warm transfer message, the caller stays on hold.\r\n- `false` (3-way): both the caller and the recipient hear the warm transfer message.\r\n \r\nDefaults to `false` (3-way) when omitted.\r\n \r\nSee [Transfer Call](/pages/transfer_call#transfer-types) for more information.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0.isWhisper","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].transferCallSettings","typeLabel":"object | null"},"handOffAction":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].handOffAction.oneOf.0","typeLabel":"array"},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].handOffAction.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].handOffAction","typeLabel":"array | null"},"postCallActions":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].postCallActions.oneOf.0","typeLabel":"array"},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].postCallActions.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX].postCallActions","typeLabel":"array | null"}},"additionalProperties":false,"description":"A node of the Pearl's conversation graph.\r\nThe settings object matching the node type must be provided (for example ApiSettings for an API node).\r\nA StartCallRecording node is the exception: it carries no settings, its presence alone starts the recording.","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The nodes of the conversation graph. Each node has a unique NodeId and its transitions\r\nreference the NodeId of the target node.\r\n \r\nThe entry point is determined automatically: the PreCallAPI node if present, otherwise the OpeningSentence node.\r\n \r\nConstraints:\r\n- Exactly one OpeningSentence node (or one PreCallAPI leading to one or two OpeningSentence nodes).\r\n- Exactly one EndCall node, and every path must be able to reach it.\r\n- Every non-start node needs at least one incoming transition (except a TransferCall node, which may\r\n be left unwired and is then fired by the agent from its trigger description).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"nodeId":{"oneOf":[{"type":"string","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side."},{"type":"null","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side."}]},"name":{"oneOf":[{"type":"string","description":"Display name of the node."},{"type":"null","description":"Display name of the node."}]},"nodeType":{"type":"integer","description":"The type of a node in a Pearl's conversation flow. It determines what the node does and which settings object it carries.\n\n- OpeningSentence: the first message the agent sends to start the conversation.\n- PreCallAPI: an API call executed before the conversation starts (for example a customer lookup). Its transitions use apiResult to branch on success or failure.\n- Dialogue: a scripted node where the agent converses with the customer.\n- HandoffChatToHuman: hands the conversation over to a human operator. Text Pearls only.\n- API: an API call executed during the conversation.\n- SMS: sends an SMS message.\n- Email: sends an email.\n- TransferCall: transfers the call to another phone number. Voice Pearls only.\n- StartCallRecording: starts recording the call from this point. Voice Pearls only. This node carries no settings.\n- SearchKnowledgeBase: searches the agent's knowledge base and returns the answer.\n- EndCall: terminates the conversation. Exactly one per flow, and every path must lead to it.\n- PostCallActions: a container whose nested actions run after the conversation ends.\n\n`2 - OpeningSentence`\n\n`3 - PreCallAPI`\n\n`10 - Dialogue`\n\n`31 - HandoffChatToHuman`\n\n`40 - API`\n\n`50 - SMS`\n\n`51 - Email`\n\n`60 - TransferCall`\n\n`65 - StartCallRecording`\n\n`80 - SearchKnowledgeBase`\n\n`100 - EndCall`\n\n`200 - PostCallActions`\n\n","format":"int32"},"transitions":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node."},{"type":"null","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node."}]},"script":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes)."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes)."}]},"instructions":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node."}]},"apiSettings":{"oneOf":[{"type":"object","description":"API call configuration. Required when the node type is API or PreCallAPI.","properties":{"name":{"oneOf":[{"type":"string","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only."},{"type":"null","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only."}]},"method":{"type":"integer","description":"The HTTP method used for the API request.\n\n`1 - GET`\n\n`2 - POST`\n\n`3 - PUT`\n\n`4 - DELETE`\n\n`5 - PATCH`\n\n","format":"int32"},"endpointUrl":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available."}]},"body":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body)."},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body)."}]},"headers":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"Optional HTTP headers to include in the API request."},{"type":"null","additionalProperties":{"type":"string"},"description":"Optional HTTP headers to include in the API request."}]},"description":{"oneOf":[{"type":"string","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only."},{"type":"null","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only."}]},"outputBody":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation."},{"type":"null","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation."}]},"credentialId":{"oneOf":[{"type":"string","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId})."},{"type":"null","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId})."}]}},"additionalProperties":false},{"type":"null"}]},"smsSettings":{"oneOf":[{"type":"object","description":"SMS configuration. Required when the node type is SMS.","properties":{"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]}},"additionalProperties":false},{"type":"null"}]},"emailSettings":{"oneOf":[{"type":"object","description":"Email configuration. Required when the node type is Email.","properties":{"to":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."},{"type":"null","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."}]},"cc":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."},{"type":"null","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."}]},"subject":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]},"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]},"smtpSettings":{"oneOf":[{"type":"object","description":"Optional SMTP configuration used to send the email.\r\nIf not provided, the email is sent using the default platform email sender.","properties":{"id":{"oneOf":[{"type":"string","description":"Optional SMTP configuration identifier."},{"type":"null","description":"Optional SMTP configuration identifier."}]},"provider":{"oneOf":[{"type":"integer","description":"The email provider used to send the emails.\n\n`1 - Gmail`\n\n`2 - Office365`\n\n`10 - Custom`\n\n","format":"int32"},{"type":"null"}]},"smtpServer":{"oneOf":[{"type":"string","description":"SMTP server hostname."},{"type":"null","description":"SMTP server hostname."}]},"port":{"oneOf":[{"type":"integer","description":"SMTP server port.","format":"int32"},{"type":"null","description":"SMTP server port.","format":"int32"}]},"enableSsl":{"oneOf":[{"type":"boolean","description":"Indicates whether SSL/TLS is enabled for the SMTP connection."},{"type":"null","description":"Indicates whether SSL/TLS is enabled for the SMTP connection."}]},"senderEmail":{"oneOf":[{"type":"string","description":"Sender email address used for SMTP authentication and as the \"From\" address."},{"type":"null","description":"Sender email address used for SMTP authentication and as the \"From\" address."}]},"senderPassword":{"oneOf":[{"type":"string","description":"Sender password or SMTP credential used for authentication."},{"type":"null","description":"Sender password or SMTP credential used for authentication."}]},"displayName":{"oneOf":[{"type":"string","description":"Display name shown in the recipient inbox (the \"From\" name)."},{"type":"null","description":"Display name shown in the recipient inbox (the \"From\" name)."}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]},"transferCallSettings":{"oneOf":[{"type":"object","description":"Call transfer configuration. Required when the node type is TransferCall (voice Pearls only).","properties":{"transferCallPhoneNumber":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only."}]},"triggerDescription":{"oneOf":[{"type":"string","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens)."},{"type":"null","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens)."}]},"warmTransferMessage":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only."}]},"isWhisper":{"type":"boolean","description":"The warm transfer mode. Only applies when a warm transfer message is set.\r\n \r\n- `true` (Whisper): only the recipient hears the warm transfer message, the caller stays on hold.\r\n- `false` (3-way): both the caller and the recipient hear the warm transfer message.\r\n \r\nDefaults to `false` (3-way) when omitted.\r\n \r\nSee [Transfer Call](/pages/transfer_call#transfer-types) for more information."}},"additionalProperties":false},{"type":"null"}]},"handOffAction":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."}]},"postCallActions":{"oneOf":[{"type":"array","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."},{"type":"null","items":{"$circularRef":"c1a0a094-cb4c-4e24-a97d-8a5971ec5178"},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."}]}},"additionalProperties":false,"description":"A node of the Pearl's conversation graph.\r\nThe settings object matching the node type must be provided (for example ApiSettings for an API node).\r\nA StartCallRecording node is the exception: it carries no settings, its presence alone starts the recording."},"description":"The nodes of the conversation graph. Each node has a unique NodeId and its transitions\r\nreference the NodeId of the target node.\r\n \r\nThe entry point is determined automatically: the PreCallAPI node if present, otherwise the OpeningSentence node.\r\n \r\nConstraints:\r\n- Exactly one OpeningSentence node (or one PreCallAPI leading to one or two OpeningSentence nodes).\r\n- Exactly one EndCall node, and every path must be able to reach it.\r\n- Every non-start node needs at least one incoming transition (except a TransferCall node, which may\r\n be left unwired and is then fired by the agent from its trigger description).","uniqueKey":"pearl.oneOf.0.nodes.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.nodes","typeLabel":"object[] | null"},"agentName":{"oneOf":[{"type":"string","description":"The display name of the agent in the conversation.","uniqueKey":"pearl.oneOf.0.agentName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The display name of the agent in the conversation.","uniqueKey":"pearl.oneOf.0.agentName.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl.oneOf.0.agentName","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"pearl.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"pearl.oneOf.1","typeLabel":"null"}],"uniqueKey":"pearl","typeLabel":"object | null"},"variables":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-).","uniqueKey":"variables.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-).","uniqueKey":"variables.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"group":{"type":"integer","description":"Variable group.\n\n- PreCall: Variables available before the call (used in pre-call contexts such as opening sentence or pre-call API).\n- InCall: Variables collected or updated during the call.\n- PostCall: Variables generated after the call by the platform (cannot be created via the API).\n\n`1 - PreCall`\n\n`2 - InCall`\n\n`3 - PostCall`\n\n","format":"int32","uniqueKey":"variables.oneOf.0.items.[INDEX].group","typeLabel":"integer\u003cint32>"},"type":{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32","uniqueKey":"variables.oneOf.0.items.[INDEX].type","typeLabel":"integer\u003cint32>"},"isList":{"type":"boolean","description":"Indicates whether the variable can contain multiple values (list) or a single value.","uniqueKey":"variables.oneOf.0.items.[INDEX].isList","typeLabel":"boolean"},"description":{"oneOf":[{"type":"string","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only.","uniqueKey":"variables.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].description","typeLabel":"string | null"},"value":{"oneOf":[{"type":"string","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied.","uniqueKey":"variables.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied.","uniqueKey":"variables.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"options":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"string"},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].value","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color).","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color).","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].code.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX].code","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."}]},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."}]}},"additionalProperties":false},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations.","uniqueKey":"variables.oneOf.0.items.[INDEX].options.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables.oneOf.0.items.[INDEX].options","typeLabel":"object[] | null"},"isSessionScoped":{"type":"boolean","description":"Indicates whether the variable is reset for every interaction (\"Reset Every Interaction\" on the platform).\r\n \r\nNotes:\r\n- If true, the variable starts empty in every new call or chat.\r\n- It is never pre-filled from outside the interaction: a value sent in `CallData` for this variable, or stored on the contact by a previous interaction, is ignored.\r\n- Defaults to false.","uniqueKey":"variables.oneOf.0.items.[INDEX].isSessionScoped","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"variables.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Variables that can be defined, stored, and used by the agent during conversations. Used together with Pearl.\r\nFor details on variable groups and how to use variables in supported fields, see: [Flow Variables](/api-reference/flow_variables)","uniqueKey":"variables.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-)."},{"type":"null","description":"Variable identifier.\r\n \r\nThis is the ID you must reference when using the variable in scripts and templated fields.\r\nIt must not contain spaces.\r\n \r\nConstraints:\r\n- Max 40 characters.\r\n- Allowed characters: letters (A–Z, a–z), digits (0–9), underscore (_), hyphen (-)."}]},"name":{"oneOf":[{"type":"string","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only."},{"type":"null","description":"Friendly display name for the variable.\r\n \r\nMax 40 characters only."}]},"group":{"type":"integer","description":"Variable group.\n\n- PreCall: Variables available before the call (used in pre-call contexts such as opening sentence or pre-call API).\n- InCall: Variables collected or updated during the call.\n- PostCall: Variables generated after the call by the platform (cannot be created via the API).\n\n`1 - PreCall`\n\n`2 - InCall`\n\n`3 - PostCall`\n\n","format":"int32"},"type":{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},"isList":{"type":"boolean","description":"Indicates whether the variable can contain multiple values (list) or a single value."},"description":{"oneOf":[{"type":"string","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only."},{"type":"null","description":"Guidance for the agent on how to collect or infer this variable during the conversation.\r\n \r\nMax 1000 characters only."}]},"value":{"oneOf":[{"type":"string","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied."},{"type":"null","description":"Optional preset (static) value of the variable.\r\nWhen set, the variable is already populated with this value and does not need to be collected or supplied."}]},"options":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."}]},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."}]}},"additionalProperties":false},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations."},{"type":"null","items":{"type":"object","properties":{"value":{"oneOf":[{"type":"string","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."},{"type":"null","description":"The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."}]},"code":{"oneOf":[{"type":"string","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."},{"type":"null","description":"Optional display/encoded value for the option.\r\nUse this to store a mapped value (for example a normalized code, an internal identifier, or a hex color)."}]}},"additionalProperties":false},"description":"Optional predefined choices for this variable (allowed/preset values).\r\n \r\nNotes:\r\n- Use Value for the human-readable label.\r\n- Use Code for an optional internal/normalized value to store or send to integrations."}]},"isSessionScoped":{"type":"boolean","description":"Indicates whether the variable is reset for every interaction (\"Reset Every Interaction\" on the platform).\r\n \r\nNotes:\r\n- If true, the variable starts empty in every new call or chat.\r\n- It is never pre-filled from outside the interaction: a value sent in `CallData` for this variable, or stored on the contact by a previous interaction, is ignored.\r\n- Defaults to false."}},"additionalProperties":false},"description":"Variables that can be defined, stored, and used by the agent during conversations. Used together with Pearl.\r\nFor details on variable groups and how to use variables in supported fields, see: [Flow Variables](/api-reference/flow_variables)","uniqueKey":"variables.oneOf.1","typeLabel":"null"}],"uniqueKey":"variables","typeLabel":"object[] | null"},"inbound":{"oneOf":[{"type":"object","description":"Partial update of the inbound text settings: only the fields present in the JSON are applied.\r\nWhen omitted, the inbound settings are kept unchanged. Must not be provided together with Outbound.","properties":{"totalAgents":{"type":"object","description":"Total number of agents allocated to this inbound activity.","properties":{"value":{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.totalAgents.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.totalAgents","typeLabel":"object"},"transcriptOptions":{"type":"object","description":"Transcript generation mode (full transcript, sensitive info removed, or no transcript).","properties":{"value":{"type":"integer","description":"Defines how the conversation transcript is kept: in full, with sensitive information removed, or not at all.\n\n`1 - FullTranscript`\n\n`2 - SensitiveInfoRemoved`\n\n`3 - NoTranscript`\n\n","format":"int32","uniqueKey":"inbound.oneOf.0.transcriptOptions.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.transcriptOptions","typeLabel":"object"},"callWebhookUrl":{"type":"object","description":"Webhook URL to receive call events (for example call started and call ended). Send null to remove the webhook.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"inbound.oneOf.0.callWebhookUrl.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"inbound.oneOf.0.callWebhookUrl.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.callWebhookUrl.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.callWebhookUrl","typeLabel":"object"},"textChannelId":{"type":"object","description":"The text channel ID to use for this Pearl. When omitted, the current channel is kept.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"inbound.oneOf.0.textChannelId.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"inbound.oneOf.0.textChannelId.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.textChannelId.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.textChannelId","typeLabel":"object"},"maxTurns":{"type":"object","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.maxTurns.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.maxTurns","typeLabel":"object"},"autoCloseAfterInactivityHours":{"type":"object","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"object"},"inactivityFollowUps":{"type":"object","description":"Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message.","properties":{"value":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].delayMinutes","typeLabel":"integer\u003cint32>"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message","typeLabel":"string | null"}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."}]}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation."},"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.value","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.inactivityFollowUps","typeLabel":"object"},"responseDelaySeconds":{"type":"object","description":"Number of seconds the agent waits after a customer message before replying, so that consecutive messages are answered together.\r\nBetween 0 and 300. Set it to null or 0 to reply as soon as possible.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.responseDelaySeconds.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0.responseDelaySeconds","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"inbound.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"inbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound","typeLabel":"object | null"},"outbound":{"oneOf":[{"type":"object","description":"Partial update of the outbound text settings: only the fields present in the JSON are applied.\r\nWhen omitted, the outbound settings are kept unchanged. Must not be provided together with Inbound.","properties":{"totalAgents":{"type":"object","description":"Total number of agents allocated to this outbound activity.","properties":{"value":{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.totalAgents.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.totalAgents","typeLabel":"object"},"transcriptOptions":{"type":"object","description":"Transcript generation mode (full transcript, sensitive info removed, or no transcript).","properties":{"value":{"type":"integer","description":"Defines how the conversation transcript is kept: in full, with sensitive information removed, or not at all.\n\n`1 - FullTranscript`\n\n`2 - SensitiveInfoRemoved`\n\n`3 - NoTranscript`\n\n","format":"int32","uniqueKey":"outbound.oneOf.0.transcriptOptions.value","typeLabel":"integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.transcriptOptions","typeLabel":"object"},"budgetTotal":{"type":"object","description":"Total budget allocated for the outbound activity. Send null to remove the budget limit.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.budgetTotal.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.budgetTotal","typeLabel":"object"},"timeZone":{"type":"object","description":"Default time zone for the outbound activity.\r\nFor accepted values, refer to the [Windows Time Zones list](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11).","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.timeZone.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.timeZone.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.timeZone.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.timeZone","typeLabel":"object"},"callingHours":{"type":"object","description":"Allowed calling hours for the outbound activity. The provided list replaces the current one.","properties":{"value":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","description":"`0 - Sunday`\n\n`1 - Monday`\n\n`2 - Tuesday`\n\n`3 - Wednesday`\n\n`4 - Thursday`\n\n`5 - Friday`\n\n`6 - Saturday`\n\n","format":"int32","uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX].day","typeLabel":"integer\u003cint32>"},"start":{"type":"string","description":"Start time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be before End.","format":"date-span","uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX].start","typeLabel":"string\u003cdate-span>"},"end":{"type":"string","description":"End time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be after Start.","format":"date-span","uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX].end","typeLabel":"string\u003cdate-span>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"day":{"type":"integer","description":"`0 - Sunday`\n\n`1 - Monday`\n\n`2 - Tuesday`\n\n`3 - Wednesday`\n\n`4 - Thursday`\n\n`5 - Friday`\n\n`6 - Saturday`\n\n","format":"int32"},"start":{"type":"string","description":"Start time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be before End.","format":"date-span"},"end":{"type":"string","description":"End time of the allowed calling window (based on the campaign time zone).\r\n \r\nConstraints:\r\n- Must be after Start.","format":"date-span"}},"additionalProperties":false},"uniqueKey":"outbound.oneOf.0.callingHours.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callingHours.value","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callingHours","typeLabel":"object"},"callWebhookUrl":{"type":"object","description":"Webhook URL to receive call events (for example call started and call ended). Send null to remove the webhook.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.callWebhookUrl.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.callWebhookUrl.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callWebhookUrl.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callWebhookUrl","typeLabel":"object"},"leadWebhookUrl":{"type":"object","description":"Webhook URL to receive lead events (for example lead created/updated). Send null to remove the webhook.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.leadWebhookUrl.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.leadWebhookUrl","typeLabel":"object"},"textChannelId":{"type":"object","description":"The text channel ID to use for this Pearl. When omitted, the current channel is kept.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).\r\nOn a Pearl that is not paused, a WhatsApp channel is accepted only if every opening sentence of the flow matches an approved WhatsApp template.","properties":{"value":{"oneOf":[{"type":"string","uniqueKey":"outbound.oneOf.0.textChannelId.value.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"outbound.oneOf.0.textChannelId.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.textChannelId.value","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.textChannelId","typeLabel":"object"},"maxTurns":{"type":"object","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.maxTurns.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.maxTurns","typeLabel":"object"},"autoCloseAfterInactivityHours":{"type":"object","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"object"},"inactivityFollowUps":{"type":"object","description":"Follow-up messages automatically sent when the customer stops responding. The provided list replaces the current one.","properties":{"value":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].delayMinutes","typeLabel":"integer\u003cint32>"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX].message","typeLabel":"string | null"}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"delayMinutes":{"type":"integer","description":"Delay (in minutes) of customer inactivity before this follow-up is sent.","format":"int32"},"message":{"oneOf":[{"type":"string","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."},{"type":"null","description":"Optional custom follow-up message. When empty, the agent generates one from the conversation context.\r\n \r\nMax 1000 characters only."}]}},"additionalProperties":false,"description":"Follow-up message automatically sent when the customer stops responding during a text conversation."},"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.value","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.inactivityFollowUps","typeLabel":"object"},"responseDelaySeconds":{"type":"object","description":"Number of seconds the agent waits after a customer message before replying, so that consecutive messages are answered together.\r\nBetween 0 and 300. Set it to null or 0 to reply as soon as possible.","properties":{"value":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.value.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.responseDelaySeconds.value","typeLabel":"integer\u003cint32> | null"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.responseDelaySeconds","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"outbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","pearl":{"agentPersonality":"\u003cstring>","timeZone":"\u003cstring>","modelType":123,"companyName":"\u003cstring>","companyDescription":"\u003cstring>","generalInstructions":"\u003cstring>","knowledgeBase":"\u003cstring>","memory":true,"successDescription":"\u003cstring>","indicatorTags":[{"id":"\u003cstring>","name":"\u003cstring>","description":"\u003cstring>","color":123}],"nodes":[{"nodeId":"\u003cstring>","name":"\u003cstring>","nodeType":123,"transitions":[{"name":"\u003cstring>","toNodeId":"\u003cstring>","apiResult":123}],"script":"\u003cstring>","instructions":"\u003cstring>","apiSettings":{"name":"\u003cstring>","method":123,"endpointUrl":"\u003cstring>","body":[{"key":"\u003cstring>","variableId":"\u003cstring>","type":123,"value":"\u003cstring>","required":true}],"headers":{},"description":"\u003cstring>","outputBody":[{"key":"\u003cstring>","variableId":"\u003cstring>","type":123,"value":"\u003cstring>","required":true}],"credentialId":"\u003cstring>"},"smsSettings":{"body":"\u003cstring>"},"emailSettings":{"to":["\u003cstring>"],"cc":["\u003cstring>"],"subject":"\u003cstring>","body":"\u003cstring>","smtpSettings":{"id":"\u003cstring>","provider":123,"smtpServer":"\u003cstring>","port":123,"enableSsl":true,"senderEmail":"\u003cstring>","senderPassword":"\u003cstring>","displayName":"\u003cstring>"}},"transferCallSettings":{"transferCallPhoneNumber":"\u003cstring>","triggerDescription":"\u003cstring>","warmTransferMessage":"\u003cstring>","isWhisper":true},"handOffAction":"\u003carray>","postCallActions":"\u003carray>"}],"agentName":"\u003cstring>"},"variables":[{"id":"\u003cstring>","name":"\u003cstring>","group":123,"type":123,"isList":true,"description":"\u003cstring>","value":"\u003cstring>","options":[{"value":"\u003cstring>","code":"\u003cstring>"}],"isSessionScoped":true}],"inbound":{"totalAgents":{"value":123},"transcriptOptions":{"value":123},"callWebhookUrl":{"value":"\u003cstring>"},"textChannelId":{"value":"\u003cstring>"},"maxTurns":{"value":123},"autoCloseAfterInactivityHours":{"value":123},"inactivityFollowUps":{"value":[{"delayMinutes":123,"message":"\u003cstring>"}]},"responseDelaySeconds":{"value":123}},"outbound":{"totalAgents":{"value":123},"transcriptOptions":{"value":123},"budgetTotal":{"value":123},"timeZone":{"value":"\u003cstring>"},"callingHours":{"value":[{"day":123,"start":"\u003cstring>","end":"\u003cstring>"}]},"callWebhookUrl":{"value":"\u003cstring>"},"leadWebhookUrl":{"value":"\u003cstring>"},"textChannelId":{"value":"\u003cstring>"},"maxTurns":{"value":123},"autoCloseAfterInactivityHours":{"value":123},"inactivityFollowUps":{"value":[{"delayMinutes":123,"message":"\u003cstring>"}]},"responseDelaySeconds":{"value":123}}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"682fdc8c-b2e5-4e9b-90fd-f01ea004ce29":{"description":"The Pearl was updated successfully.","content":{"text/plain":{"schema":{"type":"boolean","uniqueKey":"","typeLabel":"boolean"},"examples":{"Example":{"title":"Example","value":true}},"exampleType":"generated"},"application/json":{"schema":{"type":"boolean","uniqueKey":"","typeLabel":"boolean"},"examples":{"Example":{"title":"Example","value":true}},"exampleType":"generated"},"text/json":{"schema":{"type":"boolean","uniqueKey":"","typeLabel":"boolean"},"examples":{"Example":{"title":"Example","value":true}},"exampleType":"generated"}},"exampleType":"generated"},"df4a7e67-9bb5-4d18-b6a4-6c32519fa461":{"description":"Error","content":{"text/plain":{"schema":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"status.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer\u003cint32> | null"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"},"errors":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"errors.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.oneOf.0.additionalProperties","typeLabel":"string[]"},"uniqueKey":"errors.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"errors.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.oneOf.1.additionalProperties","typeLabel":"string[]"},"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"object | null"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"detail":"\u003cstring>","instance":"\u003cstring>","errors":{}}}},"exampleType":"generated"},"application/json":{"schema":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"status.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer\u003cint32> | null"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"},"errors":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"errors.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.oneOf.0.additionalProperties","typeLabel":"string[]"},"uniqueKey":"errors.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"errors.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.oneOf.1.additionalProperties","typeLabel":"string[]"},"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"object | null"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"detail":"\u003cstring>","instance":"\u003cstring>","errors":{}}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"type":{"oneOf":[{"type":"string","uniqueKey":"type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"type.oneOf.1","typeLabel":"null"}],"uniqueKey":"type","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"},"status":{"oneOf":[{"type":"integer","format":"int32","uniqueKey":"status.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"integer\u003cint32> | null"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail","typeLabel":"string | null"},"instance":{"oneOf":[{"type":"string","uniqueKey":"instance.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"instance.oneOf.1","typeLabel":"null"}],"uniqueKey":"instance","typeLabel":"string | null"},"errors":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"errors.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.oneOf.0.additionalProperties","typeLabel":"string[]"},"uniqueKey":"errors.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"errors.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.oneOf.1.additionalProperties","typeLabel":"string[]"},"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"object | null"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"detail":"\u003cstring>","instance":"\u003cstring>","errors":{}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"5fa4ed7a-1df3-4139-95c8-ed349099ff1a":{"bearer_auth":{"type":"http","description":"Specify the authorization token.\n\nFor more information, check out the [Authorization Guide](/api-reference/authorization).","scheme":"bearer","scopes":[],"schemeName":"bearer_auth"}},"8c5918d2-96d7-4250-9504-fe7b9e421590":{"oauth2_client_credentials":{"type":"oauth2","description":"OAuth2 client_credentials grant. Use the Id of an OAuth API key as `client_id` and its one-time secret as `client_secret`.","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"pearls:read":"List and view Pearls","pearls:write":"Create and update Pearls (settings, conversation flows, voices); implies pearls:read","pearls:moderate":"Run/pause Pearls and reset customer memory; implies pearls:read","pearls:analytics":"Read Pearl analytics; implies pearls:read","pearls:leads":"Manage and read outbound leads; implies pearls:read","pearls:calls":"Read calls and recordings, make and delete calls; implies pearls:read","account:phone_numbers":"Read account phone numbers and text channels, manage custom VoIP numbers, import Twilio numbers and delete phone numbers","account:users":"Read account users","account:advanced":"Manage advanced account settings (blacklist)","account:billing":"Read account information and credit balance","account:audit_log":"Read the audit log","tts":"Synthesise speech and clone voices"}}},"scopes":[],"schemeName":"oauth2_client_credentials"}}},"servers":{"31330d28-5e54-49c3-a09a-2d05db9b1d8c":{"url":"https://api.nlpearl.ai","description":"Production Environement"}},"schemas":{"c1a0a094-cb4c-4e24-a97d-8a5971ec5178":{"type":"object","properties":{"nodeId":{"oneOf":[{"type":"string","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side."},{"type":"null","description":"Unique identifier of the node within the flow. Transitions reference this value as their target.\r\nOptional: a node may be authored with only a name, in which case the id is derived from it server-side."}]},"name":{"oneOf":[{"type":"string","description":"Display name of the node."},{"type":"null","description":"Display name of the node."}]},"nodeType":{"type":"integer","description":"The type of a node in a Pearl's conversation flow. It determines what the node does and which settings object it carries.\n\n- OpeningSentence: the first message the agent sends to start the conversation.\n- PreCallAPI: an API call executed before the conversation starts (for example a customer lookup). Its transitions use apiResult to branch on success or failure.\n- Dialogue: a scripted node where the agent converses with the customer.\n- HandoffChatToHuman: hands the conversation over to a human operator. Text Pearls only.\n- API: an API call executed during the conversation.\n- SMS: sends an SMS message.\n- Email: sends an email.\n- TransferCall: transfers the call to another phone number. Voice Pearls only.\n- StartCallRecording: starts recording the call from this point. Voice Pearls only. This node carries no settings.\n- SearchKnowledgeBase: searches the agent's knowledge base and returns the answer.\n- EndCall: terminates the conversation. Exactly one per flow, and every path must lead to it.\n- PostCallActions: a container whose nested actions run after the conversation ends.\n\n`2 - OpeningSentence`\n\n`3 - PreCallAPI`\n\n`10 - Dialogue`\n\n`31 - HandoffChatToHuman`\n\n`40 - API`\n\n`50 - SMS`\n\n`51 - Email`\n\n`60 - TransferCall`\n\n`65 - StartCallRecording`\n\n`80 - SearchKnowledgeBase`\n\n`100 - EndCall`\n\n`200 - PostCallActions`\n\n","format":"int32"},"transitions":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe condition that triggers this transition (for example \"the customer asks for a human agent\").\r\nMust be unique within the node: the transition id is generated from it server-side.\r\nPost-call variables are not allowed here."}]},"toNodeId":{"oneOf":[{"type":"string","description":"The NodeId of the target node."},{"type":"null","description":"The NodeId of the target node."}]},"apiResult":{"oneOf":[{"type":"integer","description":"The outcome of the pre-call API request that fires this transition. Allowed only on the transitions of a PreCallAPI node, where every transition must set it: Success leads to the opening sentence used when the pre-call API succeeds, Failure to the one used when it fails.\n\n`1 - Success`\n\n`2 - Failure`\n\n","format":"int32"},{"type":"null"}]}},"additionalProperties":false,"description":"A transition between two nodes of the conversation graph."},"description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node."},{"type":"null","description":"Outgoing transitions of the node. Each transition has a name describing the condition that triggers\r\nit and the NodeId of the target node (the transition id is generated server-side from the name).\r\n \r\nOn a PreCallAPI node, every transition must set apiResult (Success or Failure) and must lead to an\r\nOpeningSentence node."}]},"script":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes)."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes)."}]},"instructions":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nFree-form instructions that guide the agent's behavior in this node."}]},"apiSettings":{"oneOf":[{"type":"object","description":"API call configuration. Required when the node type is API or PreCallAPI.","properties":{"name":{"oneOf":[{"type":"string","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only."},{"type":"null","description":"A friendly name for this API action.\r\n \r\nMax 50 characters only."}]},"method":{"type":"integer","description":"The HTTP method used for the API request.\n\n`1 - GET`\n\n`2 - POST`\n\n`3 - PUT`\n\n`4 - DELETE`\n\n`5 - PATCH`\n\n","format":"int32"},"endpointUrl":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe endpoint URL to call.\r\n \r\nMax 4,000 characters only.\r\n \r\nVariables support depends on the node: on a PreCallAPI node only pre-call variables are available,\r\nwhile on an API node pre-call and in-call variables are available."}]},"body":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body)."},{"type":"null","description":"Request body definition (key/value pairs) for this API call.\r\n \r\nConstraints:\r\n- Only applicable for POST, PUT, or PATCH.\r\n- Must be empty for GET, DELETE (and any method that does not send a body)."}]},"headers":{"oneOf":[{"type":"object","description":"Optional HTTP headers to include in the API request.","additionalProperties":{"type":"string"}},{"type":"null","description":"Optional HTTP headers to include in the API request.","additionalProperties":{"type":"string"}}]},"description":{"oneOf":[{"type":"string","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only."},{"type":"null","description":"A short description of what this API action does.\r\n \r\nMax 150 characters only."}]},"outputBody":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"string","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."},{"type":"null","description":"The request body field name (JSON key).\r\n \r\nMax 255 characters only."}]},"variableId":{"oneOf":[{"type":"string","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."},{"type":"null","description":"The variable ID to send as the value for this field (without curly braces).\r\n \r\nConstraints:\r\n- If VariableId is provided, Type and Value must be null/empty."}]},"type":{"oneOf":[{"type":"integer","description":"The data type of the value.\n\n`1 - String`\n\n`2 - Long`\n\n`3 - Double`\n\n`4 - Boolean`\n\n`5 - DateOnly`\n\n`6 - TimeOnly`\n\n`7 - DateTime`\n\n","format":"int32"},{"type":"null"}]},"value":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe static value to send for this field.\r\n \r\nConstraints:\r\n- Max 255 characters.\r\n- Must be provided together with Type when VariableId is not provided.\r\n- Must not be provided when VariableId is provided.\r\n- When Type is String, the value may include variables using curly braces."}]},"required":{"type":"boolean","description":"Indicates whether this request body field is required."}},"additionalProperties":false},"description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation."},{"type":"null","description":"Maps fields of the API response onto flow variables, so the values returned by the API can be used\r\nlater in the conversation."}]},"credentialId":{"oneOf":[{"type":"string","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId})."},{"type":"null","description":"Optional ID of a credential used to authenticate the API call.\r\nTo retrieve the credentials available to a Pearl, use the Get Pearl Credentials endpoint (GET /v2/Pearl/Credential/{pearlId})."}]}},"additionalProperties":false},{"type":"null"}]},"smsSettings":{"oneOf":[{"type":"object","description":"SMS configuration. Required when the node type is SMS.","properties":{"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe SMS message content.\r\n \r\nConstraints:\r\n- Max 2,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]}},"additionalProperties":false},{"type":"null"}]},"emailSettings":{"oneOf":[{"type":"object","description":"Email configuration. Required when the node type is Email.","properties":{"to":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."},{"type":"null","description":"List of primary recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."}]},"cc":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."},{"type":"null","description":"List of CC recipients.\r\n \r\nConstraints:\r\n- Max 10 recipients.\r\n- Max 255 characters per email address."}]},"subject":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail subject.\r\n \r\nConstraints:\r\n- Max 150 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]},"body":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nEmail body content.\r\n \r\nConstraints:\r\n- Max 100,000 characters.\r\n- Supports pre-call and in-call variables. Inside a PostCallActions container, post-call variables are also supported."}]},"smtpSettings":{"oneOf":[{"type":"object","description":"Optional SMTP configuration used to send the email.\r\nIf not provided, the email is sent using the default platform email sender.","properties":{"id":{"oneOf":[{"type":"string","description":"Optional SMTP configuration identifier."},{"type":"null","description":"Optional SMTP configuration identifier."}]},"provider":{"oneOf":[{"type":"integer","description":"The email provider used to send the emails.\n\n`1 - Gmail`\n\n`2 - Office365`\n\n`10 - Custom`\n\n","format":"int32"},{"type":"null"}]},"smtpServer":{"oneOf":[{"type":"string","description":"SMTP server hostname."},{"type":"null","description":"SMTP server hostname."}]},"port":{"oneOf":[{"type":"integer","description":"SMTP server port.","format":"int32"},{"type":"null","description":"SMTP server port.","format":"int32"}]},"enableSsl":{"oneOf":[{"type":"boolean","description":"Indicates whether SSL/TLS is enabled for the SMTP connection."},{"type":"null","description":"Indicates whether SSL/TLS is enabled for the SMTP connection."}]},"senderEmail":{"oneOf":[{"type":"string","description":"Sender email address used for SMTP authentication and as the \"From\" address."},{"type":"null","description":"Sender email address used for SMTP authentication and as the \"From\" address."}]},"senderPassword":{"oneOf":[{"type":"string","description":"Sender password or SMTP credential used for authentication."},{"type":"null","description":"Sender password or SMTP credential used for authentication."}]},"displayName":{"oneOf":[{"type":"string","description":"Display name shown in the recipient inbox (the \"From\" name)."},{"type":"null","description":"Display name shown in the recipient inbox (the \"From\" name)."}]}},"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]},"transferCallSettings":{"oneOf":[{"type":"object","description":"Call transfer configuration. Required when the node type is TransferCall (voice Pearls only).","properties":{"transferCallPhoneNumber":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nThe destination phone number to transfer the call to.\r\nIf a variable is used, it must resolve to a valid phone number, otherwise the transfer will fail.\r\n \r\nMax 25 characters only."}]},"triggerDescription":{"oneOf":[{"type":"string","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens)."},{"type":"null","description":"Instructions describing when the agent should transfer the call (for example, when the caller asks to speak with a human).\r\n \r\nMax 500 characters only.\r\n \r\nIn a Simple Pearl, this field is required.\r\nIn a Pearl (node graph), it depends on how the TransferCall node is reached: required when the node\r\nhas no inbound transition (the agent fires the transfer based on this description), and not allowed when\r\nthe node is reached by transitions (the flow decides when the transfer happens)."}]},"warmTransferMessage":{"oneOf":[{"type":"string","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only."},{"type":"null","description":"`🧩 May support variables`\r\n \r\nOptional warm transfer message spoken by the agent when the transfer starts.\r\nIf empty, warm transfer is disabled.\r\n \r\nMax 2,000 characters only."}]},"isWhisper":{"type":"boolean","description":"The warm transfer mode. Only applies when a warm transfer message is set.\r\n \r\n- `true` (Whisper): only the recipient hears the warm transfer message, the caller stays on hold.\r\n- `false` (3-way): both the caller and the recipient hear the warm transfer message.\r\n \r\nDefaults to `false` (3-way) when omitted.\r\n \r\nSee [Transfer Call](/pages/transfer_call#transfer-types) for more information."}},"additionalProperties":false},{"type":"null"}]},"handOffAction":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."},{"type":"null","description":"Notification actions fired when the conversation is handed off to a human. Allowed only on a\r\nHandoffChatToHuman node (text Pearls only).\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."}]},"postCallActions":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."},{"type":"null","description":"Actions executed after the conversation ends. Allowed only on a PostCallActions node, which acts as\r\nthe container of these actions and is not connected to the rest of the graph.\r\n \r\nEach entry is a node object, with the same fields as the items of `nodes`, whose type is an action:\r\nSMS, Email, or API (with the matching settings object). These nested nodes are fire-and-forget\r\nactions: they cannot have transitions, nor nested lists of their own."}]}},"additionalProperties":false,"description":"A node of the Pearl's conversation graph.\r\nThe settings object matching the node type must be provided (for example ApiSettings for an API node).\r\nA StartCallRecording node is the exception: it carries no settings, its presence alone starts the recording."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","description":"Specify the authorization token.\n\nFor more information, check out the [Authorization Guide](/api-reference/authorization).","scheme":"bearer","scopes":[],"schemeName":"bearer_auth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Specify the authorization token.\n\nFor more information, check out the [Authorization Guide](/api-reference/authorization).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearer_auth","name":"Authorization"}],"title":"bearer_auth"},{"schemes":[{"scheme":{"type":"oauth2","description":"OAuth2 client_credentials grant. Use the Id of an OAuth API key as `client_id` and its one-time secret as `client_secret`.","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"pearls:read":"List and view Pearls","pearls:write":"Create and update Pearls (settings, conversation flows, voices); implies pearls:read","pearls:moderate":"Run/pause Pearls and reset customer memory; implies pearls:read","pearls:analytics":"Read Pearl analytics; implies pearls:read","pearls:leads":"Manage and read outbound leads; implies pearls:read","pearls:calls":"Read calls and recordings, make and delete calls; implies pearls:read","account:phone_numbers":"Read account phone numbers and text channels, manage custom VoIP numbers, import Twilio numbers and delete phone numbers","account:users":"Read account users","account:advanced":"Manage advanced account settings (blacklist)","account:billing":"Read account information and credit balance","account:audit_log":"Read the audit log","tts":"Synthesise speech and clone voices"}}},"scopes":[],"schemeName":"oauth2_client_credentials"},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"OAuth2 client_credentials grant. Use the Id of an OAuth API key as `client_id` and its one-time secret as `client_secret`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"oauth2_client_credentials","name":"Authorization"}],"title":"oauth2_client_credentials"}]},"originalFileLocation":"api-reference/v2/openapiV2.json"},"subdomain":"nlpearl","siteName":"NLPearl Documentation","title":"Update Text Pearl - NLPearl Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-19T11:48:57.995Z","originalFileLocation":"api-reference/v2/pearlFlow/update-text-pearl.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=\"Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click here.\">\u003cmeta data-mint-head name=\"application-name\" content=\"NLPearl Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/nlpearl/2yr4wWhG2kiDMCwL/_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/nlpearl/2yr4wWhG2kiDMCwL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/nlpearl/2yr4wWhG2kiDMCwL/_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/nlpearl/2yr4wWhG2kiDMCwL/_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/nlpearl/2yr4wWhG2kiDMCwL/_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/nlpearl/2yr4wWhG2kiDMCwL/_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/nlpearl/2yr4wWhG2kiDMCwL/_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/nlpearl/2yr4wWhG2kiDMCwL/_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/nlpearl/2yr4wWhG2kiDMCwL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update Text Pearl - NLPearl Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click here.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"NLPearl Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://nlpearl.mintlify.app/_mintlify/api/og/v2?division=Pearl+Configurations\u0026amp;title=Update+Text+Pearl\u0026amp;description=Updates+a+text+Pearl.+Only+the+provided+parts+are+updated%3A+pearl+replaces+the+whole+conversation+flow+%28send+the+complete+node+graph%29%2C+inbound%2Foutbound+partially\u0026amp;theme=1048d0b5fa94cf7eed8d4a4d\u0026amp;signature=773048dabf1e18a6bc72d445715147f38f1aa42fbc4a9489eae5e7a98b3e72ed\">\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=\"Update Text Pearl - NLPearl Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click here.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://nlpearl.mintlify.app/_mintlify/api/og/v2?division=Pearl+Configurations\u0026amp;title=Update+Text+Pearl\u0026amp;description=Updates+a+text+Pearl.+Only+the+provided+parts+are+updated%3A+pearl+replaces+the+whole+conversation+flow+%28send+the+complete+node+graph%29%2C+inbound%2Foutbound+partially\u0026amp;theme=1048d0b5fa94cf7eed8d4a4d\u0026amp;signature=773048dabf1e18a6bc72d445715147f38f1aa42fbc4a9489eae5e7a98b3e72ed\">\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/nlpearl/2yr4wWhG2kiDMCwL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"NLPearl Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#111111\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/v2/pearlFlow/update-text-pearl.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.nlpearl.ai/#organization\",\"name\":\"NLPearl Documentation\",\"url\":\"https://developers.nlpearl.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/nlpearl/DSJnNLmkdffV1qq-/images/light_mode/logo_dark.png?fit=max\u0026auto=format\u0026n=DSJnNLmkdffV1qq-\u0026q=85\u0026s=a0f34eb8d06f12c8f03693ffc4dfffeb\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.nlpearl.ai#website\",\"name\":\"NLPearl Documentation\",\"url\":\"https://developers.nlpearl.ai\",\"publisher\":{\"@id\":\"https://developers.nlpearl.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl#webpage\",\"url\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl\",\"name\":\"Update Text Pearl\",\"description\":\"Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click here.\",\"dateModified\":\"2026-10-19T11:48:57.995Z\",\"isPartOf\":{\"@id\":\"https://developers.nlpearl.ai#website\"},\"breadcrumb\":{\"@id\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API V2\",\"item\":\"https://developers.nlpearl.ai/api-reference/v2/account/get-account\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pearl Configurations\",\"item\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/get-pearl-flow\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Update Text Pearl\",\"item\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl#apireference\",\"headline\":\"Update Text Pearl\",\"name\":\"Update Text Pearl\",\"description\":\"Updates a text Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied; when TextChannelId is omitted, the current channel is kept). Omitted parts are kept unchanged. The Pearl must be a text Pearl (AgentType = Text). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. On an outbound Pearl that is not paused, when the update replaces the flow or sets the outbound TextChannelId and the channel the Pearl will send on is WhatsApp, every opening sentence must match an approved WhatsApp template (case, spacing and punctuation are ignored): otherwise nothing is updated and the 400 names each opening sentence that has no template. A paused Pearl is checked when it is run. For more details, click here.\",\"url\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl\",\"mainEntityOfPage\":{\"@id\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/update-text-pearl#webpage\"},\"dateModified\":\"2026-10-19T11:48:57.995Z\",\"publisher\":{\"@id\":\"https://developers.nlpearl.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.nlpearl.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"NLPearl Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"NLPearl Documentation","nav":{"global":null,"tabs":[{"tab":"Docs","pages":[{"title":"Docs","href":"/pages/introduction"}]},{"tab":"API Reference","groups":[{"group":"Getting Started","expanded":true,"pages":[{"title":"Quick Start","icon":"rocket","iconType":"light","href":"/api-reference/api_quickstart"},{"group":"API Authorization","icon":"lock","root":{"title":"API Authorization","sidebarTitle":"Overview","icon":"key","iconType":"light","href":"/api-reference/authorization"},"expanded":true,"pages":[{"title":"API Secret Key","icon":"key","iconType":"light","href":"/api-reference/api_secret_key"},{"title":"OAuth 2.0","icon":"shield-check","iconType":"light","href":"/api-reference/oauth"}]},{"title":"Pearl Flow Variables Guidance","icon":"square-root-variable","iconType":"light","href":"/api-reference/flow_variables"},{"title":"Building a Pearl Flow","icon":"diagram-project","iconType":"light","href":"/api-reference/building_a_flow"},{"title":"Python Wrapper","icon":"python","iconType":"brands","href":"/api-reference/python_wrapper"}]},{"group":"API V2","tag":"latest","expanded":true,"pages":[{"group":"Account","expanded":true,"pages":[{"openapi":"get /v2/Account","title":"Get Account","href":"/api-reference/v2/account/get-account"},{"openapi":"get /v2/Account/Users","title":"Get Users","href":"/api-reference/v2/account/get-account-users"},{"openapi":"post /v2/Account/AuditLog","title":"Get Audit Log","href":"/api-reference/v2/account/get-audit-log"},{"openapi":"get /v2/Account/Voices","title":"Get Voices","href":"/api-reference/v2/pearlSettings/get-voices"},{"openapi":"get /v2/Account/PhoneNumbers","title":"Get Phone Numbers","href":"/api-reference/v2/pearlSettings/get-phones"},{"openapi":"get /v2/Account/TextChannels","title":"Get Text Channels","href":"/api-reference/v2/pearlSettings/get-text-channels"},{"openapi":"post /v2/Account/Blacklist/Search","title":"Search Blacklist","href":"/api-reference/v2/account/search-blacklist"},{"openapi":"post /v2/Account/Blacklist","title":"Add Phone Numbers To Blacklist","href":"/api-reference/v2/account/add-to-blacklist"},{"openapi":"post /v2/Account/Blacklist/Remove","title":"Remove Phone Numbers From Blacklist","href":"/api-reference/v2/account/remove-from-blacklist"}]},{"group":"Phone Number","expanded":true,"pages":[{"openapi":"post /v2/PhoneNumber/CustomVoip","title":"Create Custom VoIP Number","href":"/api-reference/v2/phoneNumber/create-custom-voip"},{"openapi":"put /v2/PhoneNumber/CustomVoip/{phoneNumberId}","title":"Update Custom VoIP Number","href":"/api-reference/v2/phoneNumber/update-custom-voip"},{"openapi":"post /v2/PhoneNumber/Twilio/List","title":"List Twilio Phone Numbers","href":"/api-reference/v2/phoneNumber/list-twilio-phone-numbers"},{"openapi":"post /v2/PhoneNumber/Twilio/Import","title":"Import Twilio Phone Number","href":"/api-reference/v2/phoneNumber/import-twilio-phone-number"},{"openapi":"delete /v2/PhoneNumber/{phoneNumberId}","title":"Delete Phone Number","href":"/api-reference/v2/phoneNumber/delete-phone-number"}]},{"group":"Call","expanded":true,"pages":[{"openapi":"get /v2/Call/{callId}","title":"Get Call","href":"/api-reference/v2/call/get-call"},{"openapi":"get /v2/Recording/{clientId}/{pearlId}/{callId}","title":"Get Call Recording","href":"/api-reference/v2/call/get-recording"},{"openapi":"delete /v2/Call","title":"Delete Calls","href":"/api-reference/v2/call/delete-call"}]},{"group":"Pearl","expanded":true,"pages":[{"openapi":"get /v2/Pearl","title":"Get Pearls","href":"/api-reference/v2/pearl/get-pearls"},{"openapi":"get /v2/Pearl/{pearlId}","title":"Get Pearl","href":"/api-reference/v2/pearl/get-pearl"},{"openapi":"put /v2/Pearl/{pearlId}/Active","title":"Set Activity State","href":"/api-reference/v2/pearl/set-activity-state"},{"openapi":"post /v2/Pearl/{pearlId}/Calls","title":"Get Calls","href":"/api-reference/v2/pearl/get-calls"},{"openapi":"post /v2/Pearl/{pearlId}/Calls/Bulk","title":"Get Calls Bulk","href":"/api-reference/v2/pearl/get-calls-bulk"},{"openapi":"get /v2/Pearl/{pearlId}/OngoingCalls","title":"Get Ongoing Calls","href":"/api-reference/v2/pearl/get-ongoing-calls"},{"openapi":"post /v2/Pearl/{pearlId}/Analytics","title":"Get Analytics","href":"/api-reference/v2/pearl/get-analytics"},{"openapi":"put /v2/Pearl/{pearlId}/ResetMemory","title":"Reset Customer Memory","href":"/api-reference/v2/pearl/reset-memory"}]},{"group":"Pearl Configurations","expanded":true,"pages":[{"openapi":"get /v2/Pearl/{pearlId}/Settings","title":"Get Pearl Settings","href":"/api-reference/v2/pearlFlow/get-pearl-flow"},{"openapi":"post /v2/Pearl","title":"Create Pearl","href":"/api-reference/v2/pearlFlow/add-pearl-flow"},{"openapi":"post /v2/Pearl/Voice","title":"Create Voice Pearl","href":"/api-reference/v2/pearlFlow/add-voice-pearl"},{"openapi":"post /v2/Pearl/Text","title":"Create Text Pearl","href":"/api-reference/v2/pearlFlow/add-text-pearl"},{"openapi":"put /v2/Pearl/{pearlId}","title":"Update Pearl","href":"/api-reference/v2/pearlFlow/update-pearl-flow"},{"openapi":"put /v2/Pearl/Voice/{pearlId}","title":"Update Voice Pearl","description":"Updates a voice Pearl. Only the provided parts are updated: pearl replaces the whole conversation flow (send the complete node graph), inbound/outbound partially update the channel settings (only the fields present in the JSON are applied). Omitted parts are kept unchanged. The Pearl must be a voice Pearl (AgentType = Voice). The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified. For more details, click [here](/api-reference/building_a_flow).","href":"/api-reference/v2/pearlFlow/update-voice-pearl"},{"openapi":"put /v2/Pearl/Text/{pearlId}","title":"Update Text Pearl","href":"/api-reference/v2/pearlFlow/update-text-pearl"},{"openapi":"put /v2/Pearl/{pearlId}/Settings/Inbound","title":"Update Inbound Settings","description":"Updates the inbound settings for the specified Pearl. The update applies to the published version of the Pearl: if several versions exist on the platform, only the currently published one is modified.","href":"/api-reference/v2/pearlFlow/update-pearl-inbound"},{"openapi":"put /v2/Pearl/{pearlId}/Settings/Outbound","title":"Update Outbound Settings","href":"/api-reference/v2/pearlFlow/update-pearl-outbound"},{"openapi":"get /v2/Pearl/Credential/{pearlId}","title":"Get Pearl Credentials","href":"/api-reference/v2/pearlFlow/get-pearl-credentials"}]},{"group":"Outbound","expanded":true,"pages":[{"openapi":"post /v2/Outbound/{pearlId}/Lead","title":"Add Lead","href":"/api-reference/v2/outbound/add-lead"},{"openapi":"post /v2/Outbound/{pearlId}/Leads/Add","title":"Add Leads","href":"/api-reference/v2/outbound/add-leads"},{"openapi":"put /v2/Outbound/{pearlId}/Lead/{leadId}","title":"Update Lead","href":"/api-reference/v2/outbound/update-lead"},{"openapi":"get /v2/Outbound/{pearlId}/Lead/{leadId}","title":"Get Lead","href":"/api-reference/v2/outbound/get-lead"},{"openapi":"get /v2/Outbound/{pearlId}/Lead/External/{externalId}","title":"Get Lead Via External ID","href":"/api-reference/v2/outbound/get-lead-via-external-id"},{"openapi":"get /v2/Outbound/{pearlId}/Lead/PhoneNumber/{phoneNumber}","title":"Find Lead Via Phone Number","href":"/api-reference/v2/outbound/get-lead-via-phone-number"},{"openapi":"post /v2/Outbound/{pearlId}/Leads","title":"Search Leads","href":"/api-reference/v2/outbound/search-leads"},{"openapi":"delete /v2/Outbound/{pearlId}/Leads","title":"Delete Leads","href":"/api-reference/v2/outbound/delete-leads"},{"openapi":"delete /v2/Outbound/{pearlId}/Leads/External","title":"Delete leads Via External","href":"/api-reference/v2/outbound/delete-leads-external-id"}]},{"group":"Speech","expanded":true,"pages":[{"openapi":"post /v2/Speech","title":"Text to Speech","href":"/api-reference/v2/speech/text-to-speech"},{"openapi":"post /v2/Speech/Stream","title":"Text to Speech (Streaming)","href":"/api-reference/v2/speech/text-to-speech-stream"},{"openapi":"post /v2/Speech/Clone","title":"Clone a Voice","href":"/api-reference/v2/speech/clone-voice"}]}]},{"group":"API V1","tag":"legacy","pages":[{"group":"Account","pages":[{"openapi":"get /v1/Account","title":"Get Account","href":"/api-reference/v1/account/get-account"}]},{"group":"Call","pages":[{"openapi":"get /v1/Call/{callId}","title":"Get Call","href":"/api-reference/v1/call/get-call"},{"openapi":"delete /v1/Call","title":"Delete Calls","href":"/api-reference/v1/call/delete-call"}]},{"group":"Pearl","pages":[{"openapi":"put /v1/Pearl/{pearlId}/Memory/{phoneNumber}/Reset","title":"Reset Customer Memory","href":"/api-reference/v1/pearl/reset-memory"}]},{"group":"Inbound","pages":[{"openapi":"get /v1/Inbound","title":"Get Inbounds","href":"/api-reference/v1/inbound/get-inbounds"},{"openapi":"get /v1/Inbound/{inboundId}","title":"Get Inbound","href":"/api-reference/v1/inbound/get-inbound"},{"openapi":"get /v1/Inbound/{inboundId}/OngoingCalls","title":"Get Inbound Ongoing Calls","href":"/api-reference/v1/inbound/get-inbound-ongoing-calls"},{"openapi":"post /v1/Inbound/{inboundId}/Active","title":"Set Activity State","href":"/api-reference/v1/inbound/set-activity-state"},{"openapi":"post /v1/Inbound/{inboundId}/Calls","title":"Search Calls","href":"/api-reference/v1/inbound/search-calls"},{"openapi":"post /v1/Inbound/{inboundId}/Analytics","title":"Get Analytics","href":"/api-reference/v1/inbound/get-analytics"}]},{"group":"Outbound","pages":[{"openapi":"get /v1/Outbound","title":"Get Outbounds","href":"/api-reference/v1/outbound/get-outbounds"},{"openapi":"get /v1/Outbound/{outboundId}","title":"Get Outbound","href":"/api-reference/v1/outbound/get-outbound"},{"openapi":"get /v1/Outbound/{outboundId}/Lead/{leadId}","title":"Get Lead","href":"/api-reference/v1/outbound/get-lead"},{"openapi":"get /v1/Outbound/{outboundId}/Lead/External/{externalId}","title":"Get Lead via External ID","href":"/api-reference/v1/outbound/get-lead-via-external-id"},{"openapi":"get /v1/Outbound/{outboundId}/Lead/PhoneNumber/{phoneNumber}","title":"Get Lead via Phone Number","href":"/api-reference/v1/outbound/get-lead-via-phone-number"},{"openapi":"get /v1/Outbound/CallRequest/{requestId}","title":"Get Call Request","href":"/api-reference/v1/outbound/get-call-request"},{"openapi":"post /v1/Outbound/{outboundId}/Analytics","title":"Get Analytics","href":"/api-reference/v1/outbound/get-analytics"},{"openapi":"post /v1/Outbound/{outboundId}/Active","title":"Set Activity State","href":"/api-reference/v1/outbound/set-activity-state"},{"openapi":"post /v1/Outbound/{outboundId}/Calls","title":"Search Calls","href":"/api-reference/v1/outbound/search-calls"},{"openapi":"post /v1/Outbound/{outboundId}/Leads","title":"Search Leads","href":"/api-reference/v1/outbound/search-leads"},{"openapi":"post /v1/Outbound/{outboundId}/Call","title":"Make Call","href":"/api-reference/v1/outbound/make-call"},{"openapi":"post /v1/Outbound/{outboundId}/CallRequest","title":"Search Call Requests","href":"/api-reference/v1/outbound/search-call-requests"},{"openapi":"put /v1/Outbound/{outboundId}/Lead","title":"Add Lead","href":"/api-reference/v1/outbound/add-lead"},{"openapi":"put /v1/Outbound/{outboundId}/Lead/{leadId}","title":"Update Lead","href":"/api-reference/v1/outbound/update-lead"},{"openapi":"delete /v1/Outbound/{outboundId}/Leads","title":"Delete Leads","href":"/api-reference/v1/outbound/delete-leads"},{"openapi":"delete /v1/Outbound/{outboundId}/Leads/External","title":"Delete leads Via External","href":"/api-reference/v1/outbound/delete-leads-external-id"}]}]}]}]},"title":"Update Text Pearl - NLPearl Documentation","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["10e4515597","c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["BannerMarkdown-cfwQA_n9.js","dist-2LoAhjKH.js","lib--scc4DXi.js","lib-B8HbPgcC.js","clsx-DZLdJUrt.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-Bbp7I60D.js","utils-C3RIvJha.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DqD-vLt8.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B31Loprg.js","snippetPresets-DKpk-b8t.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-n7I5XbKb.js","ApiExamples-Cj65AhOR.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BXtn5gcC.js","shallow-RY2b03Cp.js","getApiPlaygroundDisplay-B0jeiPk3.js","CodeSnippet-CYgBjjwn.js","CodeSnippets-DOngDrYB.js","getPastedJson-DRQbJx-T.js","icon-CQiQCicY.js","MethodPill-BKTLdNtu.js","DuplicateIcon-B9jpAdat.js","createIcon-DCddRrXv.js","DynamicMarkdown-a8hUKrw6.js","SectionHeading-eECVV2eH.js","axios-vUo_bRtp.js","Markdown--GF7ZIpf.js","AssistantPageLink-Zwc0ZncM.js"]}