List messages sent to one recipient (PII-gated)
Returns one cursor-paginated page of messages addressed to a specific
recipient — the same shape as listMessages, but with the recipient
pinned from the URL path. This route is gated solely on the
api.messages.unmask_recipients scope (the broader api.messages.view
is not required) so you can grant audit-style recipient lookup without
exposing the full message index.
Match is case-sensitive on the stored recipient address. URL-encode
@ as %40 (e.g. user%40example.com). Unknown recipients return
200 with data: [] — never 404. Same 30-day default window and
plan-retention behavior as listMessages.
Path parameters
email string<email> required Recipient address. Percent-encode @ as %40.
Query parameters
limit integer optional Page size (1–200). Default 50.
cursor string optional Opaque cursor returned from the previous page.
from string<date-time> optional Window start (RFC 3339). Defaults to 30 days ago.
to string<date-time> optional Window end (RFC 3339). Defaults to now.
Responses
Errors follow the RFC 7807 problem format — see the error reference.
data array<object> required Each entry in data:
id string required channel string optional template string optional The SES template name the message was sent with — the value the
template filter matches. Absent when the message was not sent
from a SendOps template.
template_id string<uuid> optional The SendOps template template belongs to. Absent when no current template has that SES name.
template_name string optional That template's display name.
source object optional What in SendOps sent the message. Absent for mail your own application sent through the same SES account, and for messages sent before SendOps recorded sources.
Fields of source:
type string enum required One of: workflow, broadcast, broadcast_test
id string<uuid> required The workflow or broadcast id.
name string | null required The workflow's or broadcast's name; null once it has been deleted.
from string required to string required The recipient's full email address, in the clear. It is never
masked or truncated, and api.messages.view alone is enough to
read it — api.messages.unmask_recipients gates searching by a
recipient, not seeing one. This field is personal data.
subject string optional sent_at string<date-time> required status string required last_event_at string<date-time> optional pagination object required Fields of pagination:
has_more boolean required next_cursor string | null optional validation_failed Problem. When the refusal is about a
reference — a segment key, template slug, topic or attribute name the
organization does not have — it additionally carries validation_code,
field, line/column, missing, candidates and next_step, so a
client can correct the call without a second round of guessing. See
ValidationProblem.
application/problem+json code is internal_error. The
request_id field can be quoted to SendOps support to investigate.
application/problem+json