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

# Create Text Pearl

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



## OpenAPI

````yaml post /v2/Pearl/Text
openapi: 3.0.1
info:
  title: NLPearl Client API
  description: A sample API that demonstrates features in the OpenAPI specification
  version: v2
servers:
  - url: https://api.nlpearl.ai
    description: Production Environement
security:
  - bearer_auth: []
tags:
  - name: Pearl
    description: >-
      Manage your Pearls, the AI agents that handle your inbound and outbound
      calls. Create and configure Pearls, retrieve their details and settings,
      run or pause them, list and bulk-export their calls, monitor calls in
      progress, get analytics, and reset a customer's conversation memory.
paths:
  /v2/Pearl/Text:
    post:
      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:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/AddProjectTextApiRequest'
          text/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/AddProjectTextApiRequest'
          application/*+json:
            schema:
              allOf:
                - $ref: '#/components/schemas/AddProjectTextApiRequest'
      responses:
        '200':
          description: The ID of the newly created Pearl.
          content:
            text/plain:
              schema:
                type: string
            application/json:
              schema:
                type: string
            text/json:
              schema:
                type: string
        '400':
          description: Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ValidationProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ValidationProblemDetails'
components:
  schemas:
    AddProjectTextApiRequest:
      type: object
      properties:
        name:
          type: string
          description: The name of the Pearl.
          nullable: true
        pearl:
          allOf:
            - $ref: '#/components/schemas/AdvancedTextPearlApi'
          description: >-
            Conversation flow (node graph) and agent behavior configuration for
            the Pearl.
          nullable: true
        variables:
          type: array
          items:
            $ref: '#/components/schemas/DataSettingsApi'
          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)"
          nullable: true
        inbound:
          allOf:
            - $ref: '#/components/schemas/InboundTextSettingsApi'
          description: >-
            Inbound text settings for the Pearl. Required when creating an
            inbound Pearl. Must not be provided together with Outbound.
          nullable: true
        outbound:
          allOf:
            - $ref: '#/components/schemas/OutboundTextSettingsApi'
          description: >-
            Outbound text settings for the Pearl. Required when creating an
            outbound Pearl. Must not be provided together with Inbound.
          nullable: true
      additionalProperties: false
    ValidationProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
        errors:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          nullable: true
      additionalProperties: {}
    AdvancedTextPearlApi:
      type: object
      properties:
        agentPersonality:
          type: string
          description: >-
            Defines the agent's personality and tone (for example, more
            assertive or more calm).


            Constraints:

            - Max length: 35 characters.
          nullable: true
        timeZone:
          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\"."
          nullable: true
        modelType:
          allOf:
            - $ref: '#/components/schemas/eBrainModelType'
          description: >+
            Agent model type.


            Voice Pearls use one of these models:

            - Trident: Default, highest-quality model with standard rate.
            Optimized for natural, human-like interactions.

            - Oyster: Most cost-effective model (2 credits cheaper per minute).
            Straightforward, prioritizes simplicity and efficiency.

            - Arrow: High-intelligence model with the same depth as Trident,
            built for ultra-low latency (fastest). Costs 2 credits more per
            minute.

            - Hydra: Smartest model, built for demanding tasks that need deeper
            reasoning. Costs 2 credits more per minute.


            Text Pearls use:

            - Swan: the model dedicated to text agents (chat and messaging
            conversations). It is the only model available for text Pearls.


            Swan is not available for voice Pearls, and the voice models are not
            available for text Pearls.


            `1 - Trident`


            `2 - Oyster`


            `3 - Arrow`


            `4 - Hydra`


            `11 - Swan`

          nullable: true
        companyName:
          type: string
          description: "The company name used by the agent during conversations.\r\n            \r\nConstraints:\r\n- Max length: 100 characters."
          nullable: true
        companyDescription:
          type: string
          description: "The company description used by the agent during conversations.\r\n            \r\nConstraints:\r\n- Max length: 500 characters."
          nullable: true
        generalInstructions:
          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."
          nullable: true
        knowledgeBase:
          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."
          nullable: true
        memory:
          type: boolean
          description: >-
            Indicates whether memory is enabled. When enabled, the Pearl can
            remember previous conversations for a given phone number.
          nullable: true
        successDescription:
          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."
          nullable: true
        indicatorTags:
          type: array
          items:
            $ref: '#/components/schemas/CallLabelApi'
          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."
          nullable: true
        nodes:
          type: array
          items:
            $ref: '#/components/schemas/NodeApi'
          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)."
          nullable: true
        agentName:
          type: string
          description: The display name of the agent in the conversation.
          nullable: true
      additionalProperties: false
      description: "Configuration of a text Pearl: a graph of nodes driven by a text agent over a messaging channel (unlike a\r\nSimple Pearl, which is driven by a single opening sentence and flow script)."
    DataSettingsApi:
      type: object
      properties:
        id:
          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 (-)."
          nullable: true
        name:
          type: string
          description: "Friendly display name for the variable.\r\n            \r\nMax 40 characters only."
          nullable: true
        group:
          allOf:
            - $ref: '#/components/schemas/eDataSettingsGroup'
          description: >+
            Variable group.


            - PreCall: Variables available before the call (used in pre-call
            contexts such as opening sentence or pre-call API).

            - InCall: Variables collected or updated during the call.

            - PostCall: Variables generated after the call by the platform
            (cannot be created via the API).


            `1 - PreCall`


            `2 - InCall`


            `3 - PostCall`

        type:
          allOf:
            - $ref: '#/components/schemas/eStateDataType'
          description: |+
            `1 - String`

            `2 - Long`

            `3 - Double`

            `4 - Boolean`

            `5 - DateOnly`

            `6 - TimeOnly`

            `7 - DateTime`

        isList:
          type: boolean
          description: >-
            Indicates whether the variable can contain multiple values (list) or
            a single value.
        description:
          type: string
          description: "Guidance for the agent on how to collect or infer this variable during the conversation.\r\n            \r\nMax 300 characters only."
          nullable: true
        value:
          type: string
          nullable: true
        options:
          type: array
          items:
            $ref: '#/components/schemas/OptionChoice'
          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."
          nullable: true
      additionalProperties: false
    InboundTextSettingsApi:
      type: object
      properties:
        totalAgents:
          type: integer
          description: Total number of agents allocated to this inbound activity.
          format: int32
        transcriptOptions:
          allOf:
            - $ref: '#/components/schemas/eTranscriptOptions'
          description: |+
            `1 - FullTranscript`

            `2 - SensitiveInfoRemoved`

            `3 - NoTranscript`

        callWebhookUrl:
          type: string
          description: >-
            Optional webhook URL to receive call events (for example call
            started and call ended).
          nullable: true
        textChannelId:
          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)."
          nullable: true
        maxTurns:
          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
          nullable: true
        autoCloseAfterInactivityHours:
          type: integer
          description: >-
            Number of hours of customer inactivity after which the conversation
            is automatically closed.
          format: int32
          nullable: true
        inactivityFollowUps:
          type: array
          items:
            $ref: '#/components/schemas/InactivityFollowUp'
          description: "Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message."
          nullable: true
      additionalProperties: false
      description: Inbound settings of a text Pearl.
    OutboundTextSettingsApi:
      type: object
      properties:
        totalAgents:
          type: integer
          description: Total number of agents allocated to this outbound activity.
          format: int32
        transcriptOptions:
          allOf:
            - $ref: '#/components/schemas/eTranscriptOptions'
          description: |+
            `1 - FullTranscript`

            `2 - SensitiveInfoRemoved`

            `3 - NoTranscript`

        budgetTotal:
          type: integer
          description: "Total budget allocated for the outbound activity.\r\nIf null, the outbound activity runs without a budget limit."
          format: int32
          nullable: true
        timeZone:
          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\"."
          nullable: true
        callingHours:
          type: array
          items:
            $ref: '#/components/schemas/DayWorkingHours'
          description: Allowed calling hours for the outbound activity.
          nullable: true
        callWebhookUrl:
          type: string
          description: >-
            Optional webhook URL to receive call events (for example call
            started and call ended).
          nullable: true
        leadWebhookUrl:
          type: string
          description: >-
            Optional webhook URL to receive lead events (for example lead
            created/updated).
          nullable: true
        textChannelId:
          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)."
          nullable: true
        maxTurns:
          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
          nullable: true
        autoCloseAfterInactivityHours:
          type: integer
          description: >-
            Number of hours of customer inactivity after which the conversation
            is automatically closed.
          format: int32
          nullable: true
        inactivityFollowUps:
          type: array
          items:
            $ref: '#/components/schemas/InactivityFollowUp'
          description: "Follow-up messages automatically sent when the customer stops responding.\r\nEach entry defines the delay (in minutes) and an optional custom message."
          nullable: true
      additionalProperties: false
      description: Outbound settings of a text Pearl.
    eBrainModelType:
      type: integer
      description: >+
        Agent model type.


        Voice Pearls use one of these models:

        - Trident: Default, highest-quality model with standard rate. Optimized
        for natural, human-like interactions.

        - Oyster: Most cost-effective model (2 credits cheaper per minute).
        Straightforward, prioritizes simplicity and efficiency.

        - Arrow: High-intelligence model with the same depth as Trident, built
        for ultra-low latency (fastest). Costs 2 credits more per minute.

        - Hydra: Smartest model, built for demanding tasks that need deeper
        reasoning. Costs 2 credits more per minute.


        Text Pearls use:

        - Swan: the model dedicated to text agents (chat and messaging
        conversations). It is the only model available for text Pearls.


        Swan is not available for voice Pearls, and the voice models are not
        available for text Pearls.


        `1 - Trident`


        `2 - Oyster`


        `3 - Arrow`


        `4 - Hydra`


        `11 - Swan`

      format: int32
    CallLabelApi:
      type: object
      properties:
        id:
          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)."
          nullable: true
        name:
          type: string
          description: "The label name.\r\n            \r\nMax 25 characters only."
          nullable: true
        description:
          type: string
          description: "Describes when this label should be applied.\r\n            \r\nMax 250 characters only."
          nullable: true
        color:
          allOf:
            - $ref: '#/components/schemas/ePredefinedCallLabelColors'
          description: |+
            `1 - purple`

            `2 - red`

            `3 - yellow`

            `4 - green`

            `5 - blue`

            `6 - pink`

            `7 - teal`

            `8 - lime`

            `8 - gradient1`

            `9 - gradient2`

      additionalProperties: false
    NodeApi:
      type: object
      properties:
        nodeId:
          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."
          nullable: true
        name:
          type: string
          description: Display name of the node.
          nullable: true
        nodeType:
          allOf:
            - $ref: '#/components/schemas/eNodeTypeApi'
          description: >+
            The type of a node in a Pearl's conversation flow. It determines
            what the node does and which settings object it carries.


            - OpeningSentence: the first message the agent sends to start the
            conversation.

            - PreCallAPI: an API call executed before the conversation starts
            (for example a customer lookup). Its transitions use apiResult to
            branch on success or failure.

            - Dialogue: a scripted node where the agent converses with the
            customer.

            - HandoffChatToHuman: hands the conversation over to a human
            operator. Text Pearls only.

            - API: an API call executed during the conversation.

            - SMS: sends an SMS message.

            - Email: sends an email.

            - TransferCall: transfers the call to another phone number. Voice
            Pearls only.

            - StartCallRecording: starts recording the call from this point.
            Voice Pearls only. This node carries no settings.

            - SearchKnowledgeBase: searches the agent's knowledge base and
            returns the answer.

            - EndCall: terminates the conversation. Exactly one per flow, and
            every path must lead to it.

            - PostCallActions: a container whose nested actions run after the
            conversation ends.


            `2 - OpeningSentence`


            `3 - PreCallAPI`


            `10 - Dialogue`


            `31 - HandoffChatToHuman`


            `40 - API`


            `50 - SMS`


            `51 - Email`


            `60 - TransferCall`


            `65 - StartCallRecording`


            `80 - SearchKnowledgeBase`


            `100 - EndCall`


            `200 - PostCallActions`

        transitions:
          type: array
          items:
            $ref: '#/components/schemas/TransitionApi'
          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."
          nullable: true
        script:
          type: string
          description: "`🧩 May support variables`\r\n            \r\nThe script the agent follows while in this node (for OpeningSentence and Dialogue nodes)."
          nullable: true
        instructions:
          type: string
          description: "`🧩 May support variables`\r\n            \r\nFree-form instructions that guide the agent's behavior in this node."
          nullable: true
        apiSettings:
          allOf:
            - $ref: '#/components/schemas/NodeAPISettingsApi'
          description: >-
            API call configuration. Required when the node type is API or
            PreCallAPI.
          nullable: true
        smsSettings:
          allOf:
            - $ref: '#/components/schemas/NodeSMSTemplateApi'
          description: SMS configuration. Required when the node type is SMS.
          nullable: true
        emailSettings:
          allOf:
            - $ref: '#/components/schemas/NodeEmailTemplateApi'
          description: Email configuration. Required when the node type is Email.
          nullable: true
        transferCallSettings:
          allOf:
            - $ref: '#/components/schemas/TransferCallSettingsApi'
          description: >-
            Call transfer configuration. Required when the node type is
            TransferCall (voice Pearls only).
          nullable: true
        handOffAction:
          type: array
          items:
            $ref: '#/components/schemas/NodeApi'
          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."
          nullable: true
        postCallActions:
          type: array
          items:
            $ref: '#/components/schemas/NodeApi'
          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."
          nullable: true
      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."
    eDataSettingsGroup:
      type: integer
      description: >+
        Variable group.


        - PreCall: Variables available before the call (used in pre-call
        contexts such as opening sentence or pre-call API).

        - InCall: Variables collected or updated during the call.

        - PostCall: Variables generated after the call by the platform (cannot
        be created via the API).


        `1 - PreCall`


        `2 - InCall`


        `3 - PostCall`

      format: int32
    eStateDataType:
      type: integer
      description: |+
        `1 - String`

        `2 - Long`

        `3 - Double`

        `4 - Boolean`

        `5 - DateOnly`

        `6 - TimeOnly`

        `7 - DateTime`

      format: int32
    OptionChoice:
      type: object
      properties:
        value:
          type: string
          description: "The option value (human-readable label).\r\nIf Code is empty, this value is also used for display."
          nullable: true
        code:
          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)."
          nullable: true
      additionalProperties: false
    eTranscriptOptions:
      type: integer
      description: |+
        `1 - FullTranscript`

        `2 - SensitiveInfoRemoved`

        `3 - NoTranscript`

      format: int32
    InactivityFollowUp:
      type: object
      properties:
        delayMinutes:
          type: integer
          description: >-
            Delay (in minutes) of customer inactivity before this follow-up is
            sent.
          format: int32
        message:
          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."
          nullable: true
      additionalProperties: false
      description: >-
        Follow-up message automatically sent when the customer stops responding
        during a text conversation.
    DayWorkingHours:
      type: object
      properties:
        day:
          allOf:
            - $ref: '#/components/schemas/DayOfWeek'
          description: |+
            `0 - Sunday`

            `1 - Monday`

            `2 - Tuesday`

            `3 - Wednesday`

            `4 - Thursday`

            `5 - Friday`

            `6 - Saturday`

        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
    ePredefinedCallLabelColors:
      type: integer
      description: |+
        `1 - purple`

        `2 - red`

        `3 - yellow`

        `4 - green`

        `5 - blue`

        `6 - pink`

        `7 - teal`

        `8 - lime`

        `8 - gradient1`

        `9 - gradient2`

      format: int32
    eNodeTypeApi:
      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.


        - OpeningSentence: the first message the agent sends to start the
        conversation.

        - PreCallAPI: an API call executed before the conversation starts (for
        example a customer lookup). Its transitions use apiResult to branch on
        success or failure.

        - Dialogue: a scripted node where the agent converses with the customer.

        - HandoffChatToHuman: hands the conversation over to a human operator.
        Text Pearls only.

        - API: an API call executed during the conversation.

        - SMS: sends an SMS message.

        - Email: sends an email.

        - TransferCall: transfers the call to another phone number. Voice Pearls
        only.

        - StartCallRecording: starts recording the call from this point. Voice
        Pearls only. This node carries no settings.

        - SearchKnowledgeBase: searches the agent's knowledge base and returns
        the answer.

        - EndCall: terminates the conversation. Exactly one per flow, and every
        path must lead to it.

        - PostCallActions: a container whose nested actions run after the
        conversation ends.


        `2 - OpeningSentence`


        `3 - PreCallAPI`


        `10 - Dialogue`


        `31 - HandoffChatToHuman`


        `40 - API`


        `50 - SMS`


        `51 - Email`


        `60 - TransferCall`


        `65 - StartCallRecording`


        `80 - SearchKnowledgeBase`


        `100 - EndCall`


        `200 - PostCallActions`

      format: int32
    TransitionApi:
      type: object
      properties:
        name:
          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."
          nullable: true
        toNodeId:
          type: string
          description: The NodeId of the target node.
          nullable: true
        apiResult:
          allOf:
            - $ref: '#/components/schemas/eTransitionApiResult'
          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.


            `1 - Success`


            `2 - Failure`

          nullable: true
      additionalProperties: false
      description: A transition between two nodes of the conversation graph.
    NodeAPISettingsApi:
      type: object
      properties:
        name:
          type: string
          description: "A friendly name for this API action.\r\n            \r\nMax 50 characters only."
          nullable: true
        method:
          allOf:
            - $ref: '#/components/schemas/APIMethod'
          description: |+
            `1 - GET`

            `2 - POST`

            `3 - PUT`

            `4 - DELETE`

            `5 - PATCH`

        endpointUrl:
          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."
          nullable: true
        body:
          type: array
          items:
            $ref: '#/components/schemas/APIDataSchemaPropertyApi'
          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)."
          nullable: true
        headers:
          type: object
          additionalProperties:
            type: string
          description: Optional HTTP headers to include in the API request.
          nullable: true
        description:
          type: string
          description: "A short description of what this API action does.\r\n            \r\nMax 150 characters only."
          nullable: true
        outputBody:
          type: array
          items:
            $ref: '#/components/schemas/APIDataSchemaPropertyApi'
          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."
          nullable: true
        credentialId:
          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})."
          nullable: true
      additionalProperties: false
      description: "API call configuration of an API or PreCallAPI node.\r\nThere is no trigger description here: the node runs when a transition leads to it."
    NodeSMSTemplateApi:
      type: object
      properties:
        body:
          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."
          nullable: true
      additionalProperties: false
      description: "SMS configuration of an SMS node.\r\nThere is no trigger description here: the node runs when a transition leads to it."
    NodeEmailTemplateApi:
      type: object
      properties:
        to:
          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."
          nullable: true
        cc:
          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."
          nullable: true
        subject:
          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."
          nullable: true
        body:
          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."
          nullable: true
        smtpSettings:
          allOf:
            - $ref: '#/components/schemas/SmtpSettings'
          description: "Optional SMTP configuration used to send the email.\r\nIf not provided, the email is sent using the default platform email sender."
          nullable: true
      additionalProperties: false
      description: "Email configuration of an Email node.\r\nThere is no trigger description here: the node runs when a transition leads to it."
    TransferCallSettingsApi:
      type: object
      properties:
        transferCallPhoneNumber:
          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."
          nullable: true
        triggerDescription:
          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)."
          nullable: true
        warmTransferMessage:
          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."
          nullable: true
      additionalProperties: false
    DayOfWeek:
      type: integer
      description: |+
        `0 - Sunday`

        `1 - Monday`

        `2 - Tuesday`

        `3 - Wednesday`

        `4 - Thursday`

        `5 - Friday`

        `6 - Saturday`

      format: int32
    eTransitionApiResult:
      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.


        `1 - Success`


        `2 - Failure`

      format: int32
    APIMethod:
      type: integer
      description: |+
        `1 - GET`

        `2 - POST`

        `3 - PUT`

        `4 - DELETE`

        `5 - PATCH`

      format: int32
    APIDataSchemaPropertyApi:
      type: object
      properties:
        key:
          type: string
          description: "The request body field name (JSON key).\r\n            \r\nMax 255 characters only."
          nullable: true
        variableId:
          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."
          nullable: true
        type:
          allOf:
            - $ref: '#/components/schemas/eStateDataType'
          description: |+
            `1 - String`

            `2 - Long`

            `3 - Double`

            `4 - Boolean`

            `5 - DateOnly`

            `6 - TimeOnly`

            `7 - DateTime`

          nullable: true
        value:
          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."
          nullable: true
        required:
          type: boolean
          description: Indicates whether this request body field is required.
      additionalProperties: false
    SmtpSettings:
      type: object
      properties:
        id:
          type: string
          description: Optional SMTP configuration identifier.
          nullable: true
        provider:
          allOf:
            - $ref: '#/components/schemas/EmailProvider'
          description: |+
            `1 - Gmail`

            `2 - Office365`

            `10 - Custom`

          nullable: true
        smtpServer:
          type: string
          description: SMTP server hostname.
          nullable: true
        port:
          type: integer
          description: SMTP server port.
          format: int32
          nullable: true
        enableSsl:
          type: boolean
          description: Indicates whether SSL/TLS is enabled for the SMTP connection.
          nullable: true
        senderEmail:
          type: string
          description: >-
            Sender email address used for SMTP authentication and as the "From"
            address.
          nullable: true
        senderPassword:
          type: string
          description: Sender password or SMTP credential used for authentication.
          nullable: true
        displayName:
          type: string
          description: Display name shown in the recipient inbox (the "From" name).
          nullable: true
      additionalProperties: false
    EmailProvider:
      type: integer
      description: |+
        `1 - Gmail`

        `2 - Office365`

        `10 - Custom`

      format: int32
  securitySchemes:
    bearer_auth:
      type: http
      description: >-
        Specify the authorization token.


        For more information, check out the [Authorization
        Guide](/api-reference/authorization).
      scheme: bearer

````