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

# Add node

> Add one node to a draft journey. Positions are optional (auto-laid-out). Wire it up separately with journeys_connect_nodes.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/journeys/{journeyId}/nodes
openapi: 3.1.0
info:
  title: Boom API
  version: 1.0.0
  description: >-
    Boom's public REST API — one uniform surface over every platform capability.
    CDP: upsert people and custom objects, define object and relationship types,
    link and unlink relationships, and record behavioral events — one record per
    request or up to 1000 per request via the `/batch` endpoints. Segments: read
    (list, read, membership) and full authoring — discover the filterable
    catalog, validate a filter, create and update segments, preview match
    counts, and trigger evaluation. Initiatives: create and configure outreach
    initiatives, link WhatsApp templates, drive the lifecycle (launch, cancel,
    archive), and read collected-data summaries. Participants: enroll people
    into an active initiative, track their status, read conversation
    transcripts, and stop outreach. Journeys: read-only access to always-on
    message flows and their metrics. WhatsApp templates: list your WhatsApp
    numbers and list, read, and create message templates. The same capabilities
    are exposed as MCP tools with identical schemas.
servers:
  - url: https://www.useboom.ai
    description: Production
  - url: https://dev.useboom.ai
    description: Development (sandbox — use a development organization API key)
security:
  - bearerAuth: []
paths:
  /api/v1/journeys/{journeyId}/nodes:
    post:
      tags:
        - Journeys
      summary: Add node
      description: >-
        Add one node to a draft journey. Positions are optional (auto-laid-out).
        Wire it up separately with journeys_connect_nodes.
      operationId: journeys_add_node
      parameters:
        - name: journeyId
          in: path
          required: true
          schema:
            $schema: https://json-schema.org/draft/2020-12/schema
            type: string
            minLength: 1
            description: >-
              A draft journey id, or the initiative id (resolves to its current
              draft).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                node:
                  oneOf:
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: ENTRY
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            description:
                              type: string
                            triggerType:
                              description: >-
                                How people enter: manual (added by an operator
                                or API call), segment (on entering a segment),
                                or cdp_event (when an event is received).
                                Defaults to manual.
                              type: string
                              enum:
                                - manual
                                - segment
                                - cdp_event
                            segmentId:
                              description: >-
                                Segment id — required when triggerType is
                                segment.
                              type: string
                            segmentName:
                              description: Cached segment display name (optional).
                              type: string
                            eventName:
                              description: >-
                                CDP event name — required when triggerType is
                                cdp_event.
                              type: string
                            maxEnrollments:
                              description: >-
                                Frequency cap: max enrollments per person within
                                enrollmentWindow. Both-or-neither with
                                enrollmentWindow.
                              type: integer
                              minimum: 1
                              maximum: 9007199254740991
                            enrollmentWindow:
                              description: Rolling window for the frequency cap.
                              type: string
                          description: >-
                            Trigger node config. Exactly one ENTRY node per
                            journey.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: SEND_MESSAGE
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            templateId:
                              description: >-
                                Approved WhatsApp template id. Resolve ids from
                                the catalog.
                              type: string
                            templateName:
                              type: string
                            channel:
                              description: Send channel. Only whatsapp is live today.
                              type: string
                              enum:
                                - whatsapp
                                - sms
                                - email
                            templateBindings:
                              description: >-
                                Map of template placeholder → variable
                                reference.
                              type: object
                              propertyNames:
                                type: string
                              additionalProperties:
                                type: string
                            channelId:
                              description: >-
                                Sending WhatsApp channel (WABA) id. Required
                                before publishing.
                              type: string
                            sendImmediately:
                              description: >-
                                Deprecated business-hours gate; prefer a
                                preceding DELAY.
                              type: boolean
                          description: Sends a WhatsApp template.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: CONVERSATION_BLOCK
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            goal:
                              type: string
                            maxTimeout:
                              description: How long to wait for a reply before timing out.
                              type: string
                            mode:
                              type: string
                              enum:
                                - AGENT
                                - ESCALATE
                            outputs:
                              type: array
                              items:
                                type: object
                                properties:
                                  id:
                                    type: string
                                  label:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                      - string
                                      - number
                                      - date
                                      - boolean
                                      - json
                                  description:
                                    type: string
                                  builtin:
                                    type: boolean
                                required:
                                  - id
                                  - label
                                  - type
                                  - builtin
                          description: Legacy combined wait + AI conversation block.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: WAIT_FOR_REPLY
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            maxTimeout:
                              description: >-
                                How long to wait for the first reply before
                                timing out.
                              type: string
                          description: Waits for the person to reply.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: MANAGE_CONVERSATION
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            mode:
                              description: >-
                                AGENT (AI-led) or ESCALATE (human handoff).
                                Defaults to AGENT.
                              type: string
                              enum:
                                - AGENT
                                - ESCALATE
                            inactivityTimeout:
                              description: >-
                                Optional custom idle window (e.g. '2h', '30m')
                                that overrides the global inactive-conversation
                                close. Resets on each inbound message; after
                                this much silence the node closes the
                                conversation (routes CLOSED). Hard cap 24h;
                                under 30m is allowed but flagged 'not
                                recommended'. Requires the
                                journey-inactivity-timeout flag.
                              type: string
                          description: Runs the AI-led conversation.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: DISPATCH_EVENT
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            eventName:
                              type: string
                              minLength: 1
                              description: >-
                                CDP event name to record. Must match the CDP
                                name pattern.
                            properties:
                              description: >-
                                Literal string values, or { var: path } bindings
                                resolved to typed values at dispatch time.
                              type: object
                              propertyNames:
                                type: string
                              additionalProperties:
                                anyOf:
                                  - type: string
                                  - type: object
                                    properties:
                                      var:
                                        type: string
                                    required:
                                      - var
                            description:
                              type: string
                          required:
                            - eventName
                          description: Records a CDP event for the person.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: DELAY
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            mode:
                              description: How the wait is measured. Defaults to duration.
                              type: string
                              enum:
                                - duration
                                - until_date
                                - until_weekday
                            duration:
                              description: For mode duration.
                              type: string
                            targetAt:
                              description: ISO 8601 instant, for mode until_date.
                              type: string
                            weekdays:
                              description: >-
                                ISO weekdays 1=Mon..7=Sun, for mode
                                until_weekday.
                              type: array
                              items:
                                type: integer
                                minimum: 1
                                maximum: 7
                            windowStartMinutes:
                              type: integer
                              minimum: 0
                              maximum: 1439
                            windowEndMinutes:
                              type: integer
                              minimum: 0
                              maximum: 1439
                            timezone:
                              description: IANA timezone. Load-bearing for until_weekday.
                              type: string
                            description:
                              type: string
                          description: Pauses the run.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: DECISION
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            logic:
                              type: string
                              enum:
                                - AND
                                - OR
                            conditions:
                              type: array
                              items:
                                oneOf:
                                  - type: object
                                    properties:
                                      kind:
                                        type: string
                                        const: value
                                      selectionPath:
                                        type: string
                                        description: >-
                                          Dot-path into the run, e.g.
                                          workflowState.totalPrice.
                                      operator:
                                        type: string
                                        enum:
                                          - eq
                                          - neq
                                          - gt
                                          - lt
                                          - contains
                                          - isSet
                                      value:
                                        type: string
                                    required:
                                      - kind
                                      - selectionPath
                                      - operator
                                      - value
                                  - type: object
                                    properties:
                                      kind:
                                        type: string
                                        const: event
                                      eventName:
                                        type: string
                                      subjectSelectionPath:
                                        type: string
                                      occurred:
                                        type: boolean
                                    required:
                                      - kind
                                      - eventName
                                      - subjectSelectionPath
                                      - occurred
                                  - type: object
                                    properties:
                                      kind:
                                        type: string
                                        const: cdp_predicate
                                      term:
                                        type: object
                                        propertyNames:
                                          type: string
                                        additionalProperties: {}
                                        description: >-
                                          A single live person/computed predicate
                                          term. See journeys_authoring_catalog for
                                          its shape.
                                    required:
                                      - kind
                                      - term
                                  - type: object
                                    properties:
                                      kind:
                                        type: string
                                        const: cdp_object
                                      objectType:
                                        type: string
                                      matchAttr:
                                        type: string
                                      matchSelectionPath:
                                        type: string
                                      exists:
                                        type: boolean
                                    required:
                                      - kind
                                      - objectType
                                      - matchAttr
                                      - matchSelectionPath
                                      - exists
                                description: One decision condition.
                            description:
                              type: string
                          required:
                            - logic
                            - conditions
                          description: Two-way branch. Emits YES / NO.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: CASE
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            selectionPath:
                              type: string
                              description: >-
                                Person attribute (attributes.*) or extracted
                                field (engagement.extracted.*) to switch on.
                            branches:
                              type: array
                              items:
                                type: object
                                properties:
                                  id:
                                    type: string
                                    description: >-
                                      Stable branch id; edge handle is
                                      case:<id>.
                                  value:
                                    type: string
                                    description: Value matched. Unique within the node.
                                  label:
                                    type: string
                                required:
                                  - id
                                  - value
                              description: >-
                                Up to 10 branches. A case:default handle is
                                always required.
                            description:
                              type: string
                          required:
                            - selectionPath
                            - branches
                          description: N-way switch on a person attribute.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: HTTP_REQUEST
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            method:
                              type: string
                              enum:
                                - GET
                                - POST
                                - PUT
                                - PATCH
                                - DELETE
                              description: HTTP method.
                            url:
                              type: string
                              minLength: 1
                              description: Target URL. Supports {{variable}} placeholders.
                            headers:
                              description: Request headers as key/value pairs.
                              type: array
                              items:
                                type: object
                                properties:
                                  key:
                                    type: string
                                  value:
                                    type: string
                                required:
                                  - key
                                  - value
                            body:
                              description: Request body. mode none sends no body.
                              type: object
                              properties:
                                mode:
                                  type: string
                                  enum:
                                    - none
                                    - json
                                    - raw
                                content:
                                  type: string
                                contentType:
                                  type: string
                              required:
                                - mode
                            credentialId:
                              description: >-
                                Deprecated/legacy: HttpCredential row id used to
                                authenticate the request. Prefer credentialKey.
                              type: string
                            credentialKey:
                              description: >-
                                Logical credential key; the pinned environment
                                selects the secret.
                              type: string
                            timeoutMs:
                              description: >-
                                Request timeout in milliseconds. Max 30000
                                (30s).
                              type: integer
                              exclusiveMinimum: 0
                              maximum: 30000
                            maxAttempts:
                              description: Max attempts including the first. Max 5.
                              type: integer
                              exclusiveMinimum: 0
                              maximum: 5
                            documentUrlTtlSeconds:
                              description: >-
                                TTL (seconds, ≤86400) for presigned
                                engagement.documents URLs this node emits.
                                Default 86400.
                              type: integer
                              exclusiveMinimum: 0
                              maximum: 86400
                          required:
                            - method
                            - url
                          description: >-
                            Calls an external HTTP endpoint. Emits SUCCESS or
                            FAILED.
                      required:
                        - id
                        - kind
                    - type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                          description: Node id, unique within the journey.
                        kind:
                          type: string
                          const: EXIT
                        name:
                          type: string
                          minLength: 1
                          description: >-
                            The label shown on the canvas. Required before
                            publishing.
                        position:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                          required:
                            - x
                            - 'y'
                          description: >-
                            Explicit canvas position. Omit it and the server
                            auto-lays-out the graph top-down; only set it to
                            preserve a hand-arranged layout.
                        inputs:
                          type: object
                          properties:
                            outcome:
                              type: string
                            nextInitiativeId:
                              description: Chain into another initiative on exit.
                              type: string
                          description: Terminal node.
                      required:
                        - id
                        - kind
              required:
                - node
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  id:
                    type: string
                    description: Journey (workflow version) id.
                  initiativeId:
                    type: string
                    description: The initiative this journey belongs to.
                  status:
                    type: string
                    enum:
                      - DRAFT
                      - PUBLISHED
                      - STOPPED
                    description: >-
                      DRAFT (editable), PUBLISHED (live, frozen), or STOPPED
                      (retired).
                  version:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                    description: Version number within the initiative.
                  definition:
                    type: object
                    properties:
                      id:
                        description: >-
                          Journey id; carried for round-trip ergonomics.
                          Optional on create.
                        type: string
                      name:
                        type: string
                        minLength: 1
                        description: Journey name.
                      metadata:
                        type: object
                        properties:
                          initiativeType:
                            type: string
                          version:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          cancelOnEvents:
                            description: >-
                              Cancel an in-flight run when any of these events
                              arrive.
                            type: object
                            properties:
                              eventNames:
                                type: array
                                items:
                                  type: string
                            required:
                              - eventNames
                            additionalProperties: false
                        additionalProperties: false
                        description: Optional journey-level metadata.
                      actions:
                        minItems: 1
                        type: array
                        items:
                          oneOf:
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: ENTRY
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    description:
                                      type: string
                                    triggerType:
                                      description: >-
                                        How people enter: manual (added by an
                                        operator or API call), segment (on
                                        entering a segment), or cdp_event (when
                                        an event is received). Defaults to
                                        manual.
                                      type: string
                                      enum:
                                        - manual
                                        - segment
                                        - cdp_event
                                    segmentId:
                                      description: >-
                                        Segment id — required when triggerType
                                        is segment.
                                      type: string
                                    segmentName:
                                      description: Cached segment display name (optional).
                                      type: string
                                    eventName:
                                      description: >-
                                        CDP event name — required when
                                        triggerType is cdp_event.
                                      type: string
                                    maxEnrollments:
                                      description: >-
                                        Frequency cap: max enrollments per
                                        person within enrollmentWindow.
                                        Both-or-neither with enrollmentWindow.
                                      type: integer
                                      minimum: 1
                                      maximum: 9007199254740991
                                    enrollmentWindow:
                                      description: Rolling window for the frequency cap.
                                      type: string
                                  additionalProperties: false
                                  description: >-
                                    Trigger node config. Exactly one ENTRY node
                                    per journey.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: SEND_MESSAGE
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    templateId:
                                      description: >-
                                        Approved WhatsApp template id. Resolve
                                        ids from the catalog.
                                      type: string
                                    templateName:
                                      type: string
                                    channel:
                                      description: >-
                                        Send channel. Only whatsapp is live
                                        today.
                                      type: string
                                      enum:
                                        - whatsapp
                                        - sms
                                        - email
                                    templateBindings:
                                      description: >-
                                        Map of template placeholder → variable
                                        reference.
                                      type: object
                                      propertyNames:
                                        type: string
                                      additionalProperties:
                                        type: string
                                    channelId:
                                      description: >-
                                        Sending WhatsApp channel (WABA) id.
                                        Required before publishing.
                                      type: string
                                    sendImmediately:
                                      description: >-
                                        Deprecated business-hours gate; prefer a
                                        preceding DELAY.
                                      type: boolean
                                  additionalProperties: false
                                  description: Sends a WhatsApp template.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: CONVERSATION_BLOCK
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    goal:
                                      type: string
                                    maxTimeout:
                                      description: >-
                                        How long to wait for a reply before
                                        timing out.
                                      type: string
                                    mode:
                                      type: string
                                      enum:
                                        - AGENT
                                        - ESCALATE
                                    outputs:
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          id:
                                            type: string
                                          label:
                                            type: string
                                          type:
                                            type: string
                                            enum:
                                              - string
                                              - number
                                              - date
                                              - boolean
                                              - json
                                          description:
                                            type: string
                                          builtin:
                                            type: boolean
                                        required:
                                          - id
                                          - label
                                          - type
                                          - builtin
                                        additionalProperties: false
                                  additionalProperties: false
                                  description: >-
                                    Legacy combined wait + AI conversation
                                    block.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: WAIT_FOR_REPLY
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    maxTimeout:
                                      description: >-
                                        How long to wait for the first reply
                                        before timing out.
                                      type: string
                                  additionalProperties: false
                                  description: Waits for the person to reply.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: MANAGE_CONVERSATION
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    mode:
                                      description: >-
                                        AGENT (AI-led) or ESCALATE (human
                                        handoff). Defaults to AGENT.
                                      type: string
                                      enum:
                                        - AGENT
                                        - ESCALATE
                                    inactivityTimeout:
                                      description: >-
                                        Optional custom idle window (e.g. '2h',
                                        '30m') that overrides the global
                                        inactive-conversation close. Resets on
                                        each inbound message; after this much
                                        silence the node closes the conversation
                                        (routes CLOSED). Hard cap 24h; under 30m
                                        is allowed but flagged 'not
                                        recommended'. Requires the
                                        journey-inactivity-timeout flag.
                                      type: string
                                  additionalProperties: false
                                  description: Runs the AI-led conversation.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: DISPATCH_EVENT
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    eventName:
                                      type: string
                                      minLength: 1
                                      description: >-
                                        CDP event name to record. Must match the
                                        CDP name pattern.
                                    properties:
                                      description: >-
                                        Literal string values, or { var: path }
                                        bindings resolved to typed values at
                                        dispatch time.
                                      type: object
                                      propertyNames:
                                        type: string
                                      additionalProperties:
                                        anyOf:
                                          - type: string
                                          - type: object
                                            properties:
                                              var:
                                                type: string
                                            required:
                                              - var
                                            additionalProperties: false
                                    description:
                                      type: string
                                  required:
                                    - eventName
                                  additionalProperties: false
                                  description: Records a CDP event for the person.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: DELAY
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    mode:
                                      description: >-
                                        How the wait is measured. Defaults to
                                        duration.
                                      type: string
                                      enum:
                                        - duration
                                        - until_date
                                        - until_weekday
                                    duration:
                                      description: For mode duration.
                                      type: string
                                    targetAt:
                                      description: ISO 8601 instant, for mode until_date.
                                      type: string
                                    weekdays:
                                      description: >-
                                        ISO weekdays 1=Mon..7=Sun, for mode
                                        until_weekday.
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                        maximum: 7
                                    windowStartMinutes:
                                      type: integer
                                      minimum: 0
                                      maximum: 1439
                                    windowEndMinutes:
                                      type: integer
                                      minimum: 0
                                      maximum: 1439
                                    timezone:
                                      description: >-
                                        IANA timezone. Load-bearing for
                                        until_weekday.
                                      type: string
                                    description:
                                      type: string
                                  additionalProperties: false
                                  description: Pauses the run.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: DECISION
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    logic:
                                      type: string
                                      enum:
                                        - AND
                                        - OR
                                    conditions:
                                      type: array
                                      items:
                                        oneOf:
                                          - type: object
                                            properties:
                                              kind:
                                                type: string
                                                const: value
                                              selectionPath:
                                                type: string
                                                description: >-
                                                  Dot-path into the run, e.g.
                                                  workflowState.totalPrice.
                                              operator:
                                                type: string
                                                enum:
                                                  - eq
                                                  - neq
                                                  - gt
                                                  - lt
                                                  - contains
                                                  - isSet
                                              value:
                                                type: string
                                            required:
                                              - kind
                                              - selectionPath
                                              - operator
                                              - value
                                            additionalProperties: false
                                          - type: object
                                            properties:
                                              kind:
                                                type: string
                                                const: event
                                              eventName:
                                                type: string
                                              subjectSelectionPath:
                                                type: string
                                              occurred:
                                                type: boolean
                                            required:
                                              - kind
                                              - eventName
                                              - subjectSelectionPath
                                              - occurred
                                            additionalProperties: false
                                          - type: object
                                            properties:
                                              kind:
                                                type: string
                                                const: cdp_predicate
                                              term:
                                                type: object
                                                propertyNames:
                                                  type: string
                                                additionalProperties: {}
                                                description: >-
                                                  A single live person/computed predicate
                                                  term. See journeys_authoring_catalog for
                                                  its shape.
                                            required:
                                              - kind
                                              - term
                                            additionalProperties: false
                                          - type: object
                                            properties:
                                              kind:
                                                type: string
                                                const: cdp_object
                                              objectType:
                                                type: string
                                              matchAttr:
                                                type: string
                                              matchSelectionPath:
                                                type: string
                                              exists:
                                                type: boolean
                                            required:
                                              - kind
                                              - objectType
                                              - matchAttr
                                              - matchSelectionPath
                                              - exists
                                            additionalProperties: false
                                        description: One decision condition.
                                    description:
                                      type: string
                                  required:
                                    - logic
                                    - conditions
                                  additionalProperties: false
                                  description: Two-way branch. Emits YES / NO.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: CASE
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    selectionPath:
                                      type: string
                                      description: >-
                                        Person attribute (attributes.*) or
                                        extracted field (engagement.extracted.*)
                                        to switch on.
                                    branches:
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          id:
                                            type: string
                                            description: >-
                                              Stable branch id; edge handle is
                                              case:<id>.
                                          value:
                                            type: string
                                            description: Value matched. Unique within the node.
                                          label:
                                            type: string
                                        required:
                                          - id
                                          - value
                                        additionalProperties: false
                                      description: >-
                                        Up to 10 branches. A case:default handle
                                        is always required.
                                    description:
                                      type: string
                                  required:
                                    - selectionPath
                                    - branches
                                  additionalProperties: false
                                  description: N-way switch on a person attribute.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: HTTP_REQUEST
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    method:
                                      type: string
                                      enum:
                                        - GET
                                        - POST
                                        - PUT
                                        - PATCH
                                        - DELETE
                                      description: HTTP method.
                                    url:
                                      type: string
                                      minLength: 1
                                      description: >-
                                        Target URL. Supports {{variable}}
                                        placeholders.
                                    headers:
                                      description: Request headers as key/value pairs.
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          key:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                          - key
                                          - value
                                        additionalProperties: false
                                    body:
                                      description: Request body. mode none sends no body.
                                      type: object
                                      properties:
                                        mode:
                                          type: string
                                          enum:
                                            - none
                                            - json
                                            - raw
                                        content:
                                          type: string
                                        contentType:
                                          type: string
                                      required:
                                        - mode
                                      additionalProperties: false
                                    credentialId:
                                      description: >-
                                        Deprecated/legacy: HttpCredential row id
                                        used to authenticate the request. Prefer
                                        credentialKey.
                                      type: string
                                    credentialKey:
                                      description: >-
                                        Logical credential key; the pinned
                                        environment selects the secret.
                                      type: string
                                    timeoutMs:
                                      description: >-
                                        Request timeout in milliseconds. Max
                                        30000 (30s).
                                      type: integer
                                      exclusiveMinimum: 0
                                      maximum: 30000
                                    maxAttempts:
                                      description: Max attempts including the first. Max 5.
                                      type: integer
                                      exclusiveMinimum: 0
                                      maximum: 5
                                    documentUrlTtlSeconds:
                                      description: >-
                                        TTL (seconds, ≤86400) for presigned
                                        engagement.documents URLs this node
                                        emits. Default 86400.
                                      type: integer
                                      exclusiveMinimum: 0
                                      maximum: 86400
                                  required:
                                    - method
                                    - url
                                  additionalProperties: false
                                  description: >-
                                    Calls an external HTTP endpoint. Emits
                                    SUCCESS or FAILED.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                id:
                                  type: string
                                  minLength: 1
                                  description: Node id, unique within the journey.
                                kind:
                                  type: string
                                  const: EXIT
                                name:
                                  type: string
                                  minLength: 1
                                  description: >-
                                    The label shown on the canvas. Required
                                    before publishing.
                                position:
                                  type: object
                                  properties:
                                    x:
                                      type: number
                                    'y':
                                      type: number
                                  required:
                                    - x
                                    - 'y'
                                  additionalProperties: false
                                  description: >-
                                    Explicit canvas position. Omit it and the
                                    server auto-lays-out the graph top-down;
                                    only set it to preserve a hand-arranged
                                    layout.
                                inputs:
                                  type: object
                                  properties:
                                    outcome:
                                      type: string
                                    nextInitiativeId:
                                      description: Chain into another initiative on exit.
                                      type: string
                                  additionalProperties: false
                                  description: Terminal node.
                              required:
                                - id
                                - kind
                              additionalProperties: false
                        description: >-
                          The nodes. Exactly one ENTRY and at least one EXIT are
                          required to publish.
                      edges:
                        type: array
                        items:
                          type: object
                          properties:
                            from:
                              type: string
                              description: Source node id.
                            to:
                              type: string
                              description: Target node id.
                            sourceHandle:
                              type: string
                              description: >-
                                The emitted signal that activates this edge
                                (e.g. SENT, REPLIED, YES, case:<id>). A handle
                                may wire to at most one node.
                            metadata:
                              type: object
                              properties:
                                signalCategory:
                                  type: string
                                  enum:
                                    - lifecycle
                                    - system
                                signalDescription:
                                  type: string
                              additionalProperties: false
                          required:
                            - from
                            - to
                            - sourceHandle
                          additionalProperties: false
                          description: >-
                            A connection: node `from` routes to `to` when it
                            emits `sourceHandle`.
                        description: The connections between node handles.
                    required:
                      - name
                      - actions
                      - edges
                    additionalProperties: false
                    description: The full journey graph.
                required:
                  - id
                  - initiativeId
                  - status
                  - version
                  - definition
                additionalProperties: false
        '400':
          description: Validation failed or the request cannot proceed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '401':
          description: Missing, malformed, or revoked API key.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '404':
          description: The resource does not exist in this organization.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '409':
          description: >-
            Conflicts with the current state (duplicates, wrong lifecycle
            state).
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '422':
          description: The request is well-formed but semantically invalid.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '429':
          description: Rate limit exceeded — retry after `Retry-After`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '503':
          description: Transient error — retry with a narrower request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Organization API key, sent as `Authorization: Bearer boom_org_...`.'

````