Skip to content

Response Schema

Every validation request returns a consistent JSON structure with the email, validity status, score, individual check results, and recommendations.

{
"email": "user@example.com",
"severity": "valid",
"isValid": true,
"score": 95,
"deliverabilityScore": 92,
"checks": {
"syntax": { ... },
"domain": { ... },
"mxRecords": { ... },
"disposable": { ... },
"roleBased": { ... },
"catchAll": { ... }
},
"recommendations": ["Email passed all validation checks"],
"timestamp": "2024-01-15T10:30:00.000Z",
"processingTime": 94
}
FieldTypeDescription
emailstringThe validated email address
severitystringvalid, warning, or invalid
isValidbooleanQuick validity check (score >= 70)
scorenumberConfidence score (0-100)
deliverabilityScorenumberPredicted deliverability (Pro+ tiers)
checksobjectIndividual validation check results
recommendationsstring[]Actionable suggestions
timestampstringISO 8601 validation timestamp
processingTimenumberProcessing time in milliseconds

SeverityScore RangeMeaning
valid70-100Email is safe to use
warning40-69Email has concerns, use caution
invalid0-39Email should not be used

The score combines results from all validation checks:

ScoreQualityUse Case
90-100ExcellentSafe for all purposes
70-89GoodSafe for transactional email
50-69FairConsider for marketing with caution
30-49PoorHigh risk, manual review recommended
0-29InvalidDo not send email

Each check in the checks object follows this structure:

{
"check": "syntax",
"passed": true,
"status": "pass",
"category": "syntax",
"reason": "Email syntax is valid (RFC 5322 compliant)",
"action": "allow",
"confidence": 100,
"metadata": {}
}
FieldTypeDescription
checkstringCheck identifier
passedbooleanWhether this check passed
statusstringpass, fail, warn, skip, error
categorystringCheck category
reasonstringHuman-readable explanation
actionstringRecommended action
confidencenumberCertainty level (0-100)
metadataobjectAdditional check-specific data
StatusMeaning
passNo issues found
failBlocking issue detected
warnConcern found, not blocking
skipCheck was skipped (not available on tier)
errorCheck failed to execute
ActionMeaning
allowSafe to proceed
blockShould reject
flagMark for monitoring
reviewRequires manual review
CategoryDescription
syntaxEmail format validation
domainDomain and DNS checks
mailboxMailbox existence verification
reputationReputation and blacklist checks
qualityEmail quality indicators
securitySecurity and fraud detection

The checks object contains results for each validation performed:

CheckCategoryDescription
syntaxsyntaxRFC 5322 format validation
domaindomainDomain DNS resolution
mxRecordsdomainMail server configuration
disposablereputationTemporary email detection
roleBasedqualityGeneric address detection
CheckCategoryDescription
catchAllqualityCatch-all domain detection
typoSuggestionqualityCommon typo correction
freeEmailqualityFree provider detection
CheckCategoryDescription
spamTrapreputationSpam trap detection
emailAuthenticationsecuritySPF/DKIM/DMARC analysis
blacklistreputationBlacklist status
domainTrustsecurityDomain trust score
fraudDetectionsecurityAI fraud analysis
CheckCategoryDescription
smtpVerificationmailboxDirect SMTP verification
corporateEmailqualityBusiness email detection
mailboxProviderqualityInfrastructure identification

{
"email": "john.doe@company.com",
"severity": "valid",
"isValid": true,
"score": 95,
"checks": {
"syntax": {
"check": "syntax",
"passed": true,
"status": "pass",
"category": "syntax",
"reason": "Email syntax is valid (RFC 5322 compliant)",
"action": "allow",
"confidence": 100
},
"domain": {
"check": "domain",
"passed": true,
"status": "pass",
"category": "domain",
"reason": "Domain exists and resolves",
"confidence": 100,
"metadata": {
"hasA": true,
"hasAAAA": true
}
},
"mxRecords": {
"check": "mxRecords",
"passed": true,
"status": "pass",
"category": "domain",
"reason": "Found 2 MX records",
"confidence": 100,
"metadata": {
"mxRecords": ["mx1.company.com", "mx2.company.com"],
"primaryMx": "mx1.company.com",
"mxCount": 2
}
},
"disposable": {
"check": "disposable",
"passed": true,
"status": "pass",
"category": "reputation",
"reason": "Not a disposable email provider",
"action": "allow",
"confidence": 100,
"metadata": {
"isDisposable": false
}
},
"roleBased": {
"check": "roleBased",
"passed": true,
"status": "pass",
"category": "quality",
"reason": "Personal email address",
"action": "allow",
"confidence": 95,
"metadata": {
"isRoleBased": false
}
}
},
"recommendations": ["Email passed all validation checks"],
"timestamp": "2024-01-15T10:30:00.000Z",
"processingTime": 94
}
{
"email": "test@mailinator.com",
"severity": "invalid",
"isValid": false,
"score": 25,
"checks": {
"syntax": {
"check": "syntax",
"passed": true,
"status": "pass",
"category": "syntax",
"reason": "Email syntax is valid",
"confidence": 100
},
"disposable": {
"check": "disposable",
"passed": false,
"status": "fail",
"category": "reputation",
"reason": "Disposable email provider detected (mailinator.com)",
"action": "block",
"confidence": 99,
"metadata": {
"isDisposable": true,
"provider": "mailinator.com"
}
}
},
"recommendations": [
"Disposable email detected - consider blocking",
"Request a permanent email address"
],
"timestamp": "2024-01-15T10:30:00.000Z",
"processingTime": 45
}
{
"email": "info@company.com",
"severity": "warning",
"isValid": true,
"score": 65,
"checks": {
"syntax": {
"check": "syntax",
"passed": true,
"status": "pass",
"category": "syntax",
"reason": "Email syntax is valid",
"confidence": 100
},
"roleBased": {
"check": "roleBased",
"passed": false,
"status": "warn",
"category": "quality",
"reason": "Role-based email address (info@)",
"action": "flag",
"confidence": 95,
"metadata": {
"isRoleBased": true,
"roleType": "info",
"riskLevel": "medium"
}
}
},
"recommendations": [
"Role-based email detected - may have multiple recipients",
"Consider requesting a personal email for marketing"
],
"timestamp": "2024-01-15T10:30:00.000Z",
"processingTime": 67
}
{
"email": "user@gmial.com",
"severity": "warning",
"isValid": true,
"score": 55,
"checks": {
"typoSuggestion": {
"check": "typoSuggestion",
"passed": false,
"status": "warn",
"category": "quality",
"reason": "Possible typo detected: gmial.com → gmail.com",
"action": "review",
"confidence": 95,
"metadata": {
"hasTypo": true,
"originalDomain": "gmial.com",
"suggestion": "gmail.com"
}
}
},
"recommendations": [
"Did you mean user@gmail.com?",
"Common typo detected in domain"
],
"timestamp": "2024-01-15T10:30:00.000Z",
"processingTime": 52
}

{
"hasA": true,
"hasAAAA": true
}
{
"mxRecords": ["mx1.example.com", "mx2.example.com"],
"primaryMx": "mx1.example.com",
"mxCount": 2
}
{
"isDisposable": true,
"provider": "mailinator.com"
}
{
"isRoleBased": true,
"roleType": "support",
"riskLevel": "medium"
}
{
"isCatchAll": true
}
{
"hasTypo": true,
"originalDomain": "gmial.com",
"suggestion": "gmail.com"
}
{
"isFreeEmail": true,
"provider": "Google",
"providerName": "Gmail"
}
{
"spf": { "exists": true, "policy": "-all" },
"dkim": { "exists": true },
"dmarc": { "exists": true, "policy": "reject" }
}
{
"mailboxExists": true,
"isGreylisted": false
}
{
"isCorporate": true,
"provider": "microsoft365",
"companyDomain": "acme.com"
}
{
"provider": "Google Workspace",
"infrastructure": "google_workspace"
}

interface EmailValidationResult {
email: string;
severity: 'valid' | 'warning' | 'invalid';
isValid: boolean;
score: number;
deliverabilityScore?: number;
checks: ValidationChecks;
recommendations: string[];
timestamp: string;
processingTime: number;
}
interface ValidationCheck {
check: string;
passed: boolean;
status: 'pass' | 'fail' | 'warn' | 'skip' | 'error';
category: 'syntax' | 'domain' | 'mailbox' | 'reputation' | 'quality' | 'security';
reason: string;
action: 'allow' | 'block' | 'flag' | 'review';
confidence: number;
metadata?: Record<string, unknown>;
}