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

# Get a workflow node

> Retrieve detailed data for a single workflow node.



## OpenAPI

````yaml https://app.loops.so/openapi.json get /v1/workflows/{workflowId}/nodes/{nodeId}
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.3
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}:
    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 workflow node.
        schema:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
    get:
      tags:
        - Workflow nodes
      summary: Get a workflow node
      description: Retrieve detailed data for a single workflow node.
      operationId: getWorkflowNode
      responses:
        '200':
          description: Successful.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowNodeWithRevision'
        '400':
          description: Invalid `workflowId` or `nodeId`.
          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.
      security:
        - apiKey: []
components:
  schemas:
    WorkflowNodeWithRevision:
      description: >-
        Detailed workflow node returned from read operations. The exact fields
        depend on `typeName`.
      allOf:
        - $ref: '#/components/schemas/WorkflowNode'
        - type: object
          properties:
            workflowRevisionId:
              $ref: '#/components/schemas/NullableWorkflowRevisionId'
          required:
            - workflowRevisionId
    WorkflowFailureResponse:
      type: object
      properties:
        message:
          type: string
      required:
        - message
      examples:
        - message: Workflow not found.
    WorkflowNode:
      oneOf:
        - $ref: '#/components/schemas/SignupTriggerWorkflowNode'
        - $ref: '#/components/schemas/EventTriggerWorkflowNode'
        - $ref: '#/components/schemas/ContactPropertyTriggerWorkflowNode'
        - $ref: '#/components/schemas/AddToListTriggerWorkflowNode'
        - $ref: '#/components/schemas/BlankTriggerWorkflowNode'
        - $ref: '#/components/schemas/AudienceFilterWorkflowNode'
        - $ref: '#/components/schemas/TimerActionWorkflowNode'
        - $ref: '#/components/schemas/SendEmailActionWorkflowNode'
        - $ref: '#/components/schemas/ExitActionWorkflowNode'
        - $ref: '#/components/schemas/BranchWorkflowNode'
        - $ref: '#/components/schemas/ExperimentBranchWorkflowNode'
        - $ref: '#/components/schemas/VariantWorkflowNode'
      discriminator:
        propertyName: typeName
    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.
    SignupTriggerWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        typeName:
          type: string
          enum:
            - SignupTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - id
        - workflowId
        - typeName
        - nextNodeIds
      additionalProperties: false
    EventTriggerWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        typeName:
          type: string
          enum:
            - EventTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        eventName:
          type: string
          examples:
            - signup
          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
        - workflowId
        - typeName
        - nextNodeIds
        - reEligible
      additionalProperties: false
    ContactPropertyTriggerWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        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
        - workflowId
        - typeName
        - nextNodeIds
        - contactPropertyQuery
        - reEligible
      additionalProperties: false
    AddToListTriggerWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        typeName:
          type: string
          enum:
            - AddToListTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        mailingListId:
          type:
            - string
            - 'null'
          examples:
            - clm2k8j4h6g0f8d6s4a2b0z8
            - null
          description: The ID of the mailing list that triggers the workflow.
        reEligible:
          $ref: '#/components/schemas/WorkflowReEligible'
      required:
        - id
        - workflowId
        - typeName
        - nextNodeIds
        - mailingListId
        - reEligible
      additionalProperties: false
    BlankTriggerWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        typeName:
          type: string
          enum:
            - BlankTrigger
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - id
        - workflowId
        - typeName
        - nextNodeIds
      additionalProperties: false
    AudienceFilterWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        typeName:
          type: string
          enum:
            - AudienceFilter
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        audienceFilter:
          $ref: '#/components/schemas/AudienceFilter'
        audienceSegmentId:
          type: string
        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
        - workflowId
        - typeName
        - nextNodeIds
        - appliesDownstream
      additionalProperties: false
    TimerActionWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        typeName:
          type: string
          enum:
            - TimerAction
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        amount:
          $ref: '#/components/schemas/WorkflowTimerAmount'
        unit:
          $ref: '#/components/schemas/WorkflowTimerUnit'
      required:
        - id
        - workflowId
        - typeName
        - nextNodeIds
        - amount
        - unit
      additionalProperties: false
    SendEmailActionWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        typeName:
          type: string
          enum:
            - SendEmailAction
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
        emailMessageId:
          type: string
          examples:
            - cle5f7g9h1i3j5k7l9m1n3p5
          description: >-
            The ID of the email message to send. To edit this email, use the
            `POST /v1/email-messages/{emailMessageId}` endpoint.
        subject:
          type: string
          examples:
            - Welcome to Acme!
      required:
        - id
        - workflowId
        - typeName
        - nextNodeIds
        - emailMessageId
        - subject
      additionalProperties: false
    ExitActionWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        typeName:
          type: string
          enum:
            - ExitAction
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - id
        - workflowId
        - typeName
        - nextNodeIds
      additionalProperties: false
    BranchWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        typeName:
          type: string
          enum:
            - BranchNode
        nextNodeIds:
          $ref: '#/components/schemas/WorkflowNextNodeIds'
      required:
        - id
        - workflowId
        - typeName
        - nextNodeIds
      additionalProperties: false
    ExperimentBranchWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        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
        - workflowId
        - typeName
        - nextNodeIds
        - samplingRate
      additionalProperties: false
    VariantWorkflowNode:
      type: object
      properties:
        id:
          type: string
          examples:
            - cln8p0q2r4s6t8u0v2w4x6z8
        workflowId:
          type: string
          examples:
            - clw1a3b5c7d9e1f3g5h7i9j1
        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
        - workflowId
        - typeName
        - nextNodeIds
      additionalProperties: false
    WorkflowNextNodeIds:
      type: array
      items:
        type: string
      description: The IDs of the nodes that are downstream of this node.
    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

- [Workflows](/docs/cli/workflows.md)
- [Workflows API examples](/docs/api-reference/examples/workflows.md)
- [API Introduction](/docs/api-reference/intro.md)
- [Get a workflow](/docs/api-reference/get-workflow.md)
- [Create a workflow node](/docs/api-reference/create-workflow-node.md)
