Sequences
List Sequence Email Variations
List the design variations of one email of a sequence
GET
/
api
/
v1
/
sequences
/
{sequenceId}
/
emails
/
{emailId}
/
variations
List Sequence Email Variations
curl --request GET \
--url https://api.sequenzy.com/api/v1/sequences/{sequenceId}/emails/{emailId}/variations \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/sequences/{sequenceId}/emails/{emailId}/variations"
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}/emails/{emailId}/variations', 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}/emails/{emailId}/variations",
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}/emails/{emailId}/variations"
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}/emails/{emailId}/variations")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/sequences/{sequenceId}/emails/{emailId}/variations")
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,
"email": { "emailId": "email_abc123", "nodeId": "node_abc123", "label": "Email 1" },
"variations": [
{
"id": "evar_9xk2",
"emailId": "email_abc123",
"parentId": null,
"label": "V1",
"name": "Violet editorial",
"summary": "Left-aligned serif headline and a pill button.",
"prompt": "A few bolder versions",
"style": "bold",
"status": "ready",
"error": null,
"subject": null,
"previewText": null,
"blocks": [
{ "id": "h1", "type": "heading", "content": "Welcome aboard", "level": 1 }
],
"emailTheme": null,
"fontFamily": "Georgia, serif",
"position": null,
"inUse": false,
"usedAt": null,
"createdAt": "2026-10-16T09:12:00.000Z",
"updatedAt": "2026-10-16T09:12:41.000Z"
}
]
}
{
"error": "This step is an A/B test. Change its variants instead."
}
{
"error": "Invalid API key"
}
{
"error": "Email of this sequence not found"
}
Lists the design variations of one email of a sequence, oldest first: the options you get in the sequence editor’s Emails view when you ask “I like email 1, make a few variations”. Each has a
status (generating, ready or failed) and inUse, which is true when the email has exactly its content. Discarded variations are not listed.
Poll this after Generate Sequence Email Variations until no variation is generating. To see one, render it with Render Sequence Step using the step’s nodeId and the variation’s ID as variationId.
Request
string
required
Sequence ID.
string
required
The email’s ID: the
emailId of its step from Get Sequence.curl "https://api.sequenzy.com/api/v1/sequences/seq_abc123/emails/email_abc123/variations" \
-H "Authorization: Bearer YOUR_API_KEY"
Response
object
The email the variations are of:
emailId, nodeId (its step) and label.array
The email’s variations, with the same fields as campaign
variations.
{
"success": true,
"email": { "emailId": "email_abc123", "nodeId": "node_abc123", "label": "Email 1" },
"variations": [
{
"id": "evar_9xk2",
"emailId": "email_abc123",
"parentId": null,
"label": "V1",
"name": "Violet editorial",
"summary": "Left-aligned serif headline and a pill button.",
"prompt": "A few bolder versions",
"style": "bold",
"status": "ready",
"error": null,
"subject": null,
"previewText": null,
"blocks": [
{ "id": "h1", "type": "heading", "content": "Welcome aboard", "level": 1 }
],
"emailTheme": null,
"fontFamily": "Georgia, serif",
"position": null,
"inUse": false,
"usedAt": null,
"createdAt": "2026-10-16T09:12:00.000Z",
"updatedAt": "2026-10-16T09:12:41.000Z"
}
]
}
{
"error": "This step is an A/B test. Change its variants instead."
}
{
"error": "Invalid API key"
}
{
"error": "Email of this sequence not found"
}
⌘I
List Sequence Email Variations
curl --request GET \
--url https://api.sequenzy.com/api/v1/sequences/{sequenceId}/emails/{emailId}/variations \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/sequences/{sequenceId}/emails/{emailId}/variations"
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}/emails/{emailId}/variations', 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}/emails/{emailId}/variations",
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}/emails/{emailId}/variations"
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}/emails/{emailId}/variations")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/sequences/{sequenceId}/emails/{emailId}/variations")
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,
"email": { "emailId": "email_abc123", "nodeId": "node_abc123", "label": "Email 1" },
"variations": [
{
"id": "evar_9xk2",
"emailId": "email_abc123",
"parentId": null,
"label": "V1",
"name": "Violet editorial",
"summary": "Left-aligned serif headline and a pill button.",
"prompt": "A few bolder versions",
"style": "bold",
"status": "ready",
"error": null,
"subject": null,
"previewText": null,
"blocks": [
{ "id": "h1", "type": "heading", "content": "Welcome aboard", "level": 1 }
],
"emailTheme": null,
"fontFamily": "Georgia, serif",
"position": null,
"inUse": false,
"usedAt": null,
"createdAt": "2026-10-16T09:12:00.000Z",
"updatedAt": "2026-10-16T09:12:41.000Z"
}
]
}
{
"error": "This step is an A/B test. Change its variants instead."
}
{
"error": "Invalid API key"
}
{
"error": "Email of this sequence not found"
}