Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. For more details, click here.
Variables that can be defined, stored, and used by the agent during conversations.
For details on variable groups and how to use variables in supported fields, see: Flow Variables
{"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/add-text-pearl","slug":"/api-reference/v2/pearlFlow/add-text-pearl","pageMetadata":{"openapi":"post /v2/Pearl/Text","title":"Create Text Pearl","description":"Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. For more details, click [here](/api-reference/building_a_flow).","href":"/api-reference/v2/pearlFlow/add-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: [\"Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. 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":"post /v2/Pearl/Text","title":"Create Text Pearl","description":"Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. For more details, click [here](/api-reference/building_a_flow).","href":"/api-reference/v2/pearlFlow/add-text-pearl"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Pearl"],"summary":"Create Text Pearl","description":"Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. For more details, click [here](/api-reference/building_a_flow).","requestBody":"a5cbffb8-3f92-4bd1-b711-4c7684106b61","responses":{"200":"345d0036-08f1-43bf-aa32-8613ba8b6633","400":"d8214d53-b804-4fde-bcd4-b033dafabf42"},"method":"post","type":"path","servers":["31330d28-5e54-49c3-a09a-2d05db9b1d8c"],"security":["5fa4ed7a-1df3-4139-95c8-ed349099ff1a","8c5918d2-96d7-4250-9504-fe7b9e421590"],"path":"/v2/Pearl/Text","baseUrlOptions":["https://api.nlpearl.ai"],"title":"Create Text Pearl","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"The name of the Pearl.","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the Pearl.","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"pearl":{"oneOf":[{"type":"object","description":"Conversation flow (node graph) and agent behavior configuration for the Pearl.","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.\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.\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":"Inbound text settings for the Pearl. Required when creating an inbound Pearl. Must not be provided together with Outbound.","properties":{"totalAgents":{"type":"integer","description":"Total number of agents allocated to this inbound activity.","format":"int32","uniqueKey":"inbound.oneOf.0.totalAgents","typeLabel":"integer\u003cint32>"},"transcriptOptions":{"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","typeLabel":"integer\u003cint32>"},"callWebhookUrl":{"oneOf":[{"type":"string","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"inbound.oneOf.0.callWebhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"inbound.oneOf.0.callWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.callWebhookUrl","typeLabel":"string | null"},"textChannelId":{"oneOf":[{"type":"string","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"inbound.oneOf.0.textChannelId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"inbound.oneOf.0.textChannelId.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.textChannelId","typeLabel":"string | null"},"maxTurns":{"oneOf":[{"type":"integer","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.maxTurns","typeLabel":"integer\u003cint32> | null"},"autoCloseAfterInactivityHours":{"oneOf":[{"type":"integer","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"integer\u003cint32> | null"},"inactivityFollowUps":{"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.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.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.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.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.oneOf.0.items.[INDEX]","typeLabel":"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.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.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."},"description":"Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps","typeLabel":"object[] | null"},"responseDelaySeconds":{"oneOf":[{"type":"integer","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.responseDelaySeconds","typeLabel":"integer\u003cint32> | null"}},"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":"Outbound text settings for the Pearl. Required when creating an outbound Pearl. Must not be provided together with Inbound.","properties":{"totalAgents":{"type":"integer","description":"Total number of agents allocated to this outbound activity.","format":"int32","uniqueKey":"outbound.oneOf.0.totalAgents","typeLabel":"integer\u003cint32>"},"transcriptOptions":{"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","typeLabel":"integer\u003cint32>"},"budgetTotal":{"oneOf":[{"type":"integer","description":"Total budget allocated for the outbound activity.\r\nIf null, the outbound activity runs without a budget limit.","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Total budget allocated for the outbound activity.\r\nIf null, the outbound activity runs without a budget limit.","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.budgetTotal","typeLabel":"integer\u003cint32> | null"},"timeZone":{"oneOf":[{"type":"string","description":"Default time zone for the outbound activity.\r\n \r\nLeads are called according to this time zone unless a lead-specific time zone is provided when adding leads.\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":"outbound.oneOf.0.timeZone.oneOf.0","typeLabel":"string"},{"type":"null","description":"Default time zone for the outbound activity.\r\n \r\nLeads are called according to this time zone unless a lead-specific time zone is provided when adding leads.\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":"outbound.oneOf.0.timeZone.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.timeZone","typeLabel":"string | null"},"callingHours":{"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.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.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.oneOf.0.items.[INDEX].end","typeLabel":"string\u003cdate-span>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callingHours.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Allowed calling hours for the outbound activity.","uniqueKey":"outbound.oneOf.0.callingHours.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},"description":"Allowed calling hours for the outbound activity.","uniqueKey":"outbound.oneOf.0.callingHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callingHours","typeLabel":"object[] | null"},"callWebhookUrl":{"oneOf":[{"type":"string","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"outbound.oneOf.0.callWebhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"outbound.oneOf.0.callWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callWebhookUrl","typeLabel":"string | null"},"leadWebhookUrl":{"oneOf":[{"type":"string","description":"Optional webhook URL to receive lead events (for example lead created/updated).","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional webhook URL to receive lead events (for example lead created/updated).","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.leadWebhookUrl","typeLabel":"string | null"},"textChannelId":{"oneOf":[{"type":"string","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"outbound.oneOf.0.textChannelId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"outbound.oneOf.0.textChannelId.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.textChannelId","typeLabel":"string | null"},"maxTurns":{"oneOf":[{"type":"integer","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.maxTurns","typeLabel":"integer\u003cint32> | null"},"autoCloseAfterInactivityHours":{"oneOf":[{"type":"integer","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"integer\u003cint32> | null"},"inactivityFollowUps":{"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.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.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.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.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.oneOf.0.items.[INDEX]","typeLabel":"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.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.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."},"description":"Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps","typeLabel":"object[] | null"},"responseDelaySeconds":{"oneOf":[{"type":"integer","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.responseDelaySeconds","typeLabel":"integer\u003cint32> | null"}},"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":123,"transcriptOptions":123,"callWebhookUrl":"\u003cstring>","textChannelId":"\u003cstring>","maxTurns":123,"autoCloseAfterInactivityHours":123,"inactivityFollowUps":[{"delayMinutes":123,"message":"\u003cstring>"}],"responseDelaySeconds":123},"outbound":{"totalAgents":123,"transcriptOptions":123,"budgetTotal":123,"timeZone":"\u003cstring>","callingHours":[{"day":123,"start":"\u003cstring>","end":"\u003cstring>"}],"callWebhookUrl":"\u003cstring>","leadWebhookUrl":"\u003cstring>","textChannelId":"\u003cstring>","maxTurns":123,"autoCloseAfterInactivityHours":123,"inactivityFollowUps":[{"delayMinutes":123,"message":"\u003cstring>"}],"responseDelaySeconds":123}}}},"exampleType":"generated"},"text/json":{"schema":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"The name of the Pearl.","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the Pearl.","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"pearl":{"oneOf":[{"type":"object","description":"Conversation flow (node graph) and agent behavior configuration for the Pearl.","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.\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.\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":"Inbound text settings for the Pearl. Required when creating an inbound Pearl. Must not be provided together with Outbound.","properties":{"totalAgents":{"type":"integer","description":"Total number of agents allocated to this inbound activity.","format":"int32","uniqueKey":"inbound.oneOf.0.totalAgents","typeLabel":"integer\u003cint32>"},"transcriptOptions":{"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","typeLabel":"integer\u003cint32>"},"callWebhookUrl":{"oneOf":[{"type":"string","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"inbound.oneOf.0.callWebhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"inbound.oneOf.0.callWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.callWebhookUrl","typeLabel":"string | null"},"textChannelId":{"oneOf":[{"type":"string","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"inbound.oneOf.0.textChannelId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"inbound.oneOf.0.textChannelId.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.textChannelId","typeLabel":"string | null"},"maxTurns":{"oneOf":[{"type":"integer","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.maxTurns","typeLabel":"integer\u003cint32> | null"},"autoCloseAfterInactivityHours":{"oneOf":[{"type":"integer","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"integer\u003cint32> | null"},"inactivityFollowUps":{"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.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.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.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.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.oneOf.0.items.[INDEX]","typeLabel":"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.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.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."},"description":"Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps","typeLabel":"object[] | null"},"responseDelaySeconds":{"oneOf":[{"type":"integer","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.responseDelaySeconds","typeLabel":"integer\u003cint32> | null"}},"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":"Outbound text settings for the Pearl. Required when creating an outbound Pearl. Must not be provided together with Inbound.","properties":{"totalAgents":{"type":"integer","description":"Total number of agents allocated to this outbound activity.","format":"int32","uniqueKey":"outbound.oneOf.0.totalAgents","typeLabel":"integer\u003cint32>"},"transcriptOptions":{"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","typeLabel":"integer\u003cint32>"},"budgetTotal":{"oneOf":[{"type":"integer","description":"Total budget allocated for the outbound activity.\r\nIf null, the outbound activity runs without a budget limit.","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Total budget allocated for the outbound activity.\r\nIf null, the outbound activity runs without a budget limit.","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.budgetTotal","typeLabel":"integer\u003cint32> | null"},"timeZone":{"oneOf":[{"type":"string","description":"Default time zone for the outbound activity.\r\n \r\nLeads are called according to this time zone unless a lead-specific time zone is provided when adding leads.\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":"outbound.oneOf.0.timeZone.oneOf.0","typeLabel":"string"},{"type":"null","description":"Default time zone for the outbound activity.\r\n \r\nLeads are called according to this time zone unless a lead-specific time zone is provided when adding leads.\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":"outbound.oneOf.0.timeZone.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.timeZone","typeLabel":"string | null"},"callingHours":{"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.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.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.oneOf.0.items.[INDEX].end","typeLabel":"string\u003cdate-span>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callingHours.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Allowed calling hours for the outbound activity.","uniqueKey":"outbound.oneOf.0.callingHours.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},"description":"Allowed calling hours for the outbound activity.","uniqueKey":"outbound.oneOf.0.callingHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callingHours","typeLabel":"object[] | null"},"callWebhookUrl":{"oneOf":[{"type":"string","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"outbound.oneOf.0.callWebhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"outbound.oneOf.0.callWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callWebhookUrl","typeLabel":"string | null"},"leadWebhookUrl":{"oneOf":[{"type":"string","description":"Optional webhook URL to receive lead events (for example lead created/updated).","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional webhook URL to receive lead events (for example lead created/updated).","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.leadWebhookUrl","typeLabel":"string | null"},"textChannelId":{"oneOf":[{"type":"string","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"outbound.oneOf.0.textChannelId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"outbound.oneOf.0.textChannelId.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.textChannelId","typeLabel":"string | null"},"maxTurns":{"oneOf":[{"type":"integer","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.maxTurns","typeLabel":"integer\u003cint32> | null"},"autoCloseAfterInactivityHours":{"oneOf":[{"type":"integer","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"integer\u003cint32> | null"},"inactivityFollowUps":{"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.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.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.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.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.oneOf.0.items.[INDEX]","typeLabel":"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.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.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."},"description":"Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps","typeLabel":"object[] | null"},"responseDelaySeconds":{"oneOf":[{"type":"integer","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.responseDelaySeconds","typeLabel":"integer\u003cint32> | null"}},"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":123,"transcriptOptions":123,"callWebhookUrl":"\u003cstring>","textChannelId":"\u003cstring>","maxTurns":123,"autoCloseAfterInactivityHours":123,"inactivityFollowUps":[{"delayMinutes":123,"message":"\u003cstring>"}],"responseDelaySeconds":123},"outbound":{"totalAgents":123,"transcriptOptions":123,"budgetTotal":123,"timeZone":"\u003cstring>","callingHours":[{"day":123,"start":"\u003cstring>","end":"\u003cstring>"}],"callWebhookUrl":"\u003cstring>","leadWebhookUrl":"\u003cstring>","textChannelId":"\u003cstring>","maxTurns":123,"autoCloseAfterInactivityHours":123,"inactivityFollowUps":[{"delayMinutes":123,"message":"\u003cstring>"}],"responseDelaySeconds":123}}}},"exampleType":"generated"},"application/*+json":{"schema":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","description":"The name of the Pearl.","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the Pearl.","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"pearl":{"oneOf":[{"type":"object","description":"Conversation flow (node graph) and agent behavior configuration for the Pearl.","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.\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.\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":"Inbound text settings for the Pearl. Required when creating an inbound Pearl. Must not be provided together with Outbound.","properties":{"totalAgents":{"type":"integer","description":"Total number of agents allocated to this inbound activity.","format":"int32","uniqueKey":"inbound.oneOf.0.totalAgents","typeLabel":"integer\u003cint32>"},"transcriptOptions":{"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","typeLabel":"integer\u003cint32>"},"callWebhookUrl":{"oneOf":[{"type":"string","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"inbound.oneOf.0.callWebhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"inbound.oneOf.0.callWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.callWebhookUrl","typeLabel":"string | null"},"textChannelId":{"oneOf":[{"type":"string","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"inbound.oneOf.0.textChannelId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"inbound.oneOf.0.textChannelId.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.textChannelId","typeLabel":"string | null"},"maxTurns":{"oneOf":[{"type":"integer","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"inbound.oneOf.0.maxTurns.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.maxTurns","typeLabel":"integer\u003cint32> | null"},"autoCloseAfterInactivityHours":{"oneOf":[{"type":"integer","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"integer\u003cint32> | null"},"inactivityFollowUps":{"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.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.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.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps.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.oneOf.0.items.[INDEX]","typeLabel":"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.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.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."},"description":"Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message.","uniqueKey":"inbound.oneOf.0.inactivityFollowUps.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.inactivityFollowUps","typeLabel":"object[] | null"},"responseDelaySeconds":{"oneOf":[{"type":"integer","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"inbound.oneOf.0.responseDelaySeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"inbound.oneOf.0.responseDelaySeconds","typeLabel":"integer\u003cint32> | null"}},"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":"Outbound text settings for the Pearl. Required when creating an outbound Pearl. Must not be provided together with Inbound.","properties":{"totalAgents":{"type":"integer","description":"Total number of agents allocated to this outbound activity.","format":"int32","uniqueKey":"outbound.oneOf.0.totalAgents","typeLabel":"integer\u003cint32>"},"transcriptOptions":{"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","typeLabel":"integer\u003cint32>"},"budgetTotal":{"oneOf":[{"type":"integer","description":"Total budget allocated for the outbound activity.\r\nIf null, the outbound activity runs without a budget limit.","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Total budget allocated for the outbound activity.\r\nIf null, the outbound activity runs without a budget limit.","format":"int32","uniqueKey":"outbound.oneOf.0.budgetTotal.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.budgetTotal","typeLabel":"integer\u003cint32> | null"},"timeZone":{"oneOf":[{"type":"string","description":"Default time zone for the outbound activity.\r\n \r\nLeads are called according to this time zone unless a lead-specific time zone is provided when adding leads.\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":"outbound.oneOf.0.timeZone.oneOf.0","typeLabel":"string"},{"type":"null","description":"Default time zone for the outbound activity.\r\n \r\nLeads are called according to this time zone unless a lead-specific time zone is provided when adding leads.\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":"outbound.oneOf.0.timeZone.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.timeZone","typeLabel":"string | null"},"callingHours":{"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.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.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.oneOf.0.items.[INDEX].end","typeLabel":"string\u003cdate-span>"}},"additionalProperties":false,"uniqueKey":"outbound.oneOf.0.callingHours.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Allowed calling hours for the outbound activity.","uniqueKey":"outbound.oneOf.0.callingHours.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},"description":"Allowed calling hours for the outbound activity.","uniqueKey":"outbound.oneOf.0.callingHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callingHours","typeLabel":"object[] | null"},"callWebhookUrl":{"oneOf":[{"type":"string","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"outbound.oneOf.0.callWebhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional webhook URL to receive call events (for example call started and call ended).","uniqueKey":"outbound.oneOf.0.callWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.callWebhookUrl","typeLabel":"string | null"},"leadWebhookUrl":{"oneOf":[{"type":"string","description":"Optional webhook URL to receive lead events (for example lead created/updated).","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional webhook URL to receive lead events (for example lead created/updated).","uniqueKey":"outbound.oneOf.0.leadWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.leadWebhookUrl","typeLabel":"string | null"},"textChannelId":{"oneOf":[{"type":"string","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"outbound.oneOf.0.textChannelId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The text channel ID to use for this Pearl.\r\nTo retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels).","uniqueKey":"outbound.oneOf.0.textChannelId.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.textChannelId","typeLabel":"string | null"},"maxTurns":{"oneOf":[{"type":"integer","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Message limit: maximum number of agent messages per conversation. When the limit is reached, the conversation is closed.\r\nIf null, the default limit applies.","format":"int32","uniqueKey":"outbound.oneOf.0.maxTurns.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.maxTurns","typeLabel":"integer\u003cint32> | null"},"autoCloseAfterInactivityHours":{"oneOf":[{"type":"integer","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Number of hours of customer inactivity after which the conversation is automatically closed.","format":"int32","uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.autoCloseAfterInactivityHours","typeLabel":"integer\u003cint32> | null"},"inactivityFollowUps":{"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.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.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.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps.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.oneOf.0.items.[INDEX]","typeLabel":"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.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.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."},"description":"Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message.","uniqueKey":"outbound.oneOf.0.inactivityFollowUps.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.inactivityFollowUps","typeLabel":"object[] | null"},"responseDelaySeconds":{"oneOf":[{"type":"integer","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","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. If null or 0, the agent replies as soon as possible.","format":"int32","uniqueKey":"outbound.oneOf.0.responseDelaySeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"outbound.oneOf.0.responseDelaySeconds","typeLabel":"integer\u003cint32> | null"}},"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":123,"transcriptOptions":123,"callWebhookUrl":"\u003cstring>","textChannelId":"\u003cstring>","maxTurns":123,"autoCloseAfterInactivityHours":123,"inactivityFollowUps":[{"delayMinutes":123,"message":"\u003cstring>"}],"responseDelaySeconds":123},"outbound":{"totalAgents":123,"transcriptOptions":123,"budgetTotal":123,"timeZone":"\u003cstring>","callingHours":[{"day":123,"start":"\u003cstring>","end":"\u003cstring>"}],"callWebhookUrl":"\u003cstring>","leadWebhookUrl":"\u003cstring>","textChannelId":"\u003cstring>","maxTurns":123,"autoCloseAfterInactivityHours":123,"inactivityFollowUps":[{"delayMinutes":123,"message":"\u003cstring>"}],"responseDelaySeconds":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"345d0036-08f1-43bf-aa32-8613ba8b6633":{"description":"The ID of the newly created Pearl.","content":{"text/plain":{"schema":{"type":"string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"\u003cstring>"}},"exampleType":"generated"},"application/json":{"schema":{"type":"string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"\u003cstring>"}},"exampleType":"generated"},"text/json":{"schema":{"type":"string","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"\u003cstring>"}},"exampleType":"generated"}},"exampleType":"generated"},"d8214d53-b804-4fde-bcd4-b033dafabf42":{"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":"Create Text Pearl - NLPearl Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-19T11:48:57.995Z","originalFileLocation":"api-reference/v2/pearlFlow/add-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=\"Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. 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=\"Create Text Pearl - NLPearl Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. 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/add-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=Create+Text+Pearl\u0026amp;description=Creates+a+new+text+Pearl%3A+the+conversation+is+driven+by+a+graph+of+nodes+connected+by+transitions%2C+and+messages+are+exchanged+over+a+text+channel.+Provide+exact\u0026amp;theme=1048d0b5fa94cf7eed8d4a4d\u0026amp;signature=4e81a9a338f2434ad97ddd3dd328670f6bba78b4b05ed81a0fa57906ca22bb02\">\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=\"Create Text Pearl - NLPearl Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. 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=Create+Text+Pearl\u0026amp;description=Creates+a+new+text+Pearl%3A+the+conversation+is+driven+by+a+graph+of+nodes+connected+by+transitions%2C+and+messages+are+exchanged+over+a+text+channel.+Provide+exact\u0026amp;theme=1048d0b5fa94cf7eed8d4a4d\u0026amp;signature=4e81a9a338f2434ad97ddd3dd328670f6bba78b4b05ed81a0fa57906ca22bb02\">\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/add-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/add-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/add-text-pearl#webpage\",\"url\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/add-text-pearl\",\"name\":\"Create Text Pearl\",\"description\":\"Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. 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/add-text-pearl#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/add-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\":\"Create Text Pearl\",\"item\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/add-text-pearl\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/add-text-pearl#apireference\",\"headline\":\"Create Text Pearl\",\"name\":\"Create Text Pearl\",\"description\":\"Creates a new text Pearl: the conversation is driven by a graph of nodes connected by transitions, and messages are exchanged over a text channel. Provide exactly one channel: inbound settings OR outbound settings, with the TextChannelId of the channel to use. To retrieve available text channels, use the Get Text Channels endpoint (GET /v2/Account/TextChannels). The Pearl is created already published: the configuration you send becomes its live (published) version. For more details, click here.\",\"url\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/add-text-pearl\",\"mainEntityOfPage\":{\"@id\":\"https://developers.nlpearl.ai/api-reference/v2/pearlFlow/add-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","description":"Creates a new voice Pearl: the conversation is driven by a graph of nodes connected by transitions. The graph must contain one OpeningSentence node (or a PreCallAPI leading to one or two OpeningSentence nodes), one EndCall node, and every node must be reachable. Provide exactly one channel: inbound settings OR outbound settings. At least one agent voice is required; to retrieve available voices, use the Get Voices endpoint (GET /v2/Account/Voices). The Pearl is created already published: the configuration you send becomes its live (published) version. For more details, click [here](/api-reference/building_a_flow).","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","description":"Updates the configuration of a Simple Pearl (name, pearl settings and variables). 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 Pearls, use Update Voice Pearl or Update Text Pearl instead.","href":"/api-reference/v2/pearlFlow/update-pearl-flow"},{"openapi":"put /v2/Pearl/Voice/{pearlId}","title":"Update Voice Pearl","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","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":"Create 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"]}