Get a lead's email status
https://api.ruuster.com/v1/leads/email-statusRuuster's verdict on a lead's email address, by email, CRM id or lead id: valid, invalid, blocked, soft bounce, complaint, unsubscribed or unknown, with the code and reason behind it and since when.
- Authentication:
x-api-keyandx-emailheaders of an owner or admin - Rate limit: lookup call, 20 per minute per key, within the 120 per minute
- Rows count against the daily lead-row quota (50,000 by default)
Ruuster checks every lead's address before it sends (a pre-send verification) and records what
happens when it does send (bounces, blocks and drops from the mail provider, unsubscribes and
spam reports). This endpoint turns that history into one verdict per lead. It is the same verdict
the lead.email_status_changed webhook event carries. The
Email status guide explains the statuses, the
webhook, and how to keep the verdict in your CRM as custom fields.
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
email |
string | Case-insensitive. Returns every lead with that address, as Find a lead does | |
crmExternalId |
string | Exact match on the lead's id in your CRM | |
leadId |
string | A leadId from any other endpoint or event (user:… or unregistered:…) |
Send exactly one of the three, otherwise 400 invalid_parameter. The lookup works even when lead
contact details are off; the response then leaves out email, phone and checkedEmail.
Statuses
status |
Means | Typical code |
|---|---|---|
valid |
Ruuster is delivering to the address | |
invalid |
The mailbox does not exist, is disabled or closed, is disposable or a spam trap, or the address is on the bounce list. Call instead | 5.1.1 bounce, 554 bounce, invalid, disposable, bounced address |
blocked |
The recipient's mail provider refused the message for policy, reputation or content reasons; the mailbox itself may be fine | 5.7.1 block, 5.7.515 block |
soft_bounce |
A temporary problem: the mailbox is full, or their server did not answer. The address may still be good | 4.2.2 block, inbox_full, 5.2.2 bounce |
complaint |
The lead reported a Ruuster email as spam, so sends to them are dropped | spam reporting address |
unsubscribed |
The lead unsubscribed from Ruuster emails, or the CRM record carries an opt-out tag | unsubscribed by the lead, unsubscribed address, crm: Do Not Email |
unknown |
Not verified yet, or the check could not decide | never verified, unknown, auto-unsubscribed |
Precedence when several things are true: delivery on is always valid; the lead's own
unsubscribe outranks a later bounce; a recorded failure outranks a CRM opt-out tag.
Response
data.leads lists every match. Each has the short lead form (leadId, names, contact details
when on, crmExternalId, crmStatus, crmTags, agentId, createdAt, lastLoginAt), then
emailStatus:
| Field | Description |
|---|---|
status |
The verdict, one of the seven above |
code |
What is behind it: the SMTP code and whether it was a bounce or a block, the verification status, or the suppression reason. null when valid |
reason |
One sentence, in plain words |
source |
Where the verdict comes from: platform (the delivery flags), verification (the pre-send check), delivery (a send), lead (they unsubscribed), crm (an opt-out tag) |
checkedEmail |
The address the verdict is about (only when lead contact details are on) |
failedAt |
When the failure behind the verdict was recorded, if there is one |
since |
When the verdict last changed. null when it was classified on this call, for a lead the 15-minute scan hasn't stored yet or whose address changed since; then there is no history |
previousStatus |
The verdict before this one, when known |
More than one lead is normal for an email: the same person can be a registered user and a CRM
contact. No match returns an empty list with 200.