Get Started in 3 Steps
Easier than making instant noodles. Almost.
const response = await fetch('https://api.validornah.com/v1/verify', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.VALIDORNAH_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ email: 'test@example.com' }),
});
const result = await response.json();
console.log(result.status); // 'valid' | 'invalid' | 'risky'Authentication
All requests need your secret handshake (Bearer token).
Slap your API key in the Authorization header:
Authorization: Bearer YOUR_API_KEYEndpoints
Base URL: https://api.validornah.com
Single Email Check
One email at a time. The slow and steady approach.
const response = await fetch('https://api.validornah.com/v1/verify', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ email: 'john@company.com' }),
});
const result = await response.json();Bulk Email Check
Got a list? Throw it at us. We can handle it.
const emails = ['john@company.com', 'jane@startup.io', 'test@tempmail.com'];
const response = await fetch('https://api.validornah.com/v1/verify/bulk', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ emails }),
});
const { results, summary } = await response.json();Response Format
What our API tells you (and what it means)
Status Codes
validAll good - email exists and works
invalidNope - this email is going nowhere
riskyHmm - might work, might not. Proceed with caution.
unknownShrug - we couldn't figure it out
What We Check
Basic Checks
syntaxIs it even formatted like an email?
dnsDoes the domain exist? MX records lookup.
disposableIs it a burner email? We check 100k+ disposable domains.
roleIs it a generic address (info@, admin@)?
freeProviderGmail, Yahoo, Hotmail crowd
Deep Analysis
typoCatches common typos (gmial.com -> gmail.com)
securitySPF, DKIM, DMARC security records check
domainAgeHow old is this domain? New = suspicious.
blacklistIs the domain on any DNSBL blacklists?
patternDoes the email pattern look legit or sketchy?
profileGravatar, website existence checks
mxQualityMX provider quality (Google, Microsoft, etc.)
Rate Limits
How fast you can go (depends on your plan)
| Plan | Requests/min | Burst |
|---|---|---|
| Starter | 60/min | 5,000/month |
| Pro | 120/min | 25,000/month |
| Business | 300/min | 150,000/month |
| Enterprise | Custom | Custom |
Error Codes
When things go wrong (and what it means)
| Code | What happened |
|---|---|
| 400 | You sent us garbage (check your params) |
| 401 | Who are you? (invalid API key) |
| 403 | Nice try, but no access |
| 429 | Slow down there, speed racer (rate limited) |
| 500 | Our bad. Something broke on our end. |
1. Grab Your API Key
Sign up, head to dashboard, copy your key. Done.
Join the Party