Best Practices for Parsing Email Verification API Response JSON Schema
Learn how to reliably parse email verification API response JSON schemas to improve list accuracy, reduce bounces, and boost deliverability with real.
Why Your Email Verification API Response Parsing Matters
You’re sending emails. You’ve chosen a tool with 98.9% accuracy. You’re confident—until your deliverability drops, your bounce rate spikes, and your inbox placement tank. The problem? Your code isn’t reading the API response right.
It’s not the validation engine that’s failing. It’s how you handle the JSON verdicts, scores, and metadata returned. Parsing the response incorrectly means you miss invalid addresses, flag clean ones as risky, or fail to detect catch-alls—every mistake costs you sender reputation.
Think of the API response like a medical report: accurate tests don’t help if you misread the diagnosis. The best verification tool means nothing if your parser doesn’t understand what each field means. That’s why best practices for parsing email verification API response JSON schema aren’t just technical hygiene—they’re core to deliverability.
Key takeaways
- Incorrectly parsing status codes like "invalid" or "risky" leads to sending to addresses that fail delivery or trigger spam complaints.
- Ignoring metadata fields like "role account" or "disposable domain" prevents you from filtering high-risk senders early in the workflow.
- Even with a 98.9% accurate tool, poor response parsing can result in real-world bounce rates above industry benchmarks due to missed edge cases.
What Does a Real-Time Email Verification API Response JSON Schema Look Like?
Each email verification API returns a unique structure—no two are identical. While some basic fields like email, status, and is_valid appear across providers, the schema details, nesting, and additional insights vary. You’ll find real-time verdicts, risk scores, and domain-level signals, but the exact format depends on the service. Let’s break down what you can expect—and what to watch for.
Common Ground: Base Fields Across Providers
You’ll commonly see email, status, is_valid, reason, risk_score, and timestamp in most real-time verification responses. These are the building blocks of a verified result. For example, status might return valid, invalid, or risky, while reason explains why—like disposable or catch-all. These fields are widely accepted and supported by email deliverability standards.
Some services go further, adding domain-level insights such as mx_exists, smtp_connected, or disposable_domain. These signals help you assess inbox placement potential. A domain with mx_exists: true and smtp_connected: true is far more likely to receive mail than one that fails both. These checks map to real-world delivery behavior, as confirmed by industry benchmarks from sources like the SMTP standard (RFC 5321) and deliverability reports from MxToolbox.
Why Consistency Matters: The Email List Validation Advantage
Unlike many providers with inconsistent or undocumented responses, Email List Validation maintains a predictable, structured schema. Every real-time API call returns the same core fields, even when processing thousands of emails in bulk. This uniformity means you don’t need to rewrite parsing logic for every new list.
Our response includes actionable metadata: role_account, free_provider, disposable_domain, and has_dns_error—all with clear, human-readable values. This transparency cuts down on debugging and speeds up integration. For teams using platforms like Mailchimp or Klaviyo, this consistency reduces errors and ensures reliable automation. You can integrate it directly with your CRM or marketing stack without guessing what the payload means.
See how it works in real time: verify emails instantly and get a full, standardized JSON response. Whether you're cleaning a campaign list or validating leads, predictable responses mean fewer surprises.
The Critical Difference Between 'Valid' and 'Risky' Verdicts
You might assume 'valid' means ready to send, but a 'risky' verdict often means the email address is technically correct yet unlikely to deliver reliably—due to a full inbox, greylisting, or a role-based account. Treating 'risky' as 'valid' leads to soft bounces, degraded sender reputation, and lower inbox placement over time. A well-built parser doesn’t just accept 'valid'—it flags 'risky' for review or deferred delivery.
Why 'Risky' Isn’t Just a Warning—It’s a Signal
Many engineers stop at 'valid', but a 'risky' classification isn’t a failure—it’s a data point. It typically signals one of three things: the inbox is temporarily full, the server is greylisting senders, or the address is a role account (like support@ or info@), which often auto-rejects or routes to a shared inbox. These are not errors in syntax but delivery risks.
Ignoring 'risky' addresses means you’re sending to accounts that may never receive your message. Even if they don’t bounce outright, the failure to deliver affects your sender reputation with providers like Gmail or Outlook. Over time, consistently high soft bounces—often linked to these 'risky' cases—can result in throttling or inclusion on blocklists.
How to Parse and Act on 'Risky' Responses
Your API parser should not treat 'valid' and 'risky' as binary outcomes. Instead, create clear logic paths: mark 'risky' entries for manual review, delay delivery for recheck, or route them through a lower-priority channel. This avoids wasting resources on low-deliverability sends.
For instance, if you’re using a real-time email verification API, the response might include a field like verdict with values such as valid, risky, or catch-all. A robust parser checks each verdict and takes action. You can test your logic using inbox placement tools to simulate real-world delivery behavior.
Industry practices, such as those outlined by the RFC 6522 on sender reputation, emphasize that consistent handling of marginal cases is a core tenet of responsible email sending. A system that only flags 'invalid' while ignoring 'risky' misses a critical layer of control.
If you're building or optimizing a verification workflow, consider using our real-time email verification API to get accurate, granular feedback—including risk assessment—on each address, so you know exactly what to do with each result.
How to Handle Catch-All Addresses in Your Response Pipeline
When your email verification API returns a catch-all status, treat it as a hard rejection by default. These domains accept any email address, even invalid or non-existent ones, which means they provide no meaningful signal about deliverability. Including them in your mailing list raises bounce rates, risks triggering spam traps, and weakens your sender reputation over time. Always filter out or flag catch-all responses unless you have a specific, justified need.
Why Catch-All Addresses Break Delivery and Reputations
Catch-all domains are designed to receive mail for any address, even typos or ghost addresses. That sounds convenient, but it’s a red flag in email verification. When you send to an address on a catch-all domain, you’re not verifying a real user—you’re testing a mailbox that won’t notify you of failures, and it may never read your message. This leads to hidden bounces, wasted sends, and poor inbox placement over time.
Spam filters track patterns like high bounce rates and low engagement. If a large portion of your list is catch-all addresses, even if they technically “accept” your email, your messages may end up labeled as low-quality content or even flagged as spam. The damage compounds—not just with one campaign, but across all future sends.
How to Respond to Catch-All Signals in Your Pipeline
When the API returns catch-all as a result, don’t assume it’s a valid lead. Let’s be clear: you’re not verifying a human—you’re verifying a mailbox that doesn’t care. Treat this response like a hard error. You can either drop the address entirely or flag it for manual review, depending on your workflow.
That said, there are rare cases where you might want to preserve catch-all addresses—like when verifying a company’s domain infrastructure. But even then, be cautious. Most use cases don’t justify the risk. The best practice is to build validation rules that reject catch-all domains outright unless strictly required.
For a system that automatically processes large volumes of email data, this filtering step is essential. You can integrate it directly into your verification pipeline using a real-time API like the one from Email List Validation, which flags catch-all domains in the response schema with clear, actionable results.
Learn more about how to clean and prepare high-quality lists at scale: clean your list with bulk verification. Standards like RFC 5321 and industry reports from MxToolbox consistently show that domains with ambiguous or unreliable email routing are among the worst-performing in deliverability metrics.
Use the 'reason' Field to Automate Decision Logic
You can automate your list hygiene and delivery strategy by acting on the reason field in the API response. It tells you exactly why an email failed — like “disposable domain” or “greylisted” — so you don’t treat all bounces the same. Use that detail to block, delay, or flag emails instead of discarding them blindly.
Map Verdicts to Workflow Actions
- Use
reason: "disposable domain"to automatically exclude emails from marketing campaigns. Domains like10minutemail.comare used for temporary signups — they don’t convert and harm sender reputation. - When
reason: "greylisted", defer sending for 15–30 minutes. Greylisting delays delivery to prevent spam; most legitimate mail servers retry and succeed. - Spot
reason: "role account"(like[email protected]) and flag them for manual review. These are shared inboxes with high bounce rates and low engagement. Only send to them if the recipient opted in explicitly. - Map
reason: "mailbox full"to a “deferred” state. If the same address fails multiple times with this reason, it’s a strong signal the inbox is inactive. - Always check
reason: "unknown recipient"— it may mean the domain is invalid, or the full email is misspelled. Use this to catch typos in bulk uploads.
Why the Reason Field is Non-Negotiable
Ignoring reason means you’re treating all invalid emails the same. That leads to over-blocking good addresses or under-blocking spam traps. The RFC 6522 defines message handling behaviors based on delivery status codes — you’re aligning with protocol-level logic when you use reason.
Don’t just store the status field. The real power is in the human-readable insight behind it. The best email verification APIs return both — and you should act on the full picture.
To verify this in practice, see how real-time API calls deliver precise, actionable response data — including reasons — for every email, so you can build intelligent workflows without guesswork.
How to Parse and Interpret the Risk Score Correctly
You should treat a risk score not as a binary gate but as a directional signal within a broader dataset. A score from 0 to 100 (or 0 to 1) indicates likelihood of invalidity or deliverability issues, but thresholds like "above 50 is risky" are misleading—risk profiles vary by industry and domain type. Always interpret the score in context with metadata like domain age, email pattern, or engagement history. Store the raw score and its reason separately so you can re-evaluate later.
Don’t Rely on One Number Alone
Let’s be clear: no single number—especially a risk score—is a true predictor of deliverability on its own. A score of 75 might mean high risk for a B2C lead list but be normal for a list of service accounts. Different domains carry different inherent risk—older domains with established records behave differently than disposable or role-based addresses. Treating all scores the same across all use cases is how campaigns fail.
For example, a score of 80 on a newly registered domain with no prior sending activity is a red flag. But the same score on a long-standing domain used only for transactional receipts might be acceptable. This is why you must never apply a universal threshold. The real signal is how the score behaves in combination with other data points.
Use Risk Scores as Part of a Larger Decision Stack
Think of the risk score as one metric in a dashboard. Pair it with domain age (check via WHOIS), email structure (does it follow company conventions?), and historical engagement data if available. For instance, an email with a high score but a consistent open rate in past campaigns is likely valid, even if the system flagged it as risky.
Store both the score and its explanation—common reasons include “catch-all domain,” “role account,” or “high bounce rate history.” This preserves context for re-evaluation later, especially if a new domain verification rule is introduced or if your sending practices evolve. You can’t re-analyze a flag if you only saved the result.
Standardized email validation tools like those from Email List Validation’s API provide structured feedback with detailed reasoning, making it easier to build robust logic without guessing.
For reference, the Internet Engineering Task Force (IETF) outlines formal email address syntax that systems use to validate basic formats. While not a risk model, it helps ground your parsing in consistent standards.
Ultimately, clarity comes from treating the risk score as a layer—not a rule. Use it to prioritize review, not replace it.
Real-Time Parsing Process: How to Structure Your Code Logic
When integrating with the Email List Validation API, you must parse the JSON response safely and consistently. Start by validating every key expected in the schema—email, status, reason, risk_score—and reject malformed or missing data. Then map each status to an action: valid means proceed, invalid means reject, risky means flag for review. Filter out known problematic types like disposable domains or role accounts. Save the full response with timestamps and metadata for audit and tuning.
Step-by-Step: Code Logic in Action
- Receive the JSON response. The API returns a structured payload after checking an email address. Ensure your code handles HTTP 200 responses and parses the body as JSON—never assume the shape is consistent without validation. This is foundational. A malformed or incomplete payload can cause logic failures downstream.
- Validate the schema against expected keys. Before acting on any data, verify that the response contains the essential keys:
email,status,reason,risk_score, andtimestamp. Use a lightweight schema checker or simple object key verification. This prevents false positives from malformed or third-party tampered data, a common risk when systems integrate with external APIs. - Map verdicts to actions based on status. Use a lookup table or switch statement to assign behavior.
valid→ process.invalid→ reject.risky→ hold for manual review or defer. The RFC 5321 defines SMTP response codes, and while the API abstracts them, the statuses you receive map directly to those underlying behaviors. - Apply filters based on reason. Extract the
reasonfield and apply policy rules. For example, rejectdisposable_domainorrole_accountif your campaign doesn’t target those, and blockcatch_allif you need high deliverability. You can use a simple list of rejected reasons, making this step easy to update and audit. - Store the full response with metadata. Persist the entire response, including timestamp, request ID, and API version, in your database or log system. This allows you to trace back why an email was flagged and debug issues later. Audit trails are essential for compliance and performance tracking.
Why This Matters
Without structured parsing, even an accurate API can feed incorrect decisions into your system. Missing keys or misinterpreted statuses can lead to bad sends or wasted credits. The real-time verification API from Email List Validation gives you predictable responses—you just need to trust the data enough to act on it, and act only after validation. You can test and refine this process with real-time API integration. Use the real-time email verification API to validate your implementation in production-ready conditions.
Why You Shouldn’t Rely on Status Code Alone
HTTP 200 means your request was received and processed—it doesn’t mean the email is valid. A 200 response with a status of "invalid" in the body is normal, expected, and correct. Always check the actual verification status in the response body, not just the HTTP code. Otherwise, you risk treating a failed validation as a success, leading to false positives and wasted sends.
HTTP Status Codes Are Not Validation Results
Let’s be clear: a 200 OK status only confirms your API request was syntactically valid and reached the server. It says nothing about the email address itself. The server can return 200 even if the email is malformed, non-existent, or flagged for abuse. Relying on 200 as a proxy for email validity is a fundamental mistake that leads to poor deliverability and sender reputation issues.
Your application must parse the JSON response body every time. A successful request with a status field reporting “invalid” or “risky” is still a failure from your deliverability standpoint. Ignoring the body and trusting only the status code is like checking if a door is open by seeing if the handle moves—it won’t tell you if someone is on the other side.
What to Check in the Response Body
Always look for the status field—usually nested under a key like `result` or `status`. This field will explicitly say whether the email is valid, invalid, catch-all, temporary, or risky. Some services, like the Email List Validation API, return additional clues: `role`, `disposable`, `mx_check`, or `dns_check`, all useful for filtering and cleaning.
For example, an email like `[email protected]` might pass MX lookup but still be a role account—risky for long-term engagement. A status of “invalid” with a reason like “domain not found” or “rejected by server” gives you a clear signal to remove it from your list. This level of signal granularity is why real-time email verification matters.
Think of this like validating input in any system: a 200 response doesn’t validate the data—only the request. The real work happens in the body. For teams managing large lists, this distinction prevents thousands of bounces and inbox placements in spam folders. See how it works at scale with real-time verification: verify emails instantly with our API.
Integrate with Tools Like Mailchimp and HubSpot Using Verified Data
Send only validated emails to Mailchimp, HubSpot, and other marketing platforms—map 'valid' to active leads, 'risky' to a pending status, and 'invalid' to suppression to maintain list hygiene. Use the reason field to tag records like role accounts or disposable domains in your CRM, so you avoid sending to high-risk addresses and uphold sender reputation. This stops bounce rates from climbing and keeps your deliverability healthy.
Map Statuses to Actions Automatically
When you integrate verified data, you’re not just cleaning a list—you’re building a self-correcting system. Valid emails go straight into your active campaign list. Invalid ones, such as malformed addresses or non-existent domains, are suppressed immediately. Addresses flagged as risky—like short domains, role-based emails, or disposable inboxes—are held in a pending queue for review or further validation.
This approach aligns with industry standards for maintaining list quality. According to the Messaging, Malware, and Mobile Anti-Abuse Working Group (M3AAWG), consistent suppression of invalid addresses is a core best practice in email deliverability. It reduces the risk of being flagged by ISPs for sending to non-existent users.
Use the Reason Field for Deeper Context
Many tools return just a status—valid, invalid, or unknown—but a full JSON response includes a reason field that tells you why. Use that field to set custom CRM fields. For example, you can mark IsRoleAccount: true for addresses like admin@ or sales@, or IsDisposable: true for temporary inboxes.
That level of detail allows you to segment campaigns intelligently. You can exclude role accounts from cold outreach or delay engagement with temporary addresses. It also helps you audit your data sources—spotting patterns where a certain domain consistently delivers invalid or risky emails.
With Email List Validation, you get this level of granularity in real time or at scale. If you're cleaning a large list before sending, use the bulk email list cleaning tool to process thousands of addresses at once. The output gives you not just clean data, but actionable insights to improve your workflows.
Whether you're syncing with HubSpot’s CRM or feeding verified emails into Mailchimp’s audience, this method ensures your integrations stay trustworthy—and your deliverability stays strong.
Avoid Common Pitfalls in JSON Schema Handling
You can’t assume every email verification API returns the same fields—some may return is_valid, others valid, and some use status or result. Hardcoding field names without schema validation breaks when providers update their APIs. Always check for the presence and type of expected keys, and never ignore the reason field—it’s your best clue for debugging. Treat catch-all and risky statuses as invalid unless explicitly approved. If you're not parsing the schema correctly, you’re risking bounces, deliverability issues, and damage to sender reputation.
Stick to Generic Field Names, Not Hardcoded Assumptions
- Don’t assume every API returns
is_valid. Some returnvalid,status, orresult. Always use dynamic key checks. - Never code against specific fields like
risk_scoreunless you’ve validated their presence first. Providers vary—some include it, others don’t. - Use schema validation tools or minimal checks (like
Object.keys(response).includes('is_valid')) before accessing nested data. - Refer to RFC 822 for base email format standards, and RFC 5321 for SMTP delivery processes—these define the boundaries of what’s technically valid, regardless of API specifics.
Never Skip the 'reason' Field—It’s Your Root-Cause Key
- Always parse the
reasonfield, even if you only care about validity. It tells you why an email failed—temporary outage, syntax issue, banned domain, or role account. - Ignoring reasons means you can’t act on data. A spam trap? A typo in the domain? You won’t know unless you parse the reason.
- Let’s say an email passes
is_validbut hasreason: "role_account". That’s not a real person—don't use it in a campaign. - Some providers return structured error codes (e.g.,
error_code: "invalid_domain"). Use those for filtering, but never assume they exist or are consistent across providers.
When you skip the reason field, you're logging blind. You're not improving your list—you're just moving bad data further down the funnel.You’re not just parsing JSON—you’re interpreting the behavior of an entire email delivery system. Use a trusted verification API that gives you clear, consistent structure. If you're building a bulk verification pipeline, ensure it handles schema drift. Test responses from real providers like Spamhaus and MxToolbox to simulate real-world variability. For real-time validation with reliable response parsing, see how our API returns structured, predictable data without surprises.
Keep Your Parsing Robust—Even If the API Changes
Unexpected changes in an API’s response structure can break your system silently. Validate incoming JSON against a known schema using tools like JSON Schema or Ajv to catch invalid or malformed responses early.
Monitor for Anomalies
Track response patterns over time. Sudden null values, missing fields, or new keys not in your schema should trigger alerts. These signals often precede or indicate breaking changes.
Log and Audit Carefully
Store full raw responses—especially for results marked as 'risky' or 'invalid' with no explanatory reason. This data is crucial for diagnosing false positives, API bugs, or evolving domain behaviors.
Version Your Logic
Bind your parsing logic to a specific API version. When the API evolves, you’ll know exactly what changes to expect and can test updates in isolation before deploying.
Keep reading
- List validation API and automation for marketing teams (complete guide)
- Secure Authentication Methods for Email Verification APIs
- How AI-Powered Email Verification Detects Sensitivity Patterns in User Data
- The Challenges of Maintaining In-House Email Validation Database Updates
- Correcting Common Domain Typos Like .net vs .netw in 2026
Ready to put this into practice? Email List Validation verifies emails with 98.9% accuracy — start with 100 free verifications.
Frequently asked questions
What should I do with a 'risky' email verification result?
Treat 'risky' as a red flag. Do not send marketing emails. Flag for review or delay delivery until re-verified.
Can I safely use catch-all domains in my email list?
No. Catch-all domains accept any email, increasing bounce risk and spam trap exposure. Filter them out.
Why is the 'reason' field important in an API response?
It explains why an email was classified as invalid, risky, or catch-all. It enables precise, automated filtering and debugging.
How should I handle disposable domains in my verification pipeline?
Block them entirely unless your use case requires temporary accounts. Use the 'disposable_domain' flag to reject them.
Should I depend on HTTP status codes to validate email results?
No. A 200 OK response only means the request was processed. Always check the 'status' field in the JSON body.
What is the best way to store email verification results long-term?
Store the full response with verdict, reason, risk score, and timestamp. Use this for auditing, testing, and improving list hygiene.
How can I integrate verified email data with Mailchimp or HubSpot?
Map 'valid' emails to active contacts, 'risky' to pending, and 'invalid' to suppressed lists. Use reason metadata for custom fields.
Is a 98.9% accuracy rate enough to trust every verification result?
High accuracy helps, but you must still parse the response correctly. Even 98.9% can be undermined by misreading 'risky' or 'catch-all' results.
What happens if I don’t parse the risk score?
You lose insight into potential deliverability issues. High-risk emails are more likely to bounce or be marked as spam.
How do I know if the API response format has changed?
Monitor for missing fields, unexpected nulls, or new keys. Use schema validation to detect deviations early.