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

# Reroute a node connection

> Reroute one existing node connection to another valid target node.

Use this endpoint to modify an existing node connection to another target. Send the source node in the URL path and the new target in the request body.

The source node must have exactly one outgoing connection. Branch and experiment branch nodes cannot be rerouted with this endpoint because they have multiple branch-specific outputs. The current target must still have another incoming connection after the reroute, and the new target must be valid for the source node. The workflow cannot be edited while in a `SENDING` state.


## OpenAPI

````yaml https://app.loops.so/openapi.json post /v1/workflows/{workflowId}/nodes/{nodeId}/reroute
openapi: 3.1.0
info:
  title: Loops OpenAPI Spec
  description: This is the OpenAPI Spec for the [Loops API](https://loops.so/docs/api).
  version: 1.21.6
servers:
  - url: https://app.loops.so/api
security: []
tags:
  - name: API key
  - name: Audience segments
    description: View audience segments
  - name: Campaigns
    description: Create and manage email campaigns
  - name: Campaign groups
    description: Organize campaigns into groups
  - name: Configuration
    description: View configuration settings
  - name: Contacts
    description: Manage contacts in your audience
  - name: Contact properties
    description: Manage contact properties
  - name: Components
    description: View email components
  - name: Email messages
    description: Manage email message content for campaigns
  - name: Events
    description: Trigger workflows with events
  - name: Event patterns
    description: View workflow event patterns
  - name: Mailing lists
    description: View mailing lists
  - name: Themes
    description: View email themes
  - name: Transactional emails
    description: Create, manage, and send transactional emails
  - name: Transactional groups
    description: Organize transactional emails into groups
  - name: Uploads
    description: Upload image assets
  - name: Workflows
    description: View and mutate workflow graphs
  - name: Workflow nodes
    description: View and mutate workflow nodes
  - name: Webhooks
    description: >-
      Events Loops sends to your configured webhook endpoint when certain events
      happen in your account. Configure an endpoint in Settings → Webhooks. Each
      account supports one webhook endpoint. Events are signed with
      `webhook-id`, `webhook-timestamp`, and `webhook-signature` headers and
      delivered at a maximum rate of 10 per second. See
      https://loops.so/docs/webhooks for setup, verification, and payload
      details.
paths:
  /v1/workflows/{workflowId}/nodes/{nodeId}/reroute:
    parameters:
      - name: workflowId
        in: path
        required: true
        description: The ID of the workflow.
        schema:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
      - name: nodeId
        in: path
        required: true
        description: >-
          The ID of the source workflow node whose outgoing connection should be
          moved.
        schema:
          type: string
          examples:
            - cln1a3b5c7d9e1f3g5h7i9j1
    post:
      tags:
        - Workflow nodes
      summary: Reroute a node connection
      description: >-
        Reroute the source node's existing connection to another valid target
        node. Returns the updated source node and the latest workflow.
      operationId: rerouteNodeConnection
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RerouteNodeConnectionRequest'
      responses:
        '200':
          description: Node connection rerouted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RerouteNodeConnectionResponse'
        '400':
          description: >-
            Invalid `workflowId`, `nodeId`, request body, node connection
            selection, reroute target, or workflow state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowFailureResponse'
        '401':
          description: Invalid API key.
        '404':
          description: Workflow or workflow node not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowFailureResponse'
        '405':
          description: Wrong HTTP request method.
        '409':
          description: '`expectedRevisionId` is stale.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowFailureResponse'
      security:
        - apiKey: []
components:
  schemas:
    RerouteNodeConnectionRequest:
      type: object
      description: Reroute the source node's only outgoing connection to `newTargetNodeId`.
      properties:
        expectedRevisionId:
          $ref: '#/components/schemas/WorkflowExpectedRevisionId'
        newTargetNodeId:
          type: string
          description: >-
            The valid workflow node that should receive the connection from the
            source node.
          examples:
            - cln3c5d7e9f1g3h5i7j9k1l3
      required:
        - expectedRevisionId
        - newTargetNodeId
      additionalProperties: false
      examples:
        - expectedRevisionId: clx7a3b5c7d9e1f3g5h7i9j1
          newTargetNodeId: cln3c5d7e9f1g3h5i7j9k1l3
    RerouteNodeConnectionResponse:
      description: The updated source node, plus the latest workflow.
      allOf:
        - $ref: '#/components/schemas/WorkflowMutationNodeWithRevision'
        - type: object
          properties:
            workflow:
              $ref: '#/components/schemas/SimplifiedWorkflow'
          required:
            - workflow
      examples:
        - id: cln8p0q2r4s6t8u0v2w4x6z8
          typeName: SignupTrigger
          nextNodeIds:
            - cln3c5d7e9f1g3h5i7j9k1l3
          workflowRevisionId: clx7a3b5c7d9e1f3g5h7i9j2
          workflow:
            id: clw1a3b5c7d9e1f3g5h7i9j1
            workflowRevisionId: clx7a3b5c7d9e1f3g5h7i9j2
            status: Draft
            name: Welcome series
            description: Onboarding emails for new signups
            mailingListId: clm2k8j4h6g0f8d6s4a2b0z8
            rootNodeId: cln8p0q2r4s6t8u0v2w4x6z8
            nodes:
              cln8p0q2r4s6t8u0v2w4x6z8:
                typeName: SignupTrigger
                nextNodeIds:
                  - cln3c5d7e9f1g3h5i7j9k1l3
              cln1a3b5c7d9e1f3g5h7i9j1:
                typeName: AudienceFilter
                nextNodeIds:
                  - cln3c5d7e9f1g3h5i7j9k1l3
              cln3c5d7e9f1g3h5i7j9k1l3:
                typeName: SendEmailAction
                nextNodeIds: []
                emailMessageId: cle5f7g9h1i3j5k7l9m1n3p5
                subject: Welcome to Acme!
    WorkflowFailureResponse:
      type: object
      properties:
        message:
          type: string
      required:
        - message
      examples:
        - message: Workflow not found.
    WorkflowExpectedRevisionId:
      type:
        - string
        - 'null'
      description: >-
        The workflow revision token returned by the latest workflow read or
        mutation. Older workflows may return `null` before their first
        revision-aware mutation; pass `null` back as `expectedRevisionId` in
        that case. If the token is stale, the API returns a `409 Conflict`
        error.
    WorkflowMutationNodeWithRevision:
      description: >-
        Detailed workflow node returned from a mutation, plus the latest
        workflow revision token.
      oneOf:
        - $ref: '#/components/schemas/SignupTriggerWorkflowMutationNodeWithRevision'
        - $ref: '#/components/schemas/EventTriggerWorkflowMutationNodeWithRevision'
        - $ref: >-
            #/components/schemas/ContactPropertyTriggerWorkflowMutationNodeWithRevision
        - $ref: >-
            #/components/schemas/AddToListTriggerWorkflowMutationNodeWithRevision
        - $ref: '#/components/schemas/BlankTriggerWorkflowMutationNodeWithRevision'
        - $ref: '#/components/schemas/AudienceFilterWorkflowMutationNodeWithRevision'
        - $ref: '#/components/schemas/TimerActionWorkflowMutationNodeWithRevision'
        - $ref: '#/components/schemas/SendEmailActionWorkflowMutationNodeWithRevision'
        - $ref: '#/components/schemas/ExitActionWorkflowMutationNodeWithRevision'
        - $ref: '#/components/schemas/BranchWorkflowMutationNodeWithRevision'
        - $ref: >-
            #/components/schemas/ExperimentBranchWorkflowMutationNodeWithRevision
        - $ref: '#/components/schemas/VariantWorkflowMutationNodeWithRevision'
      discriminator:
        propertyName: typeName
        mapping:
          SignupTrigger:
            $ref: '#/components/schemas/SignupTriggerWorkflowMutationNodeWithRevision'
          EventTrigger:
            $ref: '#/components/schemas/EventTriggerWorkflowMutationNodeWithRevision'
          ContactPropertyTrigger:
            $ref: >-
              #/components/schemas/ContactPropertyTriggerWorkflowMutationNodeWithRevision
          AddToListTrigger:
            $ref: >-
              #/components/schemas/AddToListTriggerWorkflowMutationNodeWithRevision
          BlankTrigger:
            $ref: '#/components/schemas/BlankTriggerWorkflowMutationNodeWithRevision'
          AudienceFilter:
            $ref: >-
              #/components/schemas/AudienceFilterWorkflowMutationNodeWithRevision
          TimerAction:
            $ref: '#/components/schemas/TimerActionWorkflowMutationNodeWithRevision'
          SendEmailAction:
            $ref: >-
              #/components/schemas/SendEmailActionWorkflowMutationNodeWithRevision
          ExitAction:
            $ref: '#/components/schemas/ExitActionWorkflowMutationNodeWithRevision'
          BranchNode:
            $ref: '#/components/schemas/BranchWorkflowMutationNodeWithRevision'
          ExperimentBranchNode:
            $ref: >-
              #/components/schemas/ExperimentBranchWorkflowMutationNodeWithRevision
          VariantNode:
            $ref: '#/components/schemas/VariantWorkflowMutationNodeWithRevision'
    SimplifiedWorkflow:
      type: object
      properties:
        id:
          type: string
          description: The ID of the workflow.
        workflowRevisionId:
          $ref: '#/components/schemas/NullableWorkflowRevisionId'
        status:
          type: string
          enum:
            - Draft
            - Sending
            - Paused
            - PausedAndQueueing
        name:
          type: string
          description: The name of the workflow.
        description:
          type: string
          description: The description of the workflow.
        mailingListId:
          type:
            - string
            - 'null'
          description: The ID of the mailing list the workflow sends to.
        rootNodeId:
          type: string
          description: The ID of the root node in the workflow graph.
        nodes:
          type: object
          description: >-
            A map of node IDs to simplified node objects. Each node includes
            `typeName` and `nextNodeIds`, plus type-specific fields when
            present. To get the full node object, use the `GET
            /v1/workflows/{workflowId}/nodes/{nodeId}` endpoint.
          additionalProperties:
            $ref: '#/components/schemas/SimplifiedWorkflowNode'
          example:
            cf16k73gq014h3mmj5b6jdi9r:
              typeName: SignupTrigger
              nextNodeIds:
                - cf16k73gq014h3mmj5b4jdifg
                - cf16k73gq014h3mmj5b4jdifh
      required:
        - id
        - workflowRevisionId
        - status
        - mailingListId
        - rootNodeId
        - nodes
      examples:
        - id: clw1a3b5c7d9e1f3g5h7i9j1
          status: Draft
          name: Welcome series
          description: Onboarding emails for new signups
          mailingListId: clm2k8j4h6g0f8d6s4a2b0z8
          rootNodeId: cln8p0q2r4s6t8u0v2w4x6z8
          nodes:
            cln8p0q2r4s6t8u0v2w4x6z8:
              typeName: SignupTrigger
              nextNodeIds:
                - cln1a3b5c7d9e1f3g5h7i9j1
            cln1a3b5c7d9e1f3g5h7i9j1:
              typeName: SendEmailAction
              nextNodeIds: []
              emailMessageId: cle5f7g9h1i3j5k7l9m1n3p5
              subject: Welcome to Acme!
    SignupTriggerWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/SignupTriggerWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    EventTriggerWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/EventTriggerWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    ContactPropertyTriggerWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/ContactPropertyTriggerWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    AddToListTriggerWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/AddToListTriggerWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    BlankTriggerWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/BlankTriggerWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    AudienceFilterWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/AudienceFilterWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    TimerActionWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/TimerActionWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    SendEmailActionWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/SendEmailActionWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    ExitActionWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/ExitActionWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    BranchWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/BranchWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    ExperimentBranchWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/ExperimentBranchWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    VariantWorkflowMutationNodeWithRevision:
      allOf:
        - $ref: '#/components/schemas/VariantWorkflowMutationNode'
        - $ref: '#/components/schemas/WorkflowMutationNodeRevision'
    NullableWorkflowRevisionId:
      type:
        - string
        - 'null'
      description: >-
        The current workflow revision token. Pass the latest value as
        `expectedRevisionId` on the next workflow mutation. Will be `null` for
        workflows without a revision token yet.
    SimplifiedWorkflowNode:
      oneOf:
        - $ref: '#/components/schemas/SimplifiedSignupTriggerWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedEventTriggerWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedContactPropertyTriggerWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedAddToListTriggerWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedBlankTriggerWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedAudienceFilterWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedTimerActionWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedSendEmailActionWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedExitActionWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedBranchWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedExperimentBranchWorkflowNode'
        - $ref: '#/components/schemas/SimplifiedVariantWorkflowNode'
      discriminator:
        propertyName: typeName
    SignupTriggerWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - SignupTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - id
        - typeName
        - nextNodeIds
    WorkflowMutationNodeRevision:
      type: object
      properties:
        workflowRevisionId:
          $ref: '#/components/schemas/WorkflowRevisionId'
      required:
        - workflowRevisionId
    EventTriggerWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - EventTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        eventName:
          type: string
          description: The name of the event pattern that triggers this node.
        eventProperties:
          type: array
          items:
            $ref: '#/components/schemas/WorkflowEventProperty'
          description: The properties of the event pattern, which can be used in emails.
        reEligible:
          $ref: '#/components/schemas/WorkflowReEligible'
      required:
        - id
        - typeName
        - nextNodeIds
        - reEligible
    ContactPropertyTriggerWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - ContactPropertyTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        contactPropertyQuery:
          oneOf:
            - $ref: '#/components/schemas/WorkflowContactPropertyQuery'
            - type: 'null'
        reEligible:
          $ref: '#/components/schemas/WorkflowReEligible'
      required:
        - id
        - typeName
        - nextNodeIds
        - contactPropertyQuery
        - reEligible
    AddToListTriggerWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - AddToListTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        mailingListId:
          type:
            - string
            - 'null'
          description: The ID of the mailing list this trigger sends to, if set.
        reEligible:
          $ref: '#/components/schemas/WorkflowReEligible'
      required:
        - id
        - typeName
        - nextNodeIds
        - mailingListId
        - reEligible
    BlankTriggerWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - BlankTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - id
        - typeName
        - nextNodeIds
    AudienceFilterWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - AudienceFilter
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        audienceFilter:
          $ref: '#/components/schemas/AudienceFilter'
        audienceSegmentId:
          type: string
          description: The ID of the audience segment this trigger targets.
        appliesDownstream:
          description: >-
            If `true`, the audience filter will apply to all downstream nodes.
            If `false`, the audience filter will only apply to the current node.
            Matches the "Filter scope" option in the UI.
          type: boolean
      required:
        - id
        - typeName
        - nextNodeIds
        - appliesDownstream
    TimerActionWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - TimerAction
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        amount:
          $ref: '#/components/schemas/WorkflowTimerAmount'
        unit:
          $ref: '#/components/schemas/WorkflowTimerUnit'
      required:
        - id
        - typeName
        - nextNodeIds
        - amount
        - unit
    SendEmailActionWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - SendEmailAction
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        emailMessageId:
          type: string
          description: >-
            The ID of the email message to send. To edit this email, use the
            `POST /v1/email-messages/{emailMessageId}` endpoint.
        subject:
          type: string
      required:
        - id
        - typeName
        - nextNodeIds
        - emailMessageId
        - subject
    ExitActionWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - ExitAction
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - id
        - typeName
        - nextNodeIds
    BranchWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - BranchNode
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - id
        - typeName
        - nextNodeIds
    ExperimentBranchWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - ExperimentBranchNode
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        samplingRate:
          type: number
          description: >-
            The percentage of contacts that will be sent to variant branches,
            between `0` and `100`. The remaining percentage will be sent to the
            control branch. `100` sends all contacts to variant branches.
      required:
        - id
        - typeName
        - nextNodeIds
        - samplingRate
    VariantWorkflowMutationNode:
      type: object
      properties:
        id:
          type: string
        typeName:
          type: string
          enum:
            - VariantNode
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        isControl:
          type: boolean
          description: Whether this is the control variant of an experiment.
      required:
        - id
        - typeName
        - nextNodeIds
    SimplifiedSignupTriggerWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - SignupTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - typeName
        - nextNodeIds
      additionalProperties: false
    SimplifiedEventTriggerWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - EventTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        eventName:
          type:
            - string
            - 'null'
          description: The name of the event that triggers the workflow.
        reEligible:
          $ref: '#/components/schemas/WorkflowReEligible'
      required:
        - typeName
        - nextNodeIds
        - eventName
        - reEligible
      additionalProperties: false
      examples:
        - typeName: EventTrigger
          nextNodeIds:
            - cln1a3b5c7d9e1f3g5h7i9j1
          eventName: signup
          reEligible: false
    SimplifiedContactPropertyTriggerWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - ContactPropertyTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        contactPropertyQuery:
          oneOf:
            - $ref: '#/components/schemas/WorkflowContactPropertyQuery'
            - type: 'null'
        reEligible:
          $ref: '#/components/schemas/WorkflowReEligible'
      required:
        - typeName
        - nextNodeIds
        - contactPropertyQuery
        - reEligible
      additionalProperties: false
    SimplifiedAddToListTriggerWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - AddToListTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        mailingListId:
          type:
            - string
            - 'null'
          description: The ID of the mailing list that triggers the workflow.
        reEligible:
          $ref: '#/components/schemas/WorkflowReEligible'
      required:
        - typeName
        - nextNodeIds
        - mailingListId
        - reEligible
      additionalProperties: false
    SimplifiedBlankTriggerWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - BlankTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - typeName
        - nextNodeIds
      additionalProperties: false
    SimplifiedAudienceFilterWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - AudienceFilter
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - typeName
        - nextNodeIds
      additionalProperties: false
    SimplifiedTimerActionWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - TimerAction
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        amount:
          $ref: '#/components/schemas/WorkflowTimerAmount'
        unit:
          $ref: '#/components/schemas/WorkflowTimerUnit'
      required:
        - typeName
        - nextNodeIds
        - amount
        - unit
      additionalProperties: false
      examples:
        - typeName: TimerAction
          nextNodeIds:
            - cln1a3b5c7d9e1f3g5h7i9j1
          amount: 2
          unit: d
    SimplifiedSendEmailActionWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - SendEmailAction
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        emailMessageId:
          type:
            - string
            - 'null'
          description: >-
            The ID of the email message to send. To edit this email, use the
            `POST /v1/email-messages/{emailMessageId}` endpoint.
        subject:
          type: string
          description: The subject of the email message (reference only).
      required:
        - typeName
        - nextNodeIds
        - emailMessageId
        - subject
      additionalProperties: false
      examples:
        - typeName: SendEmailAction
          nextNodeIds: []
          emailMessageId: cle5f7g9h1i3j5k7l9m1n3p5
          subject: Welcome to Acme!
    SimplifiedExitActionWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - ExitAction
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - typeName
        - nextNodeIds
      additionalProperties: false
    SimplifiedBranchWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - BranchNode
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - typeName
        - nextNodeIds
      additionalProperties: false
    SimplifiedExperimentBranchWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - ExperimentBranchNode
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        samplingRate:
          type: number
          description: >-
            The percentage of contacts that will be sent to variant branches,
            between `0` and `100`. The remaining percentage will be sent to the
            control branch.
      required:
        - typeName
        - nextNodeIds
        - samplingRate
      additionalProperties: false
    SimplifiedVariantWorkflowNode:
      type: object
      properties:
        typeName:
          type: string
          enum:
            - VariantNode
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        isControl:
          type: boolean
          description: Whether this is the control variant of an experiment.
      required:
        - typeName
        - nextNodeIds
        - isControl
      additionalProperties: false
    WorkflowNextNodeIds:
      type: array
      items:
        type: string
      description: The IDs of the nodes that are downstream of this node.
    WorkflowRevisionId:
      type:
        - string
      description: >-
        The current workflow revision token. Pass the latest value as
        `expectedRevisionId` on the next workflow mutation.
    WorkflowEventProperty:
      type: object
      properties:
        name:
          type: string
        type:
          type: string
          enum:
            - string
            - number
            - boolean
            - date
      required:
        - name
        - type
    WorkflowReEligible:
      type: boolean
      description: >-
        If `true`, the contacts will be able to enter this workflow every time
        the trigger is matched. If `false`, contacts will only ever enter this
        workflow once. Matches the "Trigger frequency" option in the UI.
    WorkflowContactPropertyQuery:
      type: object
      description: >-
        Define the contact property change that triggers the workflow. In update
        requests, `key` must resolve to an existing contact property that is
        available for Contact Updated triggers. Hidden or unsupported fields,
        such as `createdAt`, `notes`, and computed contact properties, are
        rejected.
      properties:
        key:
          type: string
          description: >-
            The camel-cased `key` of the contact property to query. The property
            must exist for the team and must be available for Contact Updated
            triggers.
          examples:
            - firstName
            - email
            - planName
        is:
          $ref: '#/components/schemas/WorkflowContactPropertyComparison'
          description: Comparison for the new contact property value after the update.
        was:
          $ref: '#/components/schemas/WorkflowContactPropertyComparison'
          description: >-
            Comparison for the previous contact property value before the
            update.
      required:
        - key
        - is
        - was
    AudienceFilter:
      type:
        - object
        - 'null'
      description: A tree of audience conditions combined with `match`.
      properties:
        match:
          type: string
          enum:
            - all
            - any
        conditions:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/AudienceFilterCondition'
      required:
        - match
        - conditions
      additionalProperties: false
    WorkflowTimerAmount:
      type: number
      description: >-
        The amount of time to wait before triggering the next node. Set to `0`
        to move to the next node immediately.
    WorkflowTimerUnit:
      type: string
      enum:
        - m
        - h
        - d
      description: >-
        The unit of time for the timer action node. m = minutes, h = hours, d =
        days.
    WorkflowContactPropertyComparison:
      type: object
      description: >-
        For Contact Updated triggers, the API validates `operator` against the
        selected contact property's type and the side of the comparison. The
        `was` comparison can use any operator supported by the selected property
        type. The `is` comparison uses the same operators, except number and
        boolean properties cannot use `empty`. String properties support `any`,
        `equal`, `not_equal`, `contains`, `not_contains`, `empty`, and
        `not_empty`. Number properties support `any`, `greater_than`,
        `less_than`, `numeric_equal`, `numeric_not_equal`, `empty`, and
        `not_empty`. Boolean properties support `any`, `true`, `false`, `empty`,
        and `not_empty`. Date properties support `any`, `empty`, `not_empty`,
        `after`, `before`, and `between`.
      properties:
        value:
          oneOf:
            - type: string
            - type: number
            - type: boolean
        operator:
          type: string
          description: >-
            The comparison operator. It must be valid for the selected contact
            property's type and for the `is` or `was` side of the comparison.
            Number and boolean properties allow `empty` on `was`, but not on
            `is`.
          enum:
            - any
            - contains
            - not_contains
            - empty
            - not_empty
            - equal
            - not_equal
            - greater_than
            - less_than
            - 'true'
            - 'false'
            - numeric_equal
            - numeric_not_equal
            - after
            - before
            - between
      required:
        - value
        - operator
    AudienceFilterCondition:
      oneOf:
        - $ref: '#/components/schemas/PropertyCondition'
        - $ref: '#/components/schemas/OptInCondition'
        - $ref: '#/components/schemas/ActivityCondition'
      discriminator:
        propertyName: type
    PropertyCondition:
      type: object
      description: Matches contacts by a property value.
      properties:
        type:
          type: string
          enum:
            - property
        key:
          type: string
          description: The contact property name.
        operator:
          type: string
          enum:
            - any
            - contains
            - notContains
            - equals
            - notEquals
            - greaterThan
            - lessThan
            - isTrue
            - isFalse
            - empty
            - notEmpty
            - dateEmpty
            - dateNotEmpty
            - after
            - before
            - between
        value:
          description: >-
            The comparison value. Omitted for value-less operators (e.g.
            `isTrue`, `empty`). A `{ from, to }` object for `between`.
          oneOf:
            - type: string
            - type: number
            - type: object
              properties:
                from:
                  type: string
                  format: date-time
                to:
                  type: string
                  format: date-time
              required:
                - from
                - to
      required:
        - type
        - key
        - operator
      examples:
        - type: property
          key: plan
          operator: equals
          value: pro
    OptInCondition:
      type: object
      description: Matches contacts by mailing-list opt-in status.
      properties:
        type:
          type: string
          enum:
            - optIn
        status:
          type:
            - string
            - 'null'
          enum:
            - accepted
            - pending
            - rejected
            - null
      required:
        - type
        - status
      examples:
        - type: optIn
          status: accepted
    ActivityCondition:
      type: object
      description: Matches contacts by their activity on a campaign or workflow.
      properties:
        type:
          type: string
          enum:
            - activity
        action:
          type: string
          enum:
            - sent
            - opened
            - clicked
        negate:
          type: boolean
        target:
          type: string
          enum:
            - campaign
            - workflow
            - workflowEmail
        id:
          type: string
          description: The ID of the campaign, workflow, or workflow email.
      required:
        - type
        - action
        - negate
        - target
        - id
      examples:
        - type: activity
          action: opened
          negate: false
          target: campaign
          id: clc4m6n8p0q2r4s6t8u0v2x4
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer

````

## Related topics

- [Branching workflows](/docs/workflows/branching.md)
- [Create a workflow node](/docs/api-reference/create-workflow-node.md)
- [Workflows API examples](/docs/api-reference/examples/workflows.md)
- [Get a workflow](/docs/api-reference/get-workflow.md)
- [Set up a welcome email sequence for new Ghost members](/docs/guides/ghost-email-sequence.md)
