Continuum API

Email verification and continuous monitoring API. Verify emails in real time, process bulk lists, monitor mailbox health, and receive signed webhooks when status changes.

Base URL: https://api.continuumapi.com

Dashboard: app.continuumapi.com

Quickstart

Get your API key from the dashboard, then verify your first email:

curl -X POST https://api.continuumapi.com/v1/verify \
  -H "Authorization: Bearer cnt_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com"}'
{
  "id": "cmofz5wme0001d7bb",
  "email": "user@example.com",
  "domain": "example.com",
  "status": "unknown",
  "subStatus": "smtp_not_checked",
  "checks": {
    "syntaxValid": true,
    "mxFound": true,
    "mxRecords": ["mail.example.com"],
    "isDisposable": false,
    "isRoleAccount": false,
    "smtpChecked": false,
    "smtpReachable": null,
    "isCatchAll": null,
    "greylisted": false
  },
  "score": 55,
  "durationMs": 38,
  "checkedAt": "2026-04-27T10:00:00.000Z"
}

Authentication

All requests require a Bearer token:

Authorization: Bearer cnt_your_key_here

Alternatively use the X-API-Key header. Get your key from your dashboard.

POST /v1/verify

Verify a single email address. Returns a structured verdict with 9 check results and a 0-100 confidence score.

Request

FieldTypeDescription
email requiredstringEmail address to verify. Max 254 characters.

Response

FieldTypeDescription
statusstringvalid · invalid · risky · unknown
subStatusstring|nullReason for non-valid status
scoreintegerConfidence score 0-100
checksobjectIndividual check results
durationMsintegerTotal verification time in ms
checkedAtstringISO 8601 timestamp

Bulk jobs

Upload a CSV and verify up to 100,000 emails asynchronously.

POST /v1/bulk-jobs

curl -X POST https://api.continuumapi.com/v1/bulk-jobs \
  -H "Authorization: Bearer cnt_your_key_here" \
  -F "file=@emails.csv"

GET /v1/bulk-jobs/:id

Poll for job status and progress.

GET /v1/bulk-jobs/:id/results

Paginated per-email results. Supports status and isDuplicate filters.

Monitoring

Register emails for continuous background rechecks. Get webhooks when status changes.

POST /v1/monitoring

FieldTypeDescription
email requiredstringEmail to monitor
intervalHoursinteger1, 6, 12, 24, 48, 72, or 168. Default: 24
tagsstring[]Up to 10 labels for filtering

Webhooks

Receive signed HTTPS payloads when events occur.

Signature verification

const crypto = require('crypto');
function verify(secret, rawBody, header) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(rawBody, 'utf8').digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected), Buffer.from(header));
}
Always verify against the raw request body bytes — never the parsed JSON object.

Status codes

StatusMeaningSafe to send?
validSMTP-confirmed deliverableYes
invalidSyntax error, no MX, or SMTP rejectedNo
riskyDeliverable but high bounce riskWith caution
unknownSMTP unavailable or greylistedHuman review

Sub-statuses

subStatusDescription
syntax_invalidRFC 5321 syntax failure
no_mx_recordsDomain has no MX records
smtp_rejectedServer returned permanent 5xx
smtp_greylistedServer returned 4xx
smtp_not_checkedSMTP disabled or skipped
catch_allServer accepts all addresses
role_accountShared mailbox (info@, admin@, etc.)
disposable_domainKnown throwaway email provider

Webhook events

EventTrigger
verification.completedSingle email verified
bulk_job.completedBulk job finished
email.status_changedMonitored email changed status

Errors

HTTPCodeDescription
400VALIDATION_ERRORInvalid request body
401UNAUTHORIZEDMissing or invalid API key
404NOT_FOUNDResource not found
429RATE_LIMITEDToo many requests

Rate limits

PlanRequests/monthRequests/minute
Free10010
Growth10,000100
Scale100,0001,000