Get one received message and its history
The message's latest state plus every state it passed through, oldest
first. history is the answer to "it says delivered now, but did
something go wrong first?", which the folded list row cannot answer by
construction.
A message addressed to two configured receiving domains is two
deliveries with two histories; pass domain to narrow to one.
A message id unknown to your org is a 404 and never confirms that some other org received one with that id.
Path parameters
messageId string required The SES message id. An opaque string, NOT a UUID — it is also the raw object's key suffix in your own landing bucket.
Query parameters
domain string optional Narrow to one receiving domain's delivery of this message.
Responses
Errors follow the RFC 7807 problem format — see the error reference.
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.
history array<object> required Every outcome recorded for this message, oldest first. It is the answer to "it says delivered now, but did something go wrong first?", which the folded list row cannot answer by construction.
Each entry in history:
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.
code is internal_error. The
request_id field can be quoted to SendOps support to investigate.
application/problem+json