List received messages
One page of mail your org RECEIVED, newest first, folded to the latest
state per (message, receiving domain). A message that parked and was
later redelivered is one row saying delivered, not two rows to
reconcile; the states it passed through are on the detail route.
PII. Every row carries the sender's address, the recipient's address and the real subject line. Nothing is masked and no further scope unmasks anything — an inbound log that could not say who wrote in could not answer the question it exists for.
outcome is delivered, rejected, dropped, no_route or parked,
and only parked is NOT terminal: the raw message is still in your own
S3 bucket and a replay can still deliver it. no_route means the
recipient did not match the domain's allow_patterns, dropped means a
verdict posture discarded it, and rejected means your endpoint
answered with a 4xx that was not 429 — it said no, definitively, so
nothing retried.
verdicts values may be the empty string, which is a real value rather
than a missing one: a replayed message carries no verdicts at all,
because SES's results live only in the original notification.
Query parameters
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.
limit integer optional Page size (1–200). Default 50.
cursor string optional Opaque cursor returned from the previous page.
domain string optional Narrow to one receiving domain, by name.
outcome string enum optional Narrow to one outcome. An unknown value is 422, not an empty page.
verdict string enum optional Narrow to messages that failed one SES check.
q string optional Free-text match over sender, recipient and subject.
Responses
Errors follow the RFC 7807 problem format — see the error reference.
data array<object> required Each entry in data:
message_id string required domain string required The receiving domain this row is about. A message addressed to two configured domains produces two rows.
recipient string required The address at domain this delivery was for.
recipients array<string> required The whole SES envelope recipient list, which may include addresses at other domains entirely.
from string required subject string required received_at string<date-time> required outcome string enum required Only parked is NOT terminal: the raw message is still in your own bucket and a replay can still deliver it. no_route means the recipient matched nothing in the domain's allow_patterns; dropped means a verdict posture discarded it; rejected means your endpoint answered with a 4xx that was not 429, which is a definitive no and is not retried.
One of: delivered, rejected, dropped, no_route, parked
reason string optional detail string optional verdicts object required SES's scan and authentication findings. The empty string IS A REAL VALUE and not a missing one: a replayed message carries no verdicts at all, because SES's results live only in the original notification and are gone by replay time.
Fields of verdicts:
spam string enum required One of: ``, pass, fail, gray, processing_failed, disabled
virus string enum required One of: ``, pass, fail, gray, processing_failed, disabled
spf string enum required One of: ``, pass, fail, gray, processing_failed, disabled
dkim string enum required One of: ``, pass, fail, gray, processing_failed, disabled
dmarc string enum required One of: ``, pass, fail, gray, processing_failed, disabled
webhook_status integer required The HTTP status of the last delivery attempt, 0 when none was made.
attempts integer required is_auto_reply boolean required A hint read off Auto-Submitted, Precedence and the X-Auto* headers, not a verdict.
is_reply boolean required True when SendOps correlated this to something it sent.
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