Search inbound emails
searchEmailsRead-onlyIdempotent
Find particular inbound emails. Use this when you are looking for specific messages: a full-text query (q) over subject, body, sender and recipient, or structured filters on sender, recipient, subject, body, attachments, spam score, or the sent email they reply to. Results can be ranked by relevance or date and carry a body snippet. To page through the inbox newest first, or to wait for mail that has not arrived yet, use listEmails instead. Each row is id, thread_id, received_at, from, to, subject, status, a snippet of the body and attachment_count when there are attachments; open one with getEmail.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text query matched across subject, body, sender, and recipient. Every word must match, so fewer words find more; put a phrase in double quotes. An upper-case OR between words, phrases, or subject: / body: terms accepts either (invoice OR receipt). OR binds tighter than the implicit AND: acme invoice OR receipt means acme and either invoice or receipt. OR cannot join the other field filters, and there is no NOT. Field filters can be written inline: from:, to:, subject:, body:, has:attachment, before:, after:, domain:, status:, awaiting:, automated:. | |
| to | No | Filter to emails addressed to this recipient. | |
| body | No | Filter to emails whose body contains this string. | |
| from | No | Filter to emails from this sender address or domain. | |
| full | No | Set true for the record as stored. By default the result is a compact view for reading, which leaves out per-row delivery, webhook and classification state (message_id, domain and org ids, spam score, sizes, webhook status). | |
| sort | No | Sort order. Defaults to relevance when there is text to rank against (q, subject or body) and to received_at_desc otherwise; relevance without any such text is treated as received_at_desc. Use received_at_asc with date_from for polling new mail. | |
| limit | No | Maximum number of emails to return (1 to 100, default 50). | |
| cursor | No | Pagination cursor from a previous response's `meta.cursor` field. | |
| status | No | Filter to emails in this processing status. | |
| date_to | No | Inclusive upper bound on received_at. An ISO 8601 date-time with Z or a UTC offset ("2026-10-01T09:00:00Z", "2026-10-01T09:00:00-04:00"), or a calendar date ("2026-10-01"), which runs to the end of that day, UTC. A time with no offset is read as UTC. | |
| snippet | No | Whether rows read with full: true carry highlighted match fragments for a text query (default true). The body snippet on each row is returned either way. | |
| subject | No | Filter to emails whose subject contains this string. | |
| date_from | No | Inclusive lower bound on received_at. An ISO 8601 date-time with Z or a UTC offset ("2026-10-01T09:00:00Z", "2026-10-01T09:00:00-04:00"), or a calendar date ("2026-10-01"), which starts at 00:00 UTC. A time with no offset is read as UTC. | |
| domain_id | No | Filter to emails received on a specific verified domain. | |
| spam_score_lt | No | Filter to emails with a spam score strictly below this value. | |
| has_attachment | No | Filter to emails that have (true) or lack (false) attachments. | |
| include_facets | No | Set true to also get aggregated facet counts (by sender, domain, status and whether there is an attachment) for the whole result set. Left out by default. | |
| spam_score_gte | No | Filter to emails with a spam score at or above this value. | |
| reply_to_sent_email_id | No | Filter to inbound emails that are replies to a specific sent email ID. |
Output Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| tool | Yes | ||
| status | Yes | ||
| statusText | No |