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.

Quick testPOST /v1/verify
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.

JSON Response200 OK
{
  "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:

StatusMeaningRecommended action
deliverableThe destination mail server accepted the recipient socket. Mailbox is fully active.Safe to send. Include in primary outreach campaigns.
undeliverableThe 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.
unknownInconclusive 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.

POST /v1/verify1 credit

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 docs
POST /v1/verify-batchUp to 50k emails

Bulk 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.

View batch docs
GET /v1/jobs/:jobId/resultsPaginated

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.

View polling docs
POST /v1/catchall1 credit per address

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 docs

Flags 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.

FlagField pathDescription and usage
Disposabledetails.attributes.disposableIdentifies temporary throwaway inboxes. Block immediately to stop trial fraud.
Role Accountdetails.attributes.role_accountDetects generic departmental mailboxes (info@, billing@, support@). Route to CRM teams.
Free Emaildetails.attributes.free_emailFlags consumer webmail domains (gmail.com, yahoo.com) to separate personal inboxes from corporate prospects.
Catch-Alldetails.attributes.catch_allFlags whether the host accepts all mail. Use with catch_all_verdict to recover valid leads.
Plus Tagdetails.attributes.has_plus_tagDetects addresses using alias sub-addressing (user+tag@). Prevent multi-account manipulation.
Mailbox Fulldetails.attributes.mailbox_fullIndicates the storage quota has been exceeded. Mail sent here will soft-bounce.
No-Replydetails.attributes.no_replyFlags unmonitored broadcast addresses. Avoid sending conversational outreach here.
Blacklist Checkdetails.blacklist.is_blacklistedEvaluates 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.

Single verification: Node.js (fetch)server-side only
// 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);
}
Single verification: Python (requests)server-side only
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.

Volume
3,000Credits
Rate$0.0017 / credit
Save
-
Price
$5.00one-time
Volume
10,000Credits
Rate$0.0010 / credit
Save
Save 41%
Price
$9.90one-time
Volume
30,000Credits
Rate$0.0009 / credit
Save
Save 44%
Price
$28.00one-time
Volume
50,000Credits
Rate$0.0008 / credit
Save
Save 53%
Price
$39.00one-time
Volume
100,000CreditsPopular
Rate$0.0008 / credit
Save
Save 54%
Price
$76.00one-time
Volume
300,000Credits
Rate$0.0007 / credit
Save
Save 56%
Price
$222.00one-time
Volume
500,000Credits
Rate$0.0007 / credit
Save
Save 57%
Price
$360.00one-time
Volume
800,000Credits
Rate$0.0007 / credit
Save
Save 58%
Price
$559.00one-time
Volume
1,000,000Credits
Rate$0.0007 / credit
Save
Save 59%
Price
$680.00one-time

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

G2

"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

SourceForge

"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

Product Hunt

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.

Free trial Credits never expire Refunds on Unknown