Conversations
Get Conversation
Get a conversation with all messages
GET
/
api
/
v1
/
conversations
/
{conversationId}
Get Conversation
curl --request GET \
--url https://api.sequenzy.com/api/v1/conversations/{conversationId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/conversations/{conversationId}"
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/conversations/{conversationId}', 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/conversations/{conversationId}",
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/conversations/{conversationId}"
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/conversations/{conversationId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/conversations/{conversationId}")
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,
"conversation": {
"id": "conv_abc123",
"companyId": "comp_abc123",
"subscriberId": "sub_abc123",
"subscriberEmail": "user@example.com",
"subscriberName": "John Doe",
"subject": "Re: A quick update",
"status": "open",
"messageCount": 2,
"lastMessageAt": "2026-06-11T09:30:00.000Z",
"lastMessageBy": "subscriber",
"hasUnread": true,
"spam": false,
"recipientAddress": null,
"initialEmailSendId": "send_abc123",
"initialCampaignId": "camp_abc123",
"initialAutomationNodeId": null,
"createdAt": "2026-06-10T15:00:00.000Z",
"updatedAt": "2026-06-11T09:30:00.000Z",
"expiresAt": null,
"messages": [
{
"id": "msg_abc123",
"type": "inbound",
"subject": "Re: A quick update",
"bodyText": "Thanks, this is great!",
"bodyHtml": null,
"fromEmail": "user@example.com",
"fromName": "John Doe",
"fromUserId": null,
"attachments": [
{
"filename": "invoice.pdf",
"contentType": "application/pdf",
"size": 48213,
"s3Key": "attachments/comp_abc123/5f0c.../invoice.pdf",
"downloadUrl": "https://sequenzy-inbox.s3.amazonaws.com/attachments/...&X-Amz-Signature=..."
}
],
"isRead": false,
"readAt": null,
"readBy": null,
"deliveryStatus": null,
"deliveredAt": null,
"createdAt": "2026-06-11T09:30:00.000Z"
}
],
"context": {
"type": "campaign",
"campaignId": "camp_abc123",
"campaignName": "April Launch",
"automationNodeId": null,
"automationName": null,
"initialEmailSubject": "A quick update"
},
"subscriber": {
"id": "sub_abc123",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"tags": ["premium"],
"customAttributes": { "plan": "pro" }
}
}
}
{
"success": false,
"error": "Unauthorized"
}
{
"error": "Conversation not found"
}
Get one conversation with its full message history, the originating campaign or sequence context, and the subscriber’s details.
spam is true when the conversation is in the Spam folder, and recipientAddress is the inbox address it started at, such as admin@acme.com (null for replies to your emails).
Message type is inbound for received email, outbound for team replies, note for internal notes, and system for recorded forwards. context.type is inbox when the conversation started with an email sent to your inbox address.
Each attachment has filename, contentType and size. Stored files also have a downloadUrl, a signed link valid for one hour. downloadUrl is null when the file was not stored: attachment storage is not configured, the file failed the virus scan, it was larger than 25 MB, it was beyond the first 20 files of the message, storing it failed, or its retention period ended.
Request
string
required
Conversation ID.
curl "https://api.sequenzy.com/api/v1/conversations/conv_abc123" \
-H "Authorization: Bearer YOUR_API_KEY"
Responses
{
"success": true,
"conversation": {
"id": "conv_abc123",
"companyId": "comp_abc123",
"subscriberId": "sub_abc123",
"subscriberEmail": "user@example.com",
"subscriberName": "John Doe",
"subject": "Re: A quick update",
"status": "open",
"messageCount": 2,
"lastMessageAt": "2026-06-11T09:30:00.000Z",
"lastMessageBy": "subscriber",
"hasUnread": true,
"spam": false,
"recipientAddress": null,
"initialEmailSendId": "send_abc123",
"initialCampaignId": "camp_abc123",
"initialAutomationNodeId": null,
"createdAt": "2026-06-10T15:00:00.000Z",
"updatedAt": "2026-06-11T09:30:00.000Z",
"expiresAt": null,
"messages": [
{
"id": "msg_abc123",
"type": "inbound",
"subject": "Re: A quick update",
"bodyText": "Thanks, this is great!",
"bodyHtml": null,
"fromEmail": "user@example.com",
"fromName": "John Doe",
"fromUserId": null,
"attachments": [
{
"filename": "invoice.pdf",
"contentType": "application/pdf",
"size": 48213,
"s3Key": "attachments/comp_abc123/5f0c.../invoice.pdf",
"downloadUrl": "https://sequenzy-inbox.s3.amazonaws.com/attachments/...&X-Amz-Signature=..."
}
],
"isRead": false,
"readAt": null,
"readBy": null,
"deliveryStatus": null,
"deliveredAt": null,
"createdAt": "2026-06-11T09:30:00.000Z"
}
],
"context": {
"type": "campaign",
"campaignId": "camp_abc123",
"campaignName": "April Launch",
"automationNodeId": null,
"automationName": null,
"initialEmailSubject": "A quick update"
},
"subscriber": {
"id": "sub_abc123",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"tags": ["premium"],
"customAttributes": { "plan": "pro" }
}
}
}
{
"success": false,
"error": "Unauthorized"
}
{
"error": "Conversation not found"
}
⌘I
Get Conversation
curl --request GET \
--url https://api.sequenzy.com/api/v1/conversations/{conversationId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sequenzy.com/api/v1/conversations/{conversationId}"
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/conversations/{conversationId}', 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/conversations/{conversationId}",
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/conversations/{conversationId}"
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/conversations/{conversationId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/conversations/{conversationId}")
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,
"conversation": {
"id": "conv_abc123",
"companyId": "comp_abc123",
"subscriberId": "sub_abc123",
"subscriberEmail": "user@example.com",
"subscriberName": "John Doe",
"subject": "Re: A quick update",
"status": "open",
"messageCount": 2,
"lastMessageAt": "2026-06-11T09:30:00.000Z",
"lastMessageBy": "subscriber",
"hasUnread": true,
"spam": false,
"recipientAddress": null,
"initialEmailSendId": "send_abc123",
"initialCampaignId": "camp_abc123",
"initialAutomationNodeId": null,
"createdAt": "2026-06-10T15:00:00.000Z",
"updatedAt": "2026-06-11T09:30:00.000Z",
"expiresAt": null,
"messages": [
{
"id": "msg_abc123",
"type": "inbound",
"subject": "Re: A quick update",
"bodyText": "Thanks, this is great!",
"bodyHtml": null,
"fromEmail": "user@example.com",
"fromName": "John Doe",
"fromUserId": null,
"attachments": [
{
"filename": "invoice.pdf",
"contentType": "application/pdf",
"size": 48213,
"s3Key": "attachments/comp_abc123/5f0c.../invoice.pdf",
"downloadUrl": "https://sequenzy-inbox.s3.amazonaws.com/attachments/...&X-Amz-Signature=..."
}
],
"isRead": false,
"readAt": null,
"readBy": null,
"deliveryStatus": null,
"deliveredAt": null,
"createdAt": "2026-06-11T09:30:00.000Z"
}
],
"context": {
"type": "campaign",
"campaignId": "camp_abc123",
"campaignName": "April Launch",
"automationNodeId": null,
"automationName": null,
"initialEmailSubject": "A quick update"
},
"subscriber": {
"id": "sub_abc123",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"tags": ["premium"],
"customAttributes": { "plan": "pro" }
}
}
}
{
"success": false,
"error": "Unauthorized"
}
{
"error": "Conversation not found"
}