import { Resend } from 'resend';
const resend = new Resend('re_xxxxxxxxx');
const { data, error } = await resend.inboxes.threads.list({
inboxId: 'b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1',
});
$resend = Resend::client('re_xxxxxxxxx');
$resend->inboxes->threads->list('b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1');
import resend
resend.api_key = "re_xxxxxxxxx"
resend.Inboxes.Threads.list("b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1")
require "resend"
Resend.api_key = "re_xxxxxxxxx"
Resend::Inboxes::Threads.list({ inbox_id: "b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1" })
package main
import "github.com/resend/resend-go/v4"
func main() {
client := resend.NewClient("re_xxxxxxxxx")
client.Inboxes.Threads.List("b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1", nil)
use resend_rs::{
list_opts::ListOptions,
types::ListInboxThreadsOptions,
Resend, Result,
};
#[tokio::main]
async fn main() -> Result<()> {
let resend = Resend::new("re_xxxxxxxxx");
let _threads = resend
.inboxes
.list_threads(
"b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1",
ListInboxThreadsOptions::new(),
ListOptions::default(),
)
.await?;
Ok(())
}
import com.resend.Resend;
import com.resend.core.exception.ResendException;
import com.resend.services.inboxes.model.ListInboxThreadsResponseSuccess;
public class Main {
public static void main(String[] args) throws ResendException {
Resend resend = new Resend("re_xxxxxxxxx");
ListInboxThreadsResponseSuccess data = resend.inboxes().threads()
.list("b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1");
}
}
using Resend;
IResend resend = ResendClient.Create( "re_xxxxxxxxx" ); // Or from DI
var resp = await resend.InboxThreadListAsync( new Guid( "b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1" ) );
Console.WriteLine( "Nr Threads={0}", resp.Content.Data.Count );
curl -X GET 'https://api.resend.com/inboxes/b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1/threads' \
-H 'Authorization: Bearer re_xxxxxxxxx'
resend inboxes threads list b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1
{
"object": "list",
"has_more": true,
"data": [
{
"id": "4d8e2a1c-9b3f-4c6d-8a21-3e5f7c9c0d12",
"subject": "Refund for order 1041",
"from": "Ada Lovelace <ada@example.org>",
"to": ["support@example.com"],
"cc": [],
"bcc": [],
"labels": [
{
"id": "7f9c1d2e-4a6b-4c3d-8e15-9b0a7c6d5e34",
"name": "Urgent",
"color": "#E93D82"
}
],
"email_count": 2,
"has_attachment": true,
"has_draft": false,
"read": false,
"received_at": "2026-08-05T14:03:11.229Z",
"folder": "inbox"
}
]
}
List Threads
Retrieve the threads in an inbox, filtered by folder, label, and read status.
GET
/
inboxes
/
:inbox_id
/
threads
import { Resend } from 'resend';
const resend = new Resend('re_xxxxxxxxx');
const { data, error } = await resend.inboxes.threads.list({
inboxId: 'b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1',
});
$resend = Resend::client('re_xxxxxxxxx');
$resend->inboxes->threads->list('b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1');
import resend
resend.api_key = "re_xxxxxxxxx"
resend.Inboxes.Threads.list("b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1")
require "resend"
Resend.api_key = "re_xxxxxxxxx"
Resend::Inboxes::Threads.list({ inbox_id: "b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1" })
package main
import "github.com/resend/resend-go/v4"
func main() {
client := resend.NewClient("re_xxxxxxxxx")
client.Inboxes.Threads.List("b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1", nil)
use resend_rs::{
list_opts::ListOptions,
types::ListInboxThreadsOptions,
Resend, Result,
};
#[tokio::main]
async fn main() -> Result<()> {
let resend = Resend::new("re_xxxxxxxxx");
let _threads = resend
.inboxes
.list_threads(
"b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1",
ListInboxThreadsOptions::new(),
ListOptions::default(),
)
.await?;
Ok(())
}
import com.resend.Resend;
import com.resend.core.exception.ResendException;
import com.resend.services.inboxes.model.ListInboxThreadsResponseSuccess;
public class Main {
public static void main(String[] args) throws ResendException {
Resend resend = new Resend("re_xxxxxxxxx");
ListInboxThreadsResponseSuccess data = resend.inboxes().threads()
.list("b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1");
}
}
using Resend;
IResend resend = ResendClient.Create( "re_xxxxxxxxx" ); // Or from DI
var resp = await resend.InboxThreadListAsync( new Guid( "b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1" ) );
Console.WriteLine( "Nr Threads={0}", resp.Content.Data.Count );
curl -X GET 'https://api.resend.com/inboxes/b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1/threads' \
-H 'Authorization: Bearer re_xxxxxxxxx'
resend inboxes threads list b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1
{
"object": "list",
"has_more": true,
"data": [
{
"id": "4d8e2a1c-9b3f-4c6d-8a21-3e5f7c9c0d12",
"subject": "Refund for order 1041",
"from": "Ada Lovelace <ada@example.org>",
"to": ["support@example.com"],
"cc": [],
"bcc": [],
"labels": [
{
"id": "7f9c1d2e-4a6b-4c3d-8e15-9b0a7c6d5e34",
"name": "Urgent",
"color": "#E93D82"
}
],
"email_count": 2,
"has_attachment": true,
"has_draft": false,
"read": false,
"received_at": "2026-08-05T14:03:11.229Z",
"folder": "inbox"
}
]
}
A thread is a conversation within an inbox, made up of one or more messages.
To find threads by text, sender, recipient, attachment, or date, use Search
Threads.
Path Parameters
Query Parameters
string
Comma-separated folders to list. Defaults to
inbox, or to
inbox,archive,sent when labels is set.inbox: The default. The thread holds at least one received message.archive: The thread was archived.spam: The thread was marked as spam.trash: The thread is scheduled for deletion in 30 days.sent: Threads whose messages are all outbound.
string
Comma-separated label IDs. Returns threads with any of these labels. Up to
50 IDs.boolean
true returns threads where every email is read. false returns threads with
at least one unread email.number
Number of threads to return. Default is
20, maximum is 100, minimum is
1.string
The ID of the last thread on the current page. Returns the next, older page.
Must be a thread ID. To filter by date, use Search
Threads with
start_date.string
The ID of the first thread on the current page. Returns the previous, newer
page. Cannot be combined with
after. Must be a thread ID. To filter by date,
use Search Threads with end_date.Response Fields
string
Always
list.boolean
Whether more threads exist beyond this page. Pass the last thread’s
id as
after to continue.array
The matching threads, most recently active first.
Hide properties
Hide properties
string
The ID of the thread.
string | null
The subject of the thread.
string | null
Sender email address. Can include the display name.
string[]
The recipients of the most recent message. For a received email, these
are the addresses it was delivered to, not the full
To header.string[]
The CC recipients of the most recent message.
string[]
The BCC recipients of the most recent message. Always empty for a
received email.
array
number
The number of emails in the thread.
boolean
Whether the most recent message in the thread has an attachment.
boolean
Whether the thread has an unsent draft.
boolean
True only when every message in the thread is read.
string
ISO 8601 timestamp when the thread was last active.
string
The folder the thread lives in. Every thread sits in exactly one folder
within its inbox. You can move a thread to
inbox, archive, spam, or
trash. sent is assigned automatically.inbox: The default. The thread holds at least one received message.archive: The thread was archived.spam: The thread was marked as spam.trash: The thread is scheduled for deletion in 30 days.sent: Threads whose messages are all outbound.
import { Resend } from 'resend';
const resend = new Resend('re_xxxxxxxxx');
const { data, error } = await resend.inboxes.threads.list({
inboxId: 'b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1',
});
$resend = Resend::client('re_xxxxxxxxx');
$resend->inboxes->threads->list('b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1');
import resend
resend.api_key = "re_xxxxxxxxx"
resend.Inboxes.Threads.list("b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1")
require "resend"
Resend.api_key = "re_xxxxxxxxx"
Resend::Inboxes::Threads.list({ inbox_id: "b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1" })
package main
import "github.com/resend/resend-go/v4"
func main() {
client := resend.NewClient("re_xxxxxxxxx")
client.Inboxes.Threads.List("b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1", nil)
use resend_rs::{
list_opts::ListOptions,
types::ListInboxThreadsOptions,
Resend, Result,
};
#[tokio::main]
async fn main() -> Result<()> {
let resend = Resend::new("re_xxxxxxxxx");
let _threads = resend
.inboxes
.list_threads(
"b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1",
ListInboxThreadsOptions::new(),
ListOptions::default(),
)
.await?;
Ok(())
}
import com.resend.Resend;
import com.resend.core.exception.ResendException;
import com.resend.services.inboxes.model.ListInboxThreadsResponseSuccess;
public class Main {
public static void main(String[] args) throws ResendException {
Resend resend = new Resend("re_xxxxxxxxx");
ListInboxThreadsResponseSuccess data = resend.inboxes().threads()
.list("b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1");
}
}
using Resend;
IResend resend = ResendClient.Create( "re_xxxxxxxxx" ); // Or from DI
var resp = await resend.InboxThreadListAsync( new Guid( "b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1" ) );
Console.WriteLine( "Nr Threads={0}", resp.Content.Data.Count );
curl -X GET 'https://api.resend.com/inboxes/b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1/threads' \
-H 'Authorization: Bearer re_xxxxxxxxx'
resend inboxes threads list b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1
{
"object": "list",
"has_more": true,
"data": [
{
"id": "4d8e2a1c-9b3f-4c6d-8a21-3e5f7c9c0d12",
"subject": "Refund for order 1041",
"from": "Ada Lovelace <ada@example.org>",
"to": ["support@example.com"],
"cc": [],
"bcc": [],
"labels": [
{
"id": "7f9c1d2e-4a6b-4c3d-8e15-9b0a7c6d5e34",
"name": "Urgent",
"color": "#E93D82"
}
],
"email_count": 2,
"has_attachment": true,
"has_draft": false,
"read": false,
"received_at": "2026-08-05T14:03:11.229Z",
"folder": "inbox"
}
]
}
Was this page helpful?
⌘I