Retrieve one copy of a broadcast
One person's copy: the same row `GET /broadcasts/{id}/recipients` lists, plus the subject, HTML and text exactly as that person received them, with the merge fields filled in and their own unsubscribe link.
Runs the real call against your workspace, with your own key.
GET /broadcasts/{id}/recipients/{emailId}
One person's copy: the same row GET /broadcasts/{id}/recipients lists, plus the subject, HTML and text exactly as that person received them, with the merge fields filled in and their own unsubscribe link.
Example
Needs emails:read. emailId is the emailId of the copy, from the recipients list. The answer is shortened here.
curl "$OE/broadcasts/brd_5a8c1e3f7b2d94a06c8e1f3b/recipients/msg_01dad25067bc4dac966d515d" -H "$AUTH"{ "object": "broadcast_recipient", "emailId": "msg_01dad25067bc4dac966d515d", "email": "[email protected]", "name": "Ada Lovelace", "status": "sent", "deliveredAt": "2026-09-23T12:00:11.000Z", "opens": 3, "clicks": 1, "unsubscribedAt": null, "subject": "Ada, the September release is out", "html": "<p>Hi Ada,</p><p>Here is what changed this month.</p>", "text": "Hi Ada, here is what changed this month. Unsubscribe: https://…"}The HTML is from before open and click tracking was added, so it is what you wrote with the merge fields filled in, not the bytes that carried the tracking pixel and rewritten links.
An emailId that is not a copy of this broadcast is a 404 recipient_not_found, even when it names another email in the workspace.
Refusals
| Status | Code | When |
|---|---|---|
| 400 | invalid_cursor | On the recipients list, a cursor that list did not hand out. |
| 403 | insufficient_scope | The key does not hold emails:read. |
| 404 | broadcast_not_found | The id names no broadcast in this workspace, or the key is limited to particular addresses or domains and the broadcast was sent from one it does not hold. |
| 404 | recipient_not_found | On GET /broadcasts/{id}/recipients/{emailId}, an emailId that is not a copy of this broadcast. |