Sequences
Enroll Subscribers
Manually enroll subscribers into a sequence
POST
/
api
/
v1
/
sequences
/
{sequenceId}
/
enroll
Enroll Subscribers
curl --request POST \
--url https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"emails": [
"<string>"
],
"subscriberIds": [
"<string>"
],
"targetNodeId": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll"
payload = {
"emails": ["<string>"],
"subscriberIds": ["<string>"],
"targetNodeId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({emails: ['<string>'], subscriberIds: ['<string>'], targetNodeId: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll', 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}/enroll",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'emails' => [
'<string>'
],
'subscriberIds' => [
'<string>'
],
'targetNodeId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll"
payload := strings.NewReader("{\n \"emails\": [\n \"<string>\"\n ],\n \"subscriberIds\": [\n \"<string>\"\n ],\n \"targetNodeId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"emails\": [\n \"<string>\"\n ],\n \"subscriberIds\": [\n \"<string>\"\n ],\n \"targetNodeId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"emails\": [\n \"<string>\"\n ],\n \"subscriberIds\": [\n \"<string>\"\n ],\n \"targetNodeId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"enrolled": 1,
"skipped": 0,
"notFound": ["unknown@example.com"],
"targetNodeId": "node_email_1",
"scheduledFor": "2026-06-11T10:00:00.000Z"
}
{
"error": "Provide emails or subscriberIds"
}
{
"error": "A maximum of 500 subscribers can be enrolled per request"
}
{
"error": "Cannot enroll subscribers while sequence enrollment is closed"
}
{
"error": "Target node not found in this sequence"
}
{
"error": "Cannot enroll subscribers at the trigger node"
}
{
"error": "Sequence has no enrollable step"
}
{
"error": "Invalid API key"
}
{
"error": "Sequence not found"
}
Manually enroll active subscribers into a sequence by email or subscriber ID. Enrollment starts at the first step after the trigger, or at a specific node when you pass
Provide at least one of
targetNodeId. Subscribers that are inactive or already enrolled are skipped. You can pass up to 500 targets per request, combined across emails and subscriberIds.
The sequence must be open for enrollment: enabled (or capturing entrants) and not enrollment-paused.
Request
string
required
Sequence ID.
string[]
Subscriber emails to enroll. Emails are trimmed and lowercased. Unknown emails
are returned in
notFound.string[]
Subscriber IDs to enroll.
string
Node to start enrollment at. Defaults to the first non-trigger node connected
to the trigger. Cannot be a trigger node. When the target is a delay step,
enrollment is scheduled after the delay.
emails or subscriberIds.
curl -X POST "https://api.sequenzy.com/api/v1/sequences/seq_abc123/enroll" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"emails": ["user@example.com", "unknown@example.com"]}'
Responses
{
"success": true,
"enrolled": 1,
"skipped": 0,
"notFound": ["unknown@example.com"],
"targetNodeId": "node_email_1",
"scheduledFor": "2026-06-11T10:00:00.000Z"
}
{
"error": "Provide emails or subscriberIds"
}
{
"error": "A maximum of 500 subscribers can be enrolled per request"
}
{
"error": "Cannot enroll subscribers while sequence enrollment is closed"
}
{
"error": "Target node not found in this sequence"
}
{
"error": "Cannot enroll subscribers at the trigger node"
}
{
"error": "Sequence has no enrollable step"
}
{
"error": "Invalid API key"
}
{
"error": "Sequence not found"
}
Previous
Cancel Sequence EnrollmentsCancel active or waiting subscriber enrollments in one sequence
Next
⌘I
Enroll Subscribers
curl --request POST \
--url https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"emails": [
"<string>"
],
"subscriberIds": [
"<string>"
],
"targetNodeId": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll"
payload = {
"emails": ["<string>"],
"subscriberIds": ["<string>"],
"targetNodeId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({emails: ['<string>'], subscriberIds: ['<string>'], targetNodeId: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll', 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}/enroll",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'emails' => [
'<string>'
],
'subscriberIds' => [
'<string>'
],
'targetNodeId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll"
payload := strings.NewReader("{\n \"emails\": [\n \"<string>\"\n ],\n \"subscriberIds\": [\n \"<string>\"\n ],\n \"targetNodeId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"emails\": [\n \"<string>\"\n ],\n \"subscriberIds\": [\n \"<string>\"\n ],\n \"targetNodeId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enroll")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"emails\": [\n \"<string>\"\n ],\n \"subscriberIds\": [\n \"<string>\"\n ],\n \"targetNodeId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"enrolled": 1,
"skipped": 0,
"notFound": ["unknown@example.com"],
"targetNodeId": "node_email_1",
"scheduledFor": "2026-06-11T10:00:00.000Z"
}
{
"error": "Provide emails or subscriberIds"
}
{
"error": "A maximum of 500 subscribers can be enrolled per request"
}
{
"error": "Cannot enroll subscribers while sequence enrollment is closed"
}
{
"error": "Target node not found in this sequence"
}
{
"error": "Cannot enroll subscribers at the trigger node"
}
{
"error": "Sequence has no enrollable step"
}
{
"error": "Invalid API key"
}
{
"error": "Sequence not found"
}