List per-recipient broadcast results
Returns one page of per-recipient send outcomes for a broadcast, read
from the authoritative ClickHouse send log, newest-first. Each row is one
recipient decision: sent (handed to SES, message_id set), failed
(SES rejected it, failure_reason set), or filtered (dropped by the
consent filter before send, filter_tier + failure_reason set). The
filtered rows explain the gap between the audience size and the sent
count — who was dropped and why. Optionally narrow to one outcome with
?result=. Test-send rows are never included. 404 not_found when the id
is not a broadcast in this org.
PII: every row carries the recipient's full email address in email,
so paging this endpoint to the end enumerates the broadcast's entire
audience. api.broadcasts.view alone is enough — there is no second
scope, and nothing is masked. Treat a page of this endpoint as personal
data.
Path parameters
id string<uuid> required Resource UUID. An unparseable id reads as a clean 404 not_found.
Query parameters
result string enum optional Narrow to one outcome. Omit for all results.
limit integer optional Page size (1–200). Default 50.
cursor string optional Opaque cursor returned from the previous page.
Responses
Errors follow the RFC 7807 problem format — see the error reference.
data array<object> required Each entry in data:
contact_id string required The contact's id, or empty when the recipient was not a contact.
email string required The recipient's full email address, in the clear — never masked or
truncated, and readable with api.broadcasts.view alone. This field
is personal data.
result string enum required One of: sent, failed, filtered
failure_reason string optional SES rejection reason (failed) or consent-drop reason (filtered).
filter_tier string enum optional Which consent tier dropped the recipient (filtered rows only).
One of: account, topic
message_id string optional The SES message id (sent rows only).
occurred_at string<date-time> required pagination object required Fields of pagination:
has_more boolean required next_cursor string | null optional code is internal_error. The
request_id field can be quoted to SendOps support to investigate.
application/problem+json