Email validation · Use cases · Signup forms

Use case

Signup form email validation, before the account exists.

One call on submit tells you whether the address is real, mistyped, disposable or a shared inbox. You allow, challenge or block the registration, and the user never receives a message from the check.

At the form

One request, four possible answers.

safeAllow the registration.
riskyAllow with friction.
invalidBlock at the form.
unknownAllow with a soft flag.
Median responseSub-1s
False positive rate<1%
Free tier100 / month
Standard plan$49.99 / 50,000

Try one address.

The same endpoint your form would call. 10 free checks a day, no key and nothing sent to the address.

Or try

What an unchecked signup costs you.

Dead accounts from mistyped emails

A typo like name@gmial.com means the activation email never lands. The signup counts, the customer never returns, and your funnel quietly leaks.

Free-tier seats handed to abusers

Throwaway and disposable addresses spin up free accounts at will, burning your limits and hiding who your real users are.

A user table that lies

Fake and undeliverable signups inflate your totals and drift your activation rate away from reality, so the growth numbers you report are wrong.

Wasted activation sends

Every dead address still triggers your welcome and activation emails. The bounces pile up and drag your sender reputation down for real users.

How it works at the form.

Three steps, on submit, once per registration.

01

User submits the registration form

The flow starts on submit, not on every keystroke. Validating on submit keeps the form responsive and runs the check exactly once, on the value the user actually intends to use.
02

Your backend calls the API

Your form handler sends the address to the validation endpoint and gets back the signals in one response: format against RFC 5322, MX records, SMTP validity from a live handshake that stops before any message is sent, disposable, catch-all, role-based and free-mail detection.
03

You act on the verdict, then create the account

The response carries a status of safe, risky, invalid or unknown plus the per-signal detail behind it. You allow, challenge or block the registration, then write the user row only for the addresses you accept.

What to do with each verdict.

The API returns the status and the per-signal detail behind it. The decision stays yours.

safe

Format, MX, and SMTP all confirm the mailbox accepts mail.

Allow. Create the account and send the activation email.

risky

Deliverable but unconfirmed at the mailbox. Catch-all domains land here.

Challenge. Create the account but add friction: require email confirmation before granting full access. Do not hard-block a real customer over a catch-all domain.

invalid

Bad format, no MX records, or the server rejected the address. The mailbox does not exist.

Block. Reject the submission at the form and ask the user to correct the address. This is where typos like name@gmial.com get caught.

unknown

The destination server would not give a clear answer, usually because it blocks verification probes.

Allow with a soft flag. Confirm the address with your activation email instead of blocking a registration you cannot judge.

Four rules for the form itself.

Validate on submit, not on every keystroke

Run the check when the user submits, on the final value. Validating on keystroke is noisy, fires against half-typed addresses, and burns quota.

No message is ever sent to the user

The SMTP step stops before delivery. We ask the destination server whether it will accept the address and stop there, so the person registering is never emailed and never notified that a check ran.

Handle unknown gracefully

An unknown result means a provider blocked the probe, not that the user did anything wrong. Let the account through with a soft flag and lean on your activation email to confirm the address instead.

Catch typos while the user is still there

The biggest UX win is catching a mistyped address at the form. A real-time check returns invalid on a dead domain before the page reloads, so the user fixes it on the spot and actually receives your confirmation email.

What does the API response look like?

One POST from your form handler. The status drives your branch; the signals underneath tell you why.

// in your registration handler const check = await fetch( "https://api.trueguard.io/v2/email/validation", { method: "POST", headers: { "X-API-KEY": process.env.TRUEGUARD_KEY, "Content-Type": "application/json" }, body: JSON.stringify({ email }) } ).then((r) => r.json()); if (check.deliverability.status === "invalid") { return reject("Please check your email address"); }
{ "email": "name@gmail.com", "rawEmail": "name@gmail.com", "syntax": { "isValid": true }, "deliverability": { "status": "safe", "isSmtpValid": true, "isMxValid": true, "isCatchall": false, "isInboxFull": false, "isDeliverable": true, "isDisabled": false, "mxRecords": [ "gmail-smtp-in.l.google.com", "alt1.gmail-smtp-in.l.google.com", "alt2.gmail-smtp-in.l.google.com", "alt3.gmail-smtp-in.l.google.com", "alt4.gmail-smtp-in.l.google.com" ] }, "domain": { "name": "gmail.com", "age": 11363, "isLive": true, "isRisky": false }, "quality": { "isDisposable": false, "isFree": true, "isRole": false, "isSubaddress": false } }

Frequently asked questions.

Still deciding? Contact support or read the API reference.

Should I validate on keystroke or on submit?

On submit. Validating on every keystroke fires against half-typed addresses, feels noisy, and burns quota. On submit the check runs once, against the value the user actually intends to use.

Does the user get an email from the check?

No. The SMTP step is a handshake that stops before delivery. We ask the destination server whether it will accept the address and stop there. Nothing is queued, sent, or delivered.

What should I do with an unknown result?

Never hard-block on it. Unknown means the mail server blocked the check or did not answer clearly, not that the user did anything wrong. Let the account through with a soft flag and lean on your activation email.

How much latency does this add to registration?

Median response is under a second. Slow destination mail servers push it higher, so set a timeout in your form handler and decide what happens on timeout: usually allow with a flag rather than block a real customer.

Can I block disposable addresses but allow free providers?

Yes. The response carries separate flags for disposable and free provider, so you can block throwaway domains while letting Gmail and Outlook through untouched.

Is this different from the checkbox confirmation email?

It runs before the account exists. Confirmation emails only tell you an address was reachable after you already created the row and sent a message. Validation at the form stops the row being created at all.

Clean signups from the first one.

100 validations a month, free, no card. Add one call to your form handler and the fake addresses stop becoming accounts.

Get your free API key

No credit card required.

trueguard-logo© 2026 Trueguardinfo@trueguard.io