List outbound sent emails
Returns a paginated list of OUTBOUND emails the caller's org has sent via /send-mail (and /emails/{id}/reply, which forwards through /send-mail). Includes every recorded attempt, including gate-denied attempts that the agent never called and rows still in queued state.
For inbound mail received at your verified domains, see /emails. There is no unified send/receive history endpoint; the two surfaces are intentionally separate because the underlying tables, statuses, and lifecycle differ.
Email bodies (body_text, body_html) are NOT included on list rows so a 50-row page can't balloon into a multi-MB response when sends are near the 5MB body cap. Use /sent-emails/{id} to fetch a single row with bodies, or cross-reference by client_idempotency_key if the caller already has the body locally.
Query parameters
Pagination cursor from a previous response's meta.cursor field. Format: {ISO-datetime}|{id}
Number of results per page
Lifecycle status of a sent_emails row. Possible values:
- queued: pre-call INSERT; the outbound agent has not yet replied.
- submitted_to_agent: agent accepted; queue_id is set.
- agent_failed: agent rejected; error_code and error_message carry the reason.
- gate_denied: a recipient-scope gate denied the send; the agent was never called. The gates array carries the denial detail. /send-mail returns 403 in this case so callers see the denial synchronously; /sent-emails additionally records the row for historical lookup, which is when this status appears in a listing.
- unknown: terminal indeterminate; the on-box log poller couldn't classify the receiver's response.
- delivered / bounced / deferred / wait_timeout: terminal delivery outcomes (see DeliveryStatus).
Filter to rows in this status. Useful for polling queued rows that haven't transitioned, auditing gate-denied attempts, or listing only successful deliveries.
Filter to the row matching a specific server-issued request_id. The /send-mail response surfaces request_id on every send; this lookup lets the caller find the historical row for a given live call without remembering its id.
Filter to rows with the given client_idempotency_key. Multiple rows can share a key (a retry that hit the idempotent-replay path returns the same row, but a retry with a DIFFERENT canonical payload under the same key is rejected by /send-mail before the row is written, so duplicates are bounded).
Inclusive lower bound on created_at.
Inclusive upper bound on created_at.
Response
Page of sent-email summaries