Skip to main content

Single Verification Endpoint

The single verification endpoint lets you verify one email address at a time in real-time. Perfect for registration forms, lead capture, and instant validation.


Endpoint Details

PropertyValue
URLhttps://app.validemailchecker.com/api/verify-single
MethodPOST
Content-Typeapplication/json
AuthenticationBearer token (API key)
Credits1 credit per verification

Request Format

Headers

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Body

{
"email": "user@example.com"
}
FieldTypeRequiredDescription
emailstringYesThe email address to verify

Basic Example

cURL

curl -X POST https://app.validemailchecker.com/api/verify-single \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com"}'

API Documentation showing single verification example


Response Format

Successful Response (200 OK)

{
"email": "support@validemailchecker.com",
"status": "role_account",
"is_valid": true,
"is_disposable": false,
"is_role_account": true,
"is_catch_all": false,
"is_free_email": false,
"mx_found": true,
"domain": "validemailchecker.com",
"risk_score": 7,
"deliverability": "high",
"credits_used": 1,
"verified_at": "2026-01-03T20:35:27.124Z",
"reason": "Role account detected"
}
info

This is a real response from our API! The screenshot below shows the actual Postman test.

Postman showing real API response


Response Fields Explained

Let's break down each field in the response:

Core Fields

FieldTypeDescription
emailstringThe email address that was verified
statusstringThe verification result status (see Status Values)
is_validbooleantrue if the email is deliverable
reasonstringHuman-readable explanation of the result

Email Characteristics

FieldTypeDescription
is_disposablebooleantrue if it's a temporary/throwaway email
is_role_accountbooleantrue if it's a role-based address (info@, support@, admin@)
is_catch_allbooleantrue if the domain accepts all emails
is_free_emailbooleantrue if from a free provider (Gmail, Yahoo, Outlook, etc.)
mx_foundbooleantrue if valid MX records exist
domainstringThe domain portion of the email

Risk Assessment

FieldTypeDescription
risk_scoreintegerRisk score from 0-100 (lower = safer)
deliverabilitystringOverall rating: high, medium, low, or unknown

Metadata

FieldTypeDescription
credits_usedintegerCredits consumed (usually 1)
verified_atstringISO 8601 timestamp of when verification occurred

Status Values

The status field indicates the verification result:

✅ Safe Statuses

StatusDescriptionAction
safeValid, deliverable email addressSend emails confidently

⚠️ Risky Statuses

StatusDescriptionAction
riskyDeliverable but has risk factorsUse with caution
catch_allDomain accepts all emails (can't confirm mailbox exists)May bounce
role_accountGeneric address like info@, admin@, support@Usually valid but not personal
unknownVerification couldn't completeRetry later

❌ Invalid Statuses

StatusDescriptionAction
invalidEmail address doesn't existDo not send
disposableTemporary/throwaway emailDo not send
spamtrapKnown spam trap addressDo not send - dangerous!
warning

Never send emails to invalid, disposable, or spamtrap addresses. This will harm your sender reputation and deliverability.


Error Responses

Invalid API Key (401)

{
"error": true,
"message": "Invalid or inactive API key",
"code": "UNAUTHORIZED"
}

Invalid Request (400)

{
"error": true,
"message": "Email is required",
"code": "BAD_REQUEST"
}

Rate Limited (429)

{
"error": true,
"message": "Rate limit exceeded. Please slow down.",
"code": "RATE_LIMITED",
"retry_after": 60
}

Insufficient Credits (402)

{
"error": true,
"message": "Please purchase more credits to continue",
"code": "INSUFFICIENT_CREDITS",
"current_balance": 0
}

Server Error (500)

{
"error": true,
"message": "Internal server error",
"code": "SERVER_ERROR"
}

tip

For high-volume verification, consider using the Bulk Verification Endpoint instead. It's more efficient for verifying multiple emails.


Use Cases

Registration Form Validation

app.post('/register', async (req, res) => {
const { email, password } = req.body;

// Verify email before creating account
const verification = await verifyEmail(email);

if (!verification.is_valid) {
return res.status(400).json({
error: 'Please provide a valid email address'
});
}

if (verification.is_disposable) {
return res.status(400).json({
error: 'Temporary email addresses are not allowed'
});
}

// Proceed with registration
await createUser(email, password);
});

Lead Qualification

async function qualifyLead(email) {
const result = await verifyEmail(email);

return {
email,
isValid: result.is_valid,
quality: result.deliverability,
risk: result.risk_score,
isBusinessEmail: !result.is_free_email,
recommendation: getRecommendation(result)
};
}

function getRecommendation(result) {
if (result.status === 'safe' && !result.is_free_email) {
return 'HIGH_PRIORITY'; // Business email, verified
}
if (result.status === 'safe') {
return 'NORMAL'; // Personal email, verified
}
if (result.is_valid) {
return 'LOW_PRIORITY'; // Valid but risky
}
return 'SKIP'; // Invalid
}

Common Questions

How fast is the verification?

Most verifications complete in 1-3 seconds. Complex domains or those with aggressive anti-spam measures may take up to 10 seconds.

What if I get "unknown" status?

The unknown status means we couldn't definitively verify the email. This can happen due to:

  • Server timeouts
  • Aggressive anti-spam measures
  • Temporary server issues

Consider retrying later or treating as risky.

Are credits refunded for invalid emails?

You're charged 1 credit regardless of the result. However, if verification completely fails (our system error), credits are not deducted.

Can I verify my own email domain?

Yes! You can verify any email address, including those on your own domain. This is useful for testing.

Is there a sandbox/test mode?

Currently, all API calls use real credits. We recommend using a small test batch to verify your integration works before going to production.


Next Steps

Ready for more?

-> Bulk Verification Endpoint - Verify multiple emails efficiently

-> Rate Limits & Error Handling - Understand limits and handle errors