Email Sends
Get Email Send
Get an email delivery status, failure reason, HTML body, and event timeline by emailSendId.
GET
/
api
/
v1
/
email-sends
/
{emailSendId}
Get Email Send
curl --request GET \
--url https://api.sequenzy.com/api/v1/email-sends/{emailSendId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/email-sends/{emailSendId}"
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/email-sends/{emailSendId}', 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/email-sends/{emailSendId}",
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/email-sends/{emailSendId}"
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/email-sends/{emailSendId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-sends/{emailSendId}")
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,
"source": "database",
"emailSend": {
"id": "send_123",
"companyId": "company_123",
"type": "transactional",
"emailType": "marketing",
"isTransactional": false,
"recipientEmail": "user@example.com",
"additionalRecipients": null,
"subscriberExternalId": "customer_123",
"subject": "Welcome",
"senderEmail": "hello@example.com",
"senderName": "Acme",
"originalReplyTo": "Support <support@example.com>",
"status": "delivered",
"suppressionReason": null,
"emailBody": "<html><body><p>Welcome</p></body></html>",
"isCopiedRecipient": false,
"primaryEmailSendId": null,
"sentAt": "2026-05-01T12:00:00.000Z",
"deliveredAt": "2026-05-01T12:00:03.000Z",
"suppressedAt": null,
"createdAt": "2026-05-01T11:59:58.000Z"
},
"events": [
{
"id": "evt_123",
"emailSendId": "send_123",
"emailType": "transactional",
"deliveryPolicy": "marketing",
"eventType": "delivery",
"eventTime": "2026-05-01T12:00:03.000Z"
}
]
}
{
"success": true,
"source": "database",
"emailSend": {
"id": "send_copy_123",
"companyId": "company_123",
"type": "transactional",
"recipientEmail": "archive@example.com",
"subject": "Welcome",
"status": "delivered",
"emailBody": null,
"isCopiedRecipient": true,
"primaryEmailSendId": "send_123",
"sentAt": "2026-05-01T12:00:00.000Z",
"deliveredAt": "2026-05-01T12:00:03.000Z",
"createdAt": "2026-05-01T11:59:58.000Z"
},
"events": []
}
{
"success": true,
"source": "clickhouse_events",
"message": "Email send row was not found; returned retained ClickHouse event data. The HTML body is unavailable after email send cleanup.",
"emailSend": {
"id": "send_123",
"companyId": "company_123",
"type": "campaign",
"recipientEmail": "user@example.com",
"subject": "Spring launch",
"status": "clicked",
"emailBody": null,
"sentAt": "2026-04-01T10:00:00.000Z",
"clickedAt": "2026-04-01T10:05:00.000Z",
"createdAt": "2026-04-01T10:00:00.000Z"
},
"events": [
{
"id": "evt_send",
"emailSendId": "send_123",
"eventType": "send",
"eventTime": "2026-04-01T10:00:00.000Z"
},
{
"id": "evt_click",
"emailSendId": "send_123",
"eventType": "click",
"clickedUrl": "https://example.com",
"eventTime": "2026-04-01T10:05:00.000Z"
}
]
}
{
"success": true,
"source": "database",
"emailSend": {
"id": "send_suppressed",
"companyId": "company_123",
"type": "campaign",
"recipientEmail": "bounced@example.com",
"subject": "Spring launch",
"status": "suppressed",
"suppressionReason": "bounced",
"errorMessage": "Email suppressed due to previous bounce (bounced_email)",
"sentAt": null,
"suppressedAt": "2026-05-01T12:00:00.000Z",
"createdAt": "2026-05-01T11:59:58.000Z"
},
"events": []
}
{
"success": false,
"error": "Missing API key. Provide via x-api-key header or Authorization: Bearer <key>"
}
{ "success": false, "error": "No company selected" }
{ "success": false, "error": "Email send not found" }
{ "success": false, "error": "Internal server error" }
Get Email Send
You can retrieve a queued, sent, suppressed, or failed email byemailSendId. Email send rows are cleaned up after 14 days; when the row is gone, the API returns retained ClickHouse events and a sparse summary without emailBody. Test sends are hidden from sent-email history but remain available through this exact-ID endpoint while their row is retained.
Use status and errorMessage as the delivery contract. Queue jobs are an internal execution detail and are not exposed by this API.
status: "failed" is not a bounce. When internalFailureCode is
transport_exhausted, the recipient provider refused every delivery route we
had; when it is admin_bounce, an operator removed the message from the
delivery queue. In both cases the address is still valid, remains subscribed,
is not added to the suppression list, and does not count toward your bounce
rate. Only status: "bounced" means the provider judged the mailbox itself.
type identifies the send source (campaign, sequence, or transactional)
for compatibility with analytics. emailType is the normalized delivery policy
(marketing or transactional), and isTransactional is its stored snapshot.
For example, a marketing message sent through send_email has
type: "transactional", emailType: "marketing", and
isTransactional: false. Timeline events expose the same policy as
deliveryPolicy; their legacy emailType field remains the source category.
For cleaned-up legacy sequence/API sends without a stored policy snapshot,
emailType, isTransactional, and event deliveryPolicy are null rather
than guessed.
For multi-recipient transactional sends (multiple to addresses or any cc/bcc), additionalRecipients contains the full recipient lists as actually sent. It is null for single-recipient sends and for ClickHouse-only fallbacks.
CC/BCC delivery records return isCopiedRecipient: true and identify the original delivery with primaryEmailSendId when it is still available. Their emailBody is null because content, opens, and clicks remain attached to the primary email send.
Request
string
required
Email send ID.
curl "https://api.sequenzy.com/api/v1/email-sends/send_123" \
-H "Authorization: Bearer API_KEY"
Responses
{
"success": true,
"source": "database",
"emailSend": {
"id": "send_123",
"companyId": "company_123",
"type": "transactional",
"emailType": "marketing",
"isTransactional": false,
"recipientEmail": "user@example.com",
"additionalRecipients": null,
"subscriberExternalId": "customer_123",
"subject": "Welcome",
"senderEmail": "hello@example.com",
"senderName": "Acme",
"originalReplyTo": "Support <support@example.com>",
"status": "delivered",
"suppressionReason": null,
"emailBody": "<html><body><p>Welcome</p></body></html>",
"isCopiedRecipient": false,
"primaryEmailSendId": null,
"sentAt": "2026-05-01T12:00:00.000Z",
"deliveredAt": "2026-05-01T12:00:03.000Z",
"suppressedAt": null,
"createdAt": "2026-05-01T11:59:58.000Z"
},
"events": [
{
"id": "evt_123",
"emailSendId": "send_123",
"emailType": "transactional",
"deliveryPolicy": "marketing",
"eventType": "delivery",
"eventTime": "2026-05-01T12:00:03.000Z"
}
]
}
{
"success": true,
"source": "database",
"emailSend": {
"id": "send_copy_123",
"companyId": "company_123",
"type": "transactional",
"recipientEmail": "archive@example.com",
"subject": "Welcome",
"status": "delivered",
"emailBody": null,
"isCopiedRecipient": true,
"primaryEmailSendId": "send_123",
"sentAt": "2026-05-01T12:00:00.000Z",
"deliveredAt": "2026-05-01T12:00:03.000Z",
"createdAt": "2026-05-01T11:59:58.000Z"
},
"events": []
}
{
"success": true,
"source": "clickhouse_events",
"message": "Email send row was not found; returned retained ClickHouse event data. The HTML body is unavailable after email send cleanup.",
"emailSend": {
"id": "send_123",
"companyId": "company_123",
"type": "campaign",
"recipientEmail": "user@example.com",
"subject": "Spring launch",
"status": "clicked",
"emailBody": null,
"sentAt": "2026-04-01T10:00:00.000Z",
"clickedAt": "2026-04-01T10:05:00.000Z",
"createdAt": "2026-04-01T10:00:00.000Z"
},
"events": [
{
"id": "evt_send",
"emailSendId": "send_123",
"eventType": "send",
"eventTime": "2026-04-01T10:00:00.000Z"
},
{
"id": "evt_click",
"emailSendId": "send_123",
"eventType": "click",
"clickedUrl": "https://example.com",
"eventTime": "2026-04-01T10:05:00.000Z"
}
]
}
{
"success": true,
"source": "database",
"emailSend": {
"id": "send_suppressed",
"companyId": "company_123",
"type": "campaign",
"recipientEmail": "bounced@example.com",
"subject": "Spring launch",
"status": "suppressed",
"suppressionReason": "bounced",
"errorMessage": "Email suppressed due to previous bounce (bounced_email)",
"sentAt": null,
"suppressedAt": "2026-05-01T12:00:00.000Z",
"createdAt": "2026-05-01T11:59:58.000Z"
},
"events": []
}
{
"success": false,
"error": "Missing API key. Provide via x-api-key header or Authorization: Bearer <key>"
}
{ "success": false, "error": "No company selected" }
{ "success": false, "error": "Email send not found" }
{ "success": false, "error": "Internal server error" }
⌘I
Get Email Send
curl --request GET \
--url https://api.sequenzy.com/api/v1/email-sends/{emailSendId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/email-sends/{emailSendId}"
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/email-sends/{emailSendId}', 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/email-sends/{emailSendId}",
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/email-sends/{emailSendId}"
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/email-sends/{emailSendId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/email-sends/{emailSendId}")
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,
"source": "database",
"emailSend": {
"id": "send_123",
"companyId": "company_123",
"type": "transactional",
"emailType": "marketing",
"isTransactional": false,
"recipientEmail": "user@example.com",
"additionalRecipients": null,
"subscriberExternalId": "customer_123",
"subject": "Welcome",
"senderEmail": "hello@example.com",
"senderName": "Acme",
"originalReplyTo": "Support <support@example.com>",
"status": "delivered",
"suppressionReason": null,
"emailBody": "<html><body><p>Welcome</p></body></html>",
"isCopiedRecipient": false,
"primaryEmailSendId": null,
"sentAt": "2026-05-01T12:00:00.000Z",
"deliveredAt": "2026-05-01T12:00:03.000Z",
"suppressedAt": null,
"createdAt": "2026-05-01T11:59:58.000Z"
},
"events": [
{
"id": "evt_123",
"emailSendId": "send_123",
"emailType": "transactional",
"deliveryPolicy": "marketing",
"eventType": "delivery",
"eventTime": "2026-05-01T12:00:03.000Z"
}
]
}
{
"success": true,
"source": "database",
"emailSend": {
"id": "send_copy_123",
"companyId": "company_123",
"type": "transactional",
"recipientEmail": "archive@example.com",
"subject": "Welcome",
"status": "delivered",
"emailBody": null,
"isCopiedRecipient": true,
"primaryEmailSendId": "send_123",
"sentAt": "2026-05-01T12:00:00.000Z",
"deliveredAt": "2026-05-01T12:00:03.000Z",
"createdAt": "2026-05-01T11:59:58.000Z"
},
"events": []
}
{
"success": true,
"source": "clickhouse_events",
"message": "Email send row was not found; returned retained ClickHouse event data. The HTML body is unavailable after email send cleanup.",
"emailSend": {
"id": "send_123",
"companyId": "company_123",
"type": "campaign",
"recipientEmail": "user@example.com",
"subject": "Spring launch",
"status": "clicked",
"emailBody": null,
"sentAt": "2026-04-01T10:00:00.000Z",
"clickedAt": "2026-04-01T10:05:00.000Z",
"createdAt": "2026-04-01T10:00:00.000Z"
},
"events": [
{
"id": "evt_send",
"emailSendId": "send_123",
"eventType": "send",
"eventTime": "2026-04-01T10:00:00.000Z"
},
{
"id": "evt_click",
"emailSendId": "send_123",
"eventType": "click",
"clickedUrl": "https://example.com",
"eventTime": "2026-04-01T10:05:00.000Z"
}
]
}
{
"success": true,
"source": "database",
"emailSend": {
"id": "send_suppressed",
"companyId": "company_123",
"type": "campaign",
"recipientEmail": "bounced@example.com",
"subject": "Spring launch",
"status": "suppressed",
"suppressionReason": "bounced",
"errorMessage": "Email suppressed due to previous bounce (bounced_email)",
"sentAt": null,
"suppressedAt": "2026-05-01T12:00:00.000Z",
"createdAt": "2026-05-01T11:59:58.000Z"
},
"events": []
}
{
"success": false,
"error": "Missing API key. Provide via x-api-key header or Authorization: Bearer <key>"
}
{ "success": false, "error": "No company selected" }
{ "success": false, "error": "Email send not found" }
{ "success": false, "error": "Internal server error" }