import { Resend } from 'resend';
const resend = new Resend('re_xxxxxxxxx');
const { data, error } = await resend.broadcasts.recipients(
'559ac32e-9ef5-46fb-82a1-b76b840c0f7b',
{ type: 'clicked', limit: 20 },
);
curl -X GET 'https://api.resend.com/broadcasts/559ac32e-9ef5-46fb-82a1-b76b840c0f7b/recipients?type=clicked&limit=20' \
-H 'Authorization: Bearer re_xxxxxxxxx'
{
"object": "list",
"has_more": true,
"data": [
{
"id": "b2Zmc2V0OjA",
"contact_id": "e169aa45-1ecf-4183-9955-b1499d5701d3",
"email": "carter@example.com",
"count": 3,
"clicked_links": [
{ "url": "https://resend.com/pricing", "clicks": 2 },
{ "url": "https://resend.com/docs", "clicks": 1 }
]
},
{
"id": "b2Zmc2V0OjE",
"contact_id": null,
"email": "dana@example.com",
"count": 1,
"clicked_links": [{ "url": "https://resend.com/pricing", "clicks": 1 }]
}
]
}
List Recipients
Retrieve the recipients of a broadcast for a given event type.
GET
/
broadcasts
/
:broadcast_id
/
recipients
import { Resend } from 'resend';
const resend = new Resend('re_xxxxxxxxx');
const { data, error } = await resend.broadcasts.recipients(
'559ac32e-9ef5-46fb-82a1-b76b840c0f7b',
{ type: 'clicked', limit: 20 },
);
curl -X GET 'https://api.resend.com/broadcasts/559ac32e-9ef5-46fb-82a1-b76b840c0f7b/recipients?type=clicked&limit=20' \
-H 'Authorization: Bearer re_xxxxxxxxx'
{
"object": "list",
"has_more": true,
"data": [
{
"id": "b2Zmc2V0OjA",
"contact_id": "e169aa45-1ecf-4183-9955-b1499d5701d3",
"email": "carter@example.com",
"count": 3,
"clicked_links": [
{ "url": "https://resend.com/pricing", "clicks": 2 },
{ "url": "https://resend.com/docs", "clicks": 1 }
]
},
{
"id": "b2Zmc2V0OjE",
"contact_id": null,
"email": "dana@example.com",
"count": 1,
"clicked_links": [{ "url": "https://resend.com/pricing", "clicks": 1 }]
}
]
}
Broadcast metrics and recipients are currently in private beta and only
available to a limited number of users. APIs might change before it is generally available.
Get in touch if you’re interested in testing
this feature.Once you have access, upgrade your Resend SDK to use the methods on this
page:
npm install resend@6.19.0-preview-broadcast-metrics.0
type (for
example everyone who opened, clicked, or bounced). Results are paginated
with cursors. See Pagination for how after and
before work.
Responses are cached for up to 15 minutes, so requesting the same page again
may return slightly stale data within that window.
Path Parameters
Query Parameters
Response Fields
string
Always
list.boolean
Whether more recipients exist beyond this page.
array
The recipients matching the requested
type.Hide properties
Hide properties
string
An opaque cursor for this row, used only for pagination. It does not
identify any entity in Resend. Use
contact_id to reference the contact.string | null
The matching contact’s ID.
null when the recipient’s email no longer
maps to a contact.string
The recipient’s email address.
number
How many times the recipient triggered the event. Only returned for
type=opened and type=clicked.string | null
The bounce classification:
permanent, transient, or undetermined.
Only returned for type=bounced.import { Resend } from 'resend';
const resend = new Resend('re_xxxxxxxxx');
const { data, error } = await resend.broadcasts.recipients(
'559ac32e-9ef5-46fb-82a1-b76b840c0f7b',
{ type: 'clicked', limit: 20 },
);
curl -X GET 'https://api.resend.com/broadcasts/559ac32e-9ef5-46fb-82a1-b76b840c0f7b/recipients?type=clicked&limit=20' \
-H 'Authorization: Bearer re_xxxxxxxxx'
{
"object": "list",
"has_more": true,
"data": [
{
"id": "b2Zmc2V0OjA",
"contact_id": "e169aa45-1ecf-4183-9955-b1499d5701d3",
"email": "carter@example.com",
"count": 3,
"clicked_links": [
{ "url": "https://resend.com/pricing", "clicks": 2 },
{ "url": "https://resend.com/docs", "clicks": 1 }
]
},
{
"id": "b2Zmc2V0OjE",
"contact_id": null,
"email": "dana@example.com",
"count": 1,
"clicked_links": [{ "url": "https://resend.com/pricing", "clicks": 1 }]
}
]
}
Was this page helpful?
⌘I