Skip to main content
POST

Authorizations

Authorization
string
header
required

Org-scoped Norbelys API key. Create one in Settings → API keys and send it as Authorization: Bearer ak_….

Headers

Idempotency-Key
string

Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.

Maximum string length: 255

Body

application/json

The request body for a synchronous email verification: one address to check.

email
string
required

The email address to verify.

Required string length: 1 - 320

Response

OK

A synchronous email-verification result: the reachability rollup with score/reason/reasonCode, plus the syntax/mx/signals evidence. Computed per request — it is not stored and has no id.

checkedAt
string<date-time>
required

When this verdict was computed (RFC 3339). Verdicts are cached for 24h, so this can be up to a day old.

Example:

"2026-07-04T09:00:00.000Z"

email
string
required

The normalized (trimmed, lowercased) address that was checked.

mx
VerifyMx · object
required

DNS / mail-exchanger checks.

reachability
enum<string>
required

The single deliverability verdict. "safe" = the mailbox was positively confirmed (rarely returned); "risky" = routable but low quality — a spam-listed domain, a role/shared inbox, or an accept-all domain; "invalid" = undeliverable — bad syntax, an unregistrable TLD, a disposable domain, no mail server, or a previously bounced address; "unknown" = a deliverable-looking address whose mailbox could not be confirmed without sending (the common default).

Available options:
safe,
risky,
invalid,
unknown
Example:

"unknown"

reason
string
required

A short, human-readable explanation of the verdict.

Example:

"Deliverable format on a domain that accepts mail (hosted on google)."

reasonCode
enum<string>
required

Stable machine-readable code for the dominant reason (the companion to the prose reason). Values: invalid_syntax (not a valid address format) · typo_suspected (a likely correction exists — see suggestedCorrection) · invalid_tld (the domain suffix is not a registrable IANA/public-suffix entry) · disposable (throwaway / temp-mail domain) · no_mail_server (the domain has no MX) · previously_bounced (a real send to this address hard-bounced before — it WILL bounce again) · spam_listed (the domain is on a spam/abuse blocklist) · undeliverable (an external check rejected the mailbox) · accept_all (the domain accepts mail for any local part) · risky_tld (on a frequently-abused TLD and not reputable) · gibberish_local (the local part looks random) · role_account (a role / shared inbox like info@ or sales@) · deliverable (an external check confirmed the mailbox) · deliverable_unconfirmed (deliverable format on a domain that accepts mail, mailbox not confirmed).

Available options:
invalid_syntax,
typo_suspected,
invalid_tld,
disposable,
no_mail_server,
previously_bounced,
spam_listed,
undeliverable,
accept_all,
risky_tld,
gibberish_local,
role_account,
deliverable,
deliverable_unconfirmed
Example:

"deliverable_unconfirmed"

score
integer
required

Quality and confidence score from 0 to 100; higher means more likely a real, deliverable address.

Required range: 0 <= x <= 100
Example:

88

signals
VerifySignals · object
required

The individual quality signals behind the verdict.

suggestedCorrection
string | null
required

A suggested correction when the address looks like a typo, or null.

syntax
VerifySyntax · object
required

Syntax checks.

object
any
default:email_verification

Always "email_verification" — identifies the resource type.