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

# Create draft

> Create a new draft journey on an initiative from a full graph. The draft is editable and does not run until published (which is done in the app). Omit node positions and the server lays the graph out automatically.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/journeys
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:
    post:
      tags:
        - Journeys
      summary: Create draft
      description: >-
        Create a new draft journey on an initiative from a full graph. The draft
        is editable and does not run until published (which is done in the app).
        Omit node positions and the server lays the graph out automatically.
      operationId: journeys_create_draft
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                initiativeId:
                  type: string
                  minLength: 1
                  description: The initiative to attach the new draft journey to.
                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
                      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'
                                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: >-
                                      Rolling idle window (e.g. '12h'), resets
                                      on each inbound message. After this much
                                      silence the node routes INACTIVE
                                      (extracts, does not close). Range 1h–24h;
                                      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
                      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
                        required:
                          - from
                          - to
                          - sourceHandle
                        description: >-
                          A connection: node `from` routes to `to` when it emits
                          `sourceHandle`.
                      description: The connections between node handles.
                  required:
                    - name
                    - actions
                    - edges
                  description: >-
                    The full journey graph. Drafts may be incomplete; run
                    journeys_validate before publishing.
              required:
                - initiativeId
                - definition
      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: >-
                                        Rolling idle window (e.g. '12h'), resets
                                        on each inbound message. After this much
                                        silence the node routes INACTIVE
                                        (extracts, does not close). Range
                                        1h–24h; 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_...`.'

````