Sequences
Get Sequence
Get sequence metadata, graph topology, and editable email steps
GET
/
api
/
v1
/
sequences
/
{sequenceId}
Get Sequence
curl --request GET \
--url https://api.sequenzy.com/api/v1/sequences/{sequenceId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/sequences/{sequenceId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sequenzy.com/api/v1/sequences/{sequenceId}', 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://api.sequenzy.com/api/v1/sequences/{sequenceId}",
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://api.sequenzy.com/api/v1/sequences/{sequenceId}"
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://api.sequenzy.com/api/v1/sequences/{sequenceId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/sequences/{sequenceId}")
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{
"success": true,
"sequence": {
"id": "seq_abc123",
"name": "Welcome Sequence",
"status": "active",
"enrollmentPaused": false,
"effectiveStatus": "live",
"acceptsNewEnrollments": true,
"processesExistingEnrollments": true,
"effectiveStatusSummary": "Live. New subscribers enroll and existing recipients keep receiving steps.",
"trigger": "trigger_list",
"senderProfileId": "sender_abc123",
"fromName": "Acme",
"fromEmail": "hello@example.com",
"replyProfileId": "reply_abc123",
"replyToName": "Support",
"replyToEmail": "support@example.com",
"sendingWindow": {
"enabled": true,
"timezone": "Europe/Kiev",
"startTime": "08:00",
"endTime": "20:00",
"days": ["monday", "tuesday", "wednesday", "thursday", "friday"]
},
"graphRevision": "48ab6d78a2d4f2b7d2d36d8e1dba9ea3f411bb65059b627a2b8268b4e81d8f7a",
"nodes": [
{
"id": "node_trigger",
"nodeType": "trigger_list",
"config": { "triggerType": "contact_added" }
},
{
"id": "node_abc123",
"nodeType": "action_email",
"structuralStepNumber": 1,
"config": {
"emailId": "email_abc123",
"stepNumber": 1,
"emailPreset": "minimal",
"emailTheme": { "presetId": "soft", "colors": { "background": "#ffffff" } }
}
},
{
"id": "node_end",
"nodeType": "action_webhook",
"config": { "isEndNode": true }
}
],
"edges": [
{
"sourceNodeId": "node_trigger",
"targetNodeId": "node_abc123"
},
{
"sourceNodeId": "node_abc123",
"targetNodeId": "node_end"
}
],
"emails": [
{
"nodeId": "node_abc123",
"emailId": "email_abc123",
"stepNumber": 1,
"structuralStepNumber": 1,
"name": "Welcome Sequence - Email 1",
"subject": "Welcome to Acme",
"previewText": null,
"emailPreset": "minimal",
"emailTheme": { "presetId": "soft", "colors": { "background": "#ffffff" } },
"delayNodeId": null,
"delayMode": null,
"delayMs": null,
"waitUntil": null,
"waitUntilWeekday": null,
"delayDisplay": null,
"delayDescription": null,
"blocks": [],
"nodeType": "action_email",
"abTest": null
},
{
"nodeId": "node_def456",
"nodeType": "action_ab_test",
"emailId": "email_variant_a",
"stepNumber": 2,
"name": "Welcome Sequence - Email 2 Variant A",
"subject": "Still thinking it over?",
"previewText": null,
"emailPreset": "minimal",
"emailTheme": null,
"blocks": [],
"abTest": {
"id": "ab_abc123",
"name": "A/B Test - Follow-up",
"status": "testing",
"testType": "content",
"winnerCriteria": "click_rate",
"winnerThreshold": 100,
"winningVariantId": null,
"variantCount": 2,
"variants": [
{
"variantId": "var_a",
"variantLabel": "A",
"emailId": "email_variant_a",
"subject": "Still thinking it over?",
"previewText": null,
"isWinner": false,
"blockCount": 1,
"blocks": [
{
"id": "control",
"type": "text",
"content": "<p>Still thinking it over?</p>"
}
]
},
{
"variantId": "var_b",
"variantLabel": "B",
"emailId": "email_variant_b",
"subject": "Your pick is waiting",
"previewText": null,
"isWinner": false,
"blockCount": 1,
"blocks": [
{
"id": "challenger",
"type": "text",
"content": "<p>Your pick is waiting</p>"
}
]
}
],
"contentEditing": {
"readTool": "get_ab_test",
"writeTool": "update_ab_test_variant",
"requiredScopes": ["ab_tests:read", "ab_tests:write", "sequences:write"],
"note": "This step's copy lives on the A/B test variants..."
}
}
}
],
"createdAt": "2026-04-20T10:00:00.000Z",
"enrichmentStatus": "complete",
"emailCount": 2,
"abTestCount": 1,
"enrichedCount": 2
}
}
{
"error": "Invalid API key"
}
{
"error": "No companies found. Create a company first using the create_company tool."
}
{
"error": "Sequence not found"
}
Get Sequence
Returns one sequence with its automation nodes, edges, graph revision, and editable email steps. PassgraphRevision back with graphEdit when updating
the topology so a stale client cannot overwrite a newer graph change. Each
linked email includes its effective emailPreset (branded or minimal), the
same value shown under Style > Format in the dashboard. Native block emails
can include supported custom HTML blocks and still return their format. An email
stored entirely as one standalone raw HTML block returns null. Each email
step also returns emailTheme, the theme override stored on that one email;
null means the step has no override and renders on the company theme.
emails covers every email-sending step, including steps converted to an A/B
test. Those return nodeType: "action_ab_test" plus an abTest object with the
test id, status, and one entry per variant. Their step-level subject,
previewText, and blocks are control variant A only. With ab_tests:read,
each abTest.variants[] entry includes that variant’s full blocks, so a
sequence read is enough to audit competing copy. get_ab_test still returns the
full test record (settings, localization, stats). Change variant copy with
Update Variant. That read-and-update
workflow needs ab_tests:read, ab_tests:write, and sequences:write.
emailCount counts these steps too, and
abTestCount reports how many of them are A/B steps.
Keys with sequences:read but without ab_tests:read still receive the A/B
step and its control copy. The nested abTest summary keeps the configured test
id and editing guidance, but redacts the test record and competing variants;
its name and status are null, and variants is empty.
Each linked email includes both stepNumber, the legacy stored ordinal retained
for backward compatibility, and structuralStepNumber, its graph-derived
position. Email nodes expose the same read-only value at
nodes[].structuralStepNumber, outside their editable config. Use the structural
value for UI labels and sequence analysis. Emails in parallel branches
intentionally share the same structural depth; after unequal branches merge,
depth continues from the longer incoming path.
Read effectiveStatus (draft, live, enrollment_paused, paused, or
archived) to know whether the sequence is running. status alone still reads
active while new enrollments are paused. See
List Sequences for the full mapping, and note
that triggerConfig.active is a legacy field the runtime ignores - it mirrors
acceptsNewEnrollments.
Request
string
required
Sequence ID.
curl "https://api.sequenzy.com/api/v1/sequences/seq_abc123" \
-H "Authorization: Bearer seq_live_xxx"
Responses
{
"success": true,
"sequence": {
"id": "seq_abc123",
"name": "Welcome Sequence",
"status": "active",
"enrollmentPaused": false,
"effectiveStatus": "live",
"acceptsNewEnrollments": true,
"processesExistingEnrollments": true,
"effectiveStatusSummary": "Live. New subscribers enroll and existing recipients keep receiving steps.",
"trigger": "trigger_list",
"senderProfileId": "sender_abc123",
"fromName": "Acme",
"fromEmail": "hello@example.com",
"replyProfileId": "reply_abc123",
"replyToName": "Support",
"replyToEmail": "support@example.com",
"sendingWindow": {
"enabled": true,
"timezone": "Europe/Kiev",
"startTime": "08:00",
"endTime": "20:00",
"days": ["monday", "tuesday", "wednesday", "thursday", "friday"]
},
"graphRevision": "48ab6d78a2d4f2b7d2d36d8e1dba9ea3f411bb65059b627a2b8268b4e81d8f7a",
"nodes": [
{
"id": "node_trigger",
"nodeType": "trigger_list",
"config": { "triggerType": "contact_added" }
},
{
"id": "node_abc123",
"nodeType": "action_email",
"structuralStepNumber": 1,
"config": {
"emailId": "email_abc123",
"stepNumber": 1,
"emailPreset": "minimal",
"emailTheme": { "presetId": "soft", "colors": { "background": "#ffffff" } }
}
},
{
"id": "node_end",
"nodeType": "action_webhook",
"config": { "isEndNode": true }
}
],
"edges": [
{
"sourceNodeId": "node_trigger",
"targetNodeId": "node_abc123"
},
{
"sourceNodeId": "node_abc123",
"targetNodeId": "node_end"
}
],
"emails": [
{
"nodeId": "node_abc123",
"emailId": "email_abc123",
"stepNumber": 1,
"structuralStepNumber": 1,
"name": "Welcome Sequence - Email 1",
"subject": "Welcome to Acme",
"previewText": null,
"emailPreset": "minimal",
"emailTheme": { "presetId": "soft", "colors": { "background": "#ffffff" } },
"delayNodeId": null,
"delayMode": null,
"delayMs": null,
"waitUntil": null,
"waitUntilWeekday": null,
"delayDisplay": null,
"delayDescription": null,
"blocks": [],
"nodeType": "action_email",
"abTest": null
},
{
"nodeId": "node_def456",
"nodeType": "action_ab_test",
"emailId": "email_variant_a",
"stepNumber": 2,
"name": "Welcome Sequence - Email 2 Variant A",
"subject": "Still thinking it over?",
"previewText": null,
"emailPreset": "minimal",
"emailTheme": null,
"blocks": [],
"abTest": {
"id": "ab_abc123",
"name": "A/B Test - Follow-up",
"status": "testing",
"testType": "content",
"winnerCriteria": "click_rate",
"winnerThreshold": 100,
"winningVariantId": null,
"variantCount": 2,
"variants": [
{
"variantId": "var_a",
"variantLabel": "A",
"emailId": "email_variant_a",
"subject": "Still thinking it over?",
"previewText": null,
"isWinner": false,
"blockCount": 1,
"blocks": [
{
"id": "control",
"type": "text",
"content": "<p>Still thinking it over?</p>"
}
]
},
{
"variantId": "var_b",
"variantLabel": "B",
"emailId": "email_variant_b",
"subject": "Your pick is waiting",
"previewText": null,
"isWinner": false,
"blockCount": 1,
"blocks": [
{
"id": "challenger",
"type": "text",
"content": "<p>Your pick is waiting</p>"
}
]
}
],
"contentEditing": {
"readTool": "get_ab_test",
"writeTool": "update_ab_test_variant",
"requiredScopes": ["ab_tests:read", "ab_tests:write", "sequences:write"],
"note": "This step's copy lives on the A/B test variants..."
}
}
}
],
"createdAt": "2026-04-20T10:00:00.000Z",
"enrichmentStatus": "complete",
"emailCount": 2,
"abTestCount": 1,
"enrichedCount": 2
}
}
{
"error": "Invalid API key"
}
{
"error": "No companies found. Create a company first using the create_company tool."
}
{
"error": "Sequence not found"
}
⌘I
Get Sequence
curl --request GET \
--url https://api.sequenzy.com/api/v1/sequences/{sequenceId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/sequences/{sequenceId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sequenzy.com/api/v1/sequences/{sequenceId}', 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://api.sequenzy.com/api/v1/sequences/{sequenceId}",
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://api.sequenzy.com/api/v1/sequences/{sequenceId}"
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://api.sequenzy.com/api/v1/sequences/{sequenceId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/sequences/{sequenceId}")
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{
"success": true,
"sequence": {
"id": "seq_abc123",
"name": "Welcome Sequence",
"status": "active",
"enrollmentPaused": false,
"effectiveStatus": "live",
"acceptsNewEnrollments": true,
"processesExistingEnrollments": true,
"effectiveStatusSummary": "Live. New subscribers enroll and existing recipients keep receiving steps.",
"trigger": "trigger_list",
"senderProfileId": "sender_abc123",
"fromName": "Acme",
"fromEmail": "hello@example.com",
"replyProfileId": "reply_abc123",
"replyToName": "Support",
"replyToEmail": "support@example.com",
"sendingWindow": {
"enabled": true,
"timezone": "Europe/Kiev",
"startTime": "08:00",
"endTime": "20:00",
"days": ["monday", "tuesday", "wednesday", "thursday", "friday"]
},
"graphRevision": "48ab6d78a2d4f2b7d2d36d8e1dba9ea3f411bb65059b627a2b8268b4e81d8f7a",
"nodes": [
{
"id": "node_trigger",
"nodeType": "trigger_list",
"config": { "triggerType": "contact_added" }
},
{
"id": "node_abc123",
"nodeType": "action_email",
"structuralStepNumber": 1,
"config": {
"emailId": "email_abc123",
"stepNumber": 1,
"emailPreset": "minimal",
"emailTheme": { "presetId": "soft", "colors": { "background": "#ffffff" } }
}
},
{
"id": "node_end",
"nodeType": "action_webhook",
"config": { "isEndNode": true }
}
],
"edges": [
{
"sourceNodeId": "node_trigger",
"targetNodeId": "node_abc123"
},
{
"sourceNodeId": "node_abc123",
"targetNodeId": "node_end"
}
],
"emails": [
{
"nodeId": "node_abc123",
"emailId": "email_abc123",
"stepNumber": 1,
"structuralStepNumber": 1,
"name": "Welcome Sequence - Email 1",
"subject": "Welcome to Acme",
"previewText": null,
"emailPreset": "minimal",
"emailTheme": { "presetId": "soft", "colors": { "background": "#ffffff" } },
"delayNodeId": null,
"delayMode": null,
"delayMs": null,
"waitUntil": null,
"waitUntilWeekday": null,
"delayDisplay": null,
"delayDescription": null,
"blocks": [],
"nodeType": "action_email",
"abTest": null
},
{
"nodeId": "node_def456",
"nodeType": "action_ab_test",
"emailId": "email_variant_a",
"stepNumber": 2,
"name": "Welcome Sequence - Email 2 Variant A",
"subject": "Still thinking it over?",
"previewText": null,
"emailPreset": "minimal",
"emailTheme": null,
"blocks": [],
"abTest": {
"id": "ab_abc123",
"name": "A/B Test - Follow-up",
"status": "testing",
"testType": "content",
"winnerCriteria": "click_rate",
"winnerThreshold": 100,
"winningVariantId": null,
"variantCount": 2,
"variants": [
{
"variantId": "var_a",
"variantLabel": "A",
"emailId": "email_variant_a",
"subject": "Still thinking it over?",
"previewText": null,
"isWinner": false,
"blockCount": 1,
"blocks": [
{
"id": "control",
"type": "text",
"content": "<p>Still thinking it over?</p>"
}
]
},
{
"variantId": "var_b",
"variantLabel": "B",
"emailId": "email_variant_b",
"subject": "Your pick is waiting",
"previewText": null,
"isWinner": false,
"blockCount": 1,
"blocks": [
{
"id": "challenger",
"type": "text",
"content": "<p>Your pick is waiting</p>"
}
]
}
],
"contentEditing": {
"readTool": "get_ab_test",
"writeTool": "update_ab_test_variant",
"requiredScopes": ["ab_tests:read", "ab_tests:write", "sequences:write"],
"note": "This step's copy lives on the A/B test variants..."
}
}
}
],
"createdAt": "2026-04-20T10:00:00.000Z",
"enrichmentStatus": "complete",
"emailCount": 2,
"abTestCount": 1,
"enrichedCount": 2
}
}
{
"error": "Invalid API key"
}
{
"error": "No companies found. Create a company first using the create_company tool."
}
{
"error": "Sequence not found"
}