Skip to main content
GET
/
v1
/
workflows
/
{workflowId}
/
nodes
/
{nodeId}
Get workflow node details
curl --request GET \
  --url https://app.loops.so/api/v1/workflows/{workflowId}/nodes/{nodeId} \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://app.loops.so/api/v1/workflows/{workflowId}/nodes/{nodeId}"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://app.loops.so/api/v1/workflows/{workflowId}/nodes/{nodeId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://app.loops.so/api/v1/workflows/{workflowId}/nodes/{nodeId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://app.loops.so/api/v1/workflows/{workflowId}/nodes/{nodeId}"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("Authorization", "Bearer <token>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://app.loops.so/api/v1/workflows/{workflowId}/nodes/{nodeId}")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://app.loops.so/api/v1/workflows/{workflowId}/nodes/{nodeId}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
{
  "id": "clt6e0v2x010yl70h1i2j3k4l",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "SignupTrigger",
  "nextNodeIds": ["clt7f1w3y011yl70m5n6o7p8q"]
}
{
  "id": "clu0i4z6b014yl70t1u2v3w4x",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "EventTrigger",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "eventName": "purchase_completed",
  "eventProperties": [
    { "name": "productId", "type": "string" },
    { "name": "amount", "type": "number" }
  ],
  "reEligible": false
}
{
  "id": "clu1j5a7c015yl70u3v4w5x6y",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "ContactPropertyTrigger",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "contactPropertyQuery": {
    "key": "plan",
    "is": {
      "value": "pro",
      "operator": "equal"
    },
    "was": {
      "value": "free",
      "operator": "equal"
    }
  },
  "reEligible": true
}
{
  "id": "clu2k6b8d016yl70v5w6x7y8z",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "AddToListTrigger",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "mailingListId": "cm06f5v0e45nf0ml5754o9cix",
  "reEligible": false
}
{
  "id": "clu3l7c9e017yl70w7x8y9z0a",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "BlankTrigger",
  "nextNodeIds": []
}
{
  "id": "clu4m8d0f018yl70x9y0z1a2b",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "AudienceFilter",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "audienceFilter": {
    "match": "all",
    "conditions": [
      {
        "type": "property",
        "key": "plan",
        "operator": "equals",
        "value": "pro"
      }
    ]
  },
  "audienceSegmentId": "clr4c8t0v008yl70x3y4z5a6b"
}
{
  "id": "clt7f1w3y011yl70m5n6o7p8q",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "TimerAction",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "amount": 1,
  "unit": "d"
}
{
  "id": "clt8g2x4z012yl70n5o6p7q8r",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "SendEmailAction",
  "nextNodeIds": ["clt9h3y5a013yl70s9t0u1v2w"],
  "emailMessageId": "cmn5zia4i0017tzli8ric8giv",
  "subject": "Welcome to Loops"
}
{
  "id": "clt9h3y5a013yl70s9t0u1v2w",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "ExitAction",
  "nextNodeIds": []
}
{
  "id": "clu5n9e1g019yl70y1z2a3b4c",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "BranchNode",
  "nextNodeIds": ["clu7p1g3i021yl70a5b6c7d8e", "clu8q2h4j022yl70b7c8d9e0f"],
  "evalStrategy": "first_match"
}
{
  "id": "clu6o0f2h020yl70z3a4b5c6d",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "ExperimentBranchNode",
  "nextNodeIds": ["clu7p1g3i021yl70a5b6c7d8e", "clu8q2h4j022yl70b7c8d9e0f"],
  "samplingRate": 50,
  "url": "https://example.com/webhook",
  "experimentId": "clw2x7y9p028yl70g9h0i1j2k",
  "experimentType": "autosplit"
}
{
  "id": "clu7p1g3i021yl70a5b6c7d8e",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "VariantNode",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "variantId": "clw3y8z0q029yl70h1i2j3k4l",
  "isControl": true
}
{
  "message": "Workflow node not found."
}
Workflow API endpoints are currently in alpha and are subject to change.

Request

Path parameters

workflowId
string
required
The ID of the workflow.
nodeId
string
required
The ID of the workflow node.

Response

Success

The response body is a workflow node. The shape depends on typeName.

Error

A 400 Bad Request is returned if workflowId or nodeId is invalid. A 404 Not Found is returned if the workflow or node does not exist. If the API key is invalid (or workflow API is not enabled for your team), a 401 Unauthorized is returned.
message
string
required
An error message describing what went wrong.
{
  "id": "clt6e0v2x010yl70h1i2j3k4l",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "SignupTrigger",
  "nextNodeIds": ["clt7f1w3y011yl70m5n6o7p8q"]
}
{
  "id": "clu0i4z6b014yl70t1u2v3w4x",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "EventTrigger",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "eventName": "purchase_completed",
  "eventProperties": [
    { "name": "productId", "type": "string" },
    { "name": "amount", "type": "number" }
  ],
  "reEligible": false
}
{
  "id": "clu1j5a7c015yl70u3v4w5x6y",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "ContactPropertyTrigger",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "contactPropertyQuery": {
    "key": "plan",
    "is": {
      "value": "pro",
      "operator": "equal"
    },
    "was": {
      "value": "free",
      "operator": "equal"
    }
  },
  "reEligible": true
}
{
  "id": "clu2k6b8d016yl70v5w6x7y8z",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "AddToListTrigger",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "mailingListId": "cm06f5v0e45nf0ml5754o9cix",
  "reEligible": false
}
{
  "id": "clu3l7c9e017yl70w7x8y9z0a",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "BlankTrigger",
  "nextNodeIds": []
}
{
  "id": "clu4m8d0f018yl70x9y0z1a2b",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "AudienceFilter",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "audienceFilter": {
    "match": "all",
    "conditions": [
      {
        "type": "property",
        "key": "plan",
        "operator": "equals",
        "value": "pro"
      }
    ]
  },
  "audienceSegmentId": "clr4c8t0v008yl70x3y4z5a6b"
}
{
  "id": "clt7f1w3y011yl70m5n6o7p8q",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "TimerAction",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "amount": 1,
  "unit": "d"
}
{
  "id": "clt8g2x4z012yl70n5o6p7q8r",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "SendEmailAction",
  "nextNodeIds": ["clt9h3y5a013yl70s9t0u1v2w"],
  "emailMessageId": "cmn5zia4i0017tzli8ric8giv",
  "subject": "Welcome to Loops"
}
{
  "id": "clt9h3y5a013yl70s9t0u1v2w",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "ExitAction",
  "nextNodeIds": []
}
{
  "id": "clu5n9e1g019yl70y1z2a3b4c",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "BranchNode",
  "nextNodeIds": ["clu7p1g3i021yl70a5b6c7d8e", "clu8q2h4j022yl70b7c8d9e0f"],
  "evalStrategy": "first_match"
}
{
  "id": "clu6o0f2h020yl70z3a4b5c6d",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "ExperimentBranchNode",
  "nextNodeIds": ["clu7p1g3i021yl70a5b6c7d8e", "clu8q2h4j022yl70b7c8d9e0f"],
  "samplingRate": 50,
  "url": "https://example.com/webhook",
  "experimentId": "clw2x7y9p028yl70g9h0i1j2k",
  "experimentType": "autosplit"
}
{
  "id": "clu7p1g3i021yl70a5b6c7d8e",
  "workflowId": "cls5d9u1w009yl70c7d8e9f0g",
  "typeName": "VariantNode",
  "nextNodeIds": ["clt8g2x4z012yl70n5o6p7q8r"],
  "variantId": "clw3y8z0q029yl70h1i2j3k4l",
  "isControl": true
}
{
  "message": "Workflow node not found."
}
Last modified on June 30, 2026