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

# Validate journey

> Dry-run the publish checks against a journey graph without saving. Returns whether it is valid and the list of issues (errors block publishing; warnings are advisory). Use it to iterate a draft to valid before publishing in the app.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/journeys/validate
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/validate:
    post:
      tags:
        - Journeys
      summary: Validate journey
      description: >-
        Dry-run the publish checks against a journey graph without saving.
        Returns whether it is valid and the list of issues (errors block
        publishing; warnings are advisory). Use it to iterate a draft to valid
        before publishing in the app.
      operationId: journeys_validate
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                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:
                - definition
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  valid:
                    type: boolean
                    description: True when there are no error-severity issues.
                  issues:
                    type: array
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                          description: Stable issue code.
                        severity:
                          type: string
                          enum:
                            - error
                            - warning
                          description: error blocks publishing; warning is advisory.
                        nodeId:
                          description: The node this issue is about, if any.
                          type: string
                        message:
                          type: string
                          description: Plain-English explanation.
                      required:
                        - code
                        - severity
                        - message
                      additionalProperties: false
                required:
                  - valid
                  - issues
                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_...`.'

````