Email verification API that also resolves catch-all addresses
Check any address over SMTP with one REST call. On catch-all domains, where most APIs stop at "accept-all" or "risky", you get a valid or invalid answer in the same response. Our email verification API gives engineering teams clean JSON data to protect sender reputation across outreach pipelines.
curl -X POST https://api.giggal.ai/v1/verify \
-H "Authorization: Bearer tp_live_xxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"email":"alex.smith@example.com"}'1,000 free credits, no card needed. Credits never expire.
What one API call returns
A single call returns full deliverability data. You receive the top-level deliverability status, risk evaluation, numerical deliverability score, mailbox attributes, and in-line catch-all results.
{
"success": true,
"data": {
"email": "alex.smith@example.com",
"is_valid": true,
"status": "deliverable",
"risk_level": "low",
"deliverability_score": 92,
"catch_all_score": 89,
"catch_all_verdict": "valid",
"details": {
"general": {
"domain": "example.com",
"reason": "Mailbox confirmed deliverable",
"validation_method": "smtp"
},
"attributes": {
"free_email": false,
"role_account": false,
"disposable": false,
"catch_all": true,
"has_plus_tag": false,
"mailbox_full": false,
"no_reply": false
},
"mail_server": {
"smtp_provider": "google",
"mx_record": "aspmx.l.google.com"
}
}
},
"meta": {
"creditsUsed": 1
}
}How to handle response status values
The primary delivery status is returned in the status field. Here is how your backend application should interpret and route each enum value:
| Status | Meaning | Recommended action |
|---|---|---|
| deliverable | The destination mail server accepted the recipient socket. Mailbox is fully active. | Safe to send. Include in primary outreach campaigns. |
| undeliverable | The mailbox does not exist, syntax is invalid, domain has no MX records, or domain is disposable. | Do not send. Remove from campaigns to avoid hard bounces. |
| unknown | Inconclusive server response, typically due to greylisting or connection timeout. | Retry check later. Credits used for unknown answers are refunded automatically. |
Catch-all addresses resolved in the same call
Standard SMTP checks fail on catch-all domains. When a company mail server accepts every incoming address, standard tools see a positive response for real mailboxes and fake typos alike. Unable to verify further, most tools tag the address "risky" or "accept-all" and leave the decision to you.
Around 30% of a typical B2B list sits on catch-all domains or domains behind secure email gateways (SEGs) like Proofpoint and Mimecast. Deleting them discards real buyers; sending unverified causes bounce spikes.
Our verification engine performs in-line deep catch-all resolution. It runs a deep mailbox existence check to return a catch_all_verdict ("valid" or "invalid") and a catch_all_score from 0 to 100. Learn more in our dedicated guides on catch-all verification and checking mailboxes behind secure email gateways.
Traditional verification API
Gives up on accept-all domains
{
"email": "sarah.connor@cyberdyne.com",
"status": "risky",
"reason": "accept_all_domain",
"is_deliverable": null,
"action": "manual_review_required"
}Uncertainty passed to your team. Send and risk high bounces, or discard valid prospective buyers.
Giggal.ai API
Resolves catch-alls in-line
{
"email": "sarah.connor@cyberdyne.com",
"status": "deliverable",
"is_valid": true,
"catch_all_verdict": "valid",
"catch_all_score": 94,
"details": { "catch_all": true }
}Confirmed active mailbox. Confidently keep your real catch-all leads and protect sender reputation.
Endpoints for single, bulk and catch-all checks
Whether checking a single contact or verifying large lists, our email verify api provides purpose-built endpoints designed for performance and reliability.
Single email verification
Synchronous verification for a single email address. Runs complete SMTP validation, domain diagnostics, and deep catch-all resolution in-line. Returns a complete JSON result.
View endpoint docsBulk email verification
Asynchronous processing for up to 50,000 addresses per job. Strips duplicates and invalid syntax server-side. Supports the Idempotency-Key header to prevent double-charges.
Job polling and results
Poll job progress with GET /v1/jobs/:jobId every 10 to 15 seconds. Retrieve paginated results up to 500 records per page. Results are stored safely for 48 hours.
Bulk catch-all resolution
Run deep catch-all resolution across addresses flagged as catch-all from a completed bulk job. Download results as a clean CSV with score and status columns.
View catch-all docsFlags in every response
Beyond valid or invalid, every response includes detailed mailbox attributes to help you segment leads, prevent abuse, and apply automated filtering rules.
| Flag | Field path | Description and usage |
|---|---|---|
| Disposable | details.attributes.disposable | Identifies temporary throwaway inboxes. Block immediately to stop trial fraud. |
| Role Account | details.attributes.role_account | Detects generic departmental mailboxes (info@, billing@, support@). Route to CRM teams. |
| Free Email | details.attributes.free_email | Flags consumer webmail domains (gmail.com, yahoo.com) to separate personal inboxes from corporate prospects. |
| Catch-All | details.attributes.catch_all | Flags whether the host accepts all mail. Use with catch_all_verdict to recover valid leads. |
| Plus Tag | details.attributes.has_plus_tag | Detects addresses using alias sub-addressing (user+tag@). Prevent multi-account manipulation. |
| Mailbox Full | details.attributes.mailbox_full | Indicates the storage quota has been exceeded. Mail sent here will soft-bounce. |
| No-Reply | details.attributes.no_reply | Flags unmonitored broadcast addresses. Avoid sending conversational outreach here. |
| Blacklist Check | details.blacklist.is_blacklisted | Evaluates domain and server IPs across major DNSBL feeds with reputation scores. |
Where teams use the email verification API
Our endpoints connect directly to data pipelines, CRM workflows, and databases.
CRM and data warehouse sync
Verify contact data continuously before syncing to Salesforce, HubSpot, or Snowflake. Clean stale records on schedule and keep contact data accurate.
Campaign list cleaning
Scrub email lists prior to major outreach blasts. You can also upload lists directly through our email list cleaning interface for quick manual workflows.
Lead enrichment pipelines
Trigger automated SMTP checks whenever inbound SDR or outbound enrichment tools find new corporate emails, so reps only contact verified addresses.
Workflow automation
Connect our verification endpoints directly to Zapier, n8n, Make, and webhook workflows via our integrations hub.
AI agents via MCP
Enable Claude, ChatGPT, Cursor, and custom AI agents to verify contacts natively during conversations using our MCP server.
Signup form validation
Looking to check addresses as users type them on signup and lead capture forms? Explore our dedicated email validation API built for real-time form checks.
Code examples
Server-side snippets for single and bulk checks. Keep your API key in environment variables.
// Node.js (Node 18+)
const res = await fetch('https://api.giggal.ai/v1/verify', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.GIGGAL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ email: 'alex.smith@example.com' }),
});
const data = await res.json();
if (data.success) {
console.log('Status:', data.data.status); // deliverable, undeliverable, unknown
console.log('Catch-all result:', data.data.catch_all_verdict); // valid | invalid
} else {
console.error('Verification error:', data.error);
}import os
import requests
url = "https://api.giggal.ai/v1/verify"
headers = {
"Authorization": f"Bearer {os.environ['GIGGAL_API_KEY']}",
"Content-Type": "application/json"
}
payload = {"email": "alex.smith@example.com"}
response = requests.post(url, json=payload, headers=headers)
result = response.json()
if result.get("success"):
data = result["data"]
print("Status:", data["status"])
print("Catch-All Result:", data.get("catch_all_verdict"))
else:
print("Error:", result.get("error"))Bulk workflow: submit, poll, and fetch results
Submitting a batch job takes one call. Poll every 10 to 15 seconds until the job status reaches completed.
// 1. Submit batch job (up to 50,000 emails)
const submitRes = await fetch('https://api.giggal.ai/v1/verify-batch', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.GIGGAL_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': 'batch-job-2026-10-01-01',
},
body: JSON.stringify({
name: 'Q4 Sales Leads',
emails: ['alex.smith@example.com', 'maria.garcia@example.org'],
}),
});
const { data: job } = await submitRes.json();
const jobId = job.jobId;
// 2. Poll job status until completed
// GET https://api.giggal.ai/v1/jobs/${jobId}
// 3. Fetch paginated verification results
const resultsRes = await fetch(`https://api.giggal.ai/v1/jobs/${jobId}/results?page=1&limit=500`, {
headers: { 'Authorization': `Bearer ${process.env.GIGGAL_API_KEY}` },
});
const results = await resultsRes.json();Email verification API pricing
Simple pay-as-you-go pricing with no monthly lock-in. One credit verifies one address. On single API checks, catch-all resolution is included in the same 1 credit. For bulk batch jobs, standard verification runs at 1 credit per address, and running deep verification on catch-all rows costs 1 credit per catch-all address checked. Credits never expire, and unknown results are refunded automatically.
Need higher enterprise volume? See our full pricing tiers.
Rate limits and errors
Standard rate limits apply per API key. Rate limit status is returned on all requests via standard headers:X-RateLimit-Limit andX-RateLimit-Remaining.
Rate limits per 15-minute window
- Single checks (/v1/verify)300 requests / 15 min
- Batch job creation30 requests / 15 min
- Catch-all job creation30 requests / 15 min
- Job polling & results600 requests / 15 min
HTTP status error codes
- 400 Bad Request: Invalid syntax or malformed JSON body.
- 401 Unauthorized: Missing, expired, or invalid API key.
- 402 Payment Required: Insufficient account credit balance.
- 404 Not Found: Requested job ID does not exist.
- 409 Conflict: Idempotency key payload collision.
- 410 Gone: Batch job results expired after 48 hours.
- 429 Too Many Requests: Rate limit threshold exceeded.
Detailed error response envelopes and payload descriptions are available in the API errors documentation.
What customers say
Real feedback from engineering, sales and growth teams using Giggal.ai.
"Before Giggal, our team spent hours manually reviewing catch-all addresses because other tools couldn't verify them with confidence. Now we upload large email lists, verify them in minutes, and move directly into campaign preparation."
Vernon L.
Verified G2 Reviewer
"Fast and accurate email verification, excellent catch-all detection, easy-to-use interface, quick processing for large lists, lower bounce rates, improved sender reputation, and more confidence before launching email campaigns."
Billy W.
SourceForge Reviewer
"Giggal Email Verifier makes email validation fast, simple, and reliable. It helps us clean our lists, reduce bounce rates, and improve the overall performance of our outreach campaigns. The accuracy of the verification results makes it a valuable tool."
Hazel Peterson
Product Hunt Reviewer
Email verification API FAQ
Common technical questions about authentication, SMTP checks, and catch-all handling.
Yes. Every new account receives 1,000 free credits immediately upon registration, with no credit card required. You can generate an API key in your developer dashboard and start sending verification requests right away. The free credits never expire and grant full access to every endpoint, including live SMTP verification and deep catch-all resolution.
The API initiates a direct SMTP handshake with the recipient mail server. It performs DNS and MX lookups, connects to the destination mail server, and simulates sending a message up to the RCPT TO command. The remote mail server responds indicating whether the mailbox exists. The connection is terminated cleanly before any message headers or body are transmitted, so your recipient never receives an email.
On catch-all domains, a standard mail server reports that every address is acceptable, which causes ordinary tools to return "risky" or "unknown". Giggal runs a deep mailbox existence check and returns a valid or invalid result with a catch_all_score from 0 to 100, saving you from discarding real leads.
An "unknown" status occurs when the destination mail server fails to provide an unambiguous answer within our timeout threshold, typically due to aggressive greylisting or temporary server outages. You are never billed for inconclusive answers: credits used for any verification that returns an unknown status are refunded back to your account balance automatically.
Single verification requests check one email synchronously per call with a direct JSON response. For list verification, our bulk API endpoint accepts up to 50,000 email addresses per batch job asynchronously. You can track progress through job polling and retrieve paginated results when processing completes.
Yes. Giggal.ai hosts an official remote MCP (Model Context Protocol) server at https://mcp.giggal.ai/mcp. Claude and ChatGPT connect to the hosted server via OAuth with no API key required. For local developer workflows in Cursor, VS Code, and other clients, you can configure the local giggal-mcp server with your API key to verify addresses directly from your editor.
An email verification API evaluates whether an actual mailbox exists by communicating with mail servers over SMTP, checking DNS records, and resolving catch-all addresses across sales lists and customer databases. An email validation API focuses primarily on real-time front-end checks at signup forms to verify syntax, identify disposable domains, and block fake accounts on submission. If you need form protection, explore our email validation API.
Look for three critical factors: genuine catch-all resolution so you do not lose up to 30% of your B2B contacts to "risky" buckets, transparent billing policies that automatically refund unknown results, and clear pricing per verification with zero hidden recurring fees or monthly minimums.
Start verifying emails in minutes
1,000 free credits, no card needed. Credits never expire.
