Verification API

Verify email addresses using SMTP checks and optional API fallback.

The Verification API allows you to validate email addresses in your lead lists. Choose between fast free SMTP verification or hybrid verification with paid API fallback for higher accuracy.

Verification Methods

MethodDescriptionCost
smtp_onlyDirect SMTP verification (~85% accuracy)Free
smtp_api_fallbackSMTP first, then choose to fill gaps with APIFree + Optional
api_onlyMillionVerifier API for all emails (~99% accuracy)$0.0005/email
POST/api/verification/jobsSession

Create a new email verification job

Parameters

listIdstringrequiredID of the list containing leads to verify
verificationMethodstringrequiredOne of: smtp_only, smtp_api_fallback, api_only

Request

{
  "listId": "list_abc123",
  "verificationMethod": "smtp_api_fallback"
}

Response

{
  "id": "job_xyz789",
  "listId": "list_abc123",
  "listName": "Q1 Prospects",
  "verificationStage": "smtp_verifying",
  "verificationMethod": "smtp_api_fallback",
  "totalEmails": 150,
  "processedEmails": 0,
  "smtpValidCount": 0,
  "smtpInvalidCount": 0,
  "smtpCatchAllCount": 0,
  "smtpUnknownCount": 0,
  "coveragePercentage": 0,
  "createdAt": "2024-01-15T10:30:00Z",
  "updatedAt": "2024-01-15T10:30:00Z"
}
GET/api/verification/jobs/:jobIdSession

Get verification job details

Parameters

jobIdstringrequiredThe verification job ID (URL parameter)

Response

{
  "id": "job_xyz789",
  "listId": "list_abc123",
  "listName": "Q1 Prospects",
  "verificationStage": "awaiting_decision",
  "verificationMethod": "smtp_api_fallback",
  "totalEmails": 150,
  "processedEmails": 150,
  "smtpValidCount": 98,
  "smtpInvalidCount": 12,
  "smtpCatchAllCount": 25,
  "smtpUnknownCount": 15,
  "smtpCompletedAt": "2024-01-15T10:35:00Z",
  "coveragePercentage": 73.3,
  "createdAt": "2024-01-15T10:30:00Z",
  "updatedAt": "2024-01-15T10:35:00Z"
}
GET/api/verification/jobs/:jobId/progressSession

Get detailed verification progress with domain statistics

Parameters

jobIdstringrequiredThe verification job ID (URL parameter)

Response

{
  "job": {
    "id": "job_xyz789",
    "verificationStage": "smtp_verifying",
    "processedEmails": 75,
    "totalEmails": 150,
    "coveragePercentage": 50.0
  },
  "domainStats": [
    {
      "domain": "acme.com",
      "totalEmails": 12,
      "validCount": 8,
      "invalidCount": 2,
      "catchAllCount": 2,
      "unknownCount": 0,
      "isCatchAll": null
    }
  ]
}
GET/api/verification/jobs/:jobId/estimateSession

Get cost estimate for filling verification gaps with API

Parameters

jobIdstringrequiredThe verification job ID (URL parameter)

Response

{
  "jobId": "job_xyz789",
  "unknownCount": 15,
  "catchAllCount": 25,
  "totalGapCount": 40,
  "costPerEmail": 0.0005,
  "fillUnknownsCost": 0.01,
  "fillCatchAllCost": 0.01,
  "fillAllGapsCost": 0.02,
  "currentCoveragePercentage": 73.3,
  "projectedCoveragePercentage": 100.0
}
POST/api/verification/jobs/:jobId/decisionSession

Submit user decision for handling verification gaps

Parameters

jobIdstringrequiredThe verification job ID (URL parameter)
decisionstringrequiredOne of: accept_current, fill_unknowns_only, fill_catchall_only, fill_all_gaps

Request

{
  "decision": "fill_unknowns_only"
}

Response

{
  "id": "job_xyz789",
  "verificationStage": "api_verifying",
  "userDecision": "fill_unknowns_only",
  "decisionMadeAt": "2024-01-15T10:40:00Z"
}

Verification Stages

StageDescription
pendingJob created, waiting to start
smtp_verifyingSMTP verification in progress
awaiting_decisionSMTP complete, waiting for user decision on gaps
api_verifyingAPI verification in progress for gaps
completedAll verification complete

User Decision Options

DecisionDescription
accept_currentKeep SMTP results as-is (free)
fill_unknowns_onlyUse API for emails SMTP couldn't verify
fill_catchall_onlyUse API for catch-all domain emails
fill_all_gapsUse API for all unknowns and catch-alls

Verification Result Types

  • Valid - Email is deliverable and exists
  • Invalid - Email will bounce (mailbox doesn't exist)
  • Catch-All - Domain accepts all emails (can't confirm mailbox)
  • Unknown - Verification couldn't be completed (timeout, blocked, etc.)