Verify a single email
From the Verify API reference. Requests use the base URL https://app.warmerly.com/api/v1 and an API key, see Authentication.
POST /verifyRuns (or reuses a cached) verification for one address. Cached results are returned instantly and are not billable; a fresh check consumes one verification from your plan's quota.
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Yes | The address to verify, 3 to 320 characters. |
force | boolean | No | Skip the cache and run a fresh SMTP probe even if a cached result exists. A result confirmed from real mail (for example a bounce or a reply) is never re-probed, so it is still served from cache. |
curl https://app.warmerly.com/api/v1/verify \
-X POST \
-H "X-Api-Key: wmv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "email": "jane@example.com" }'{
"result": {
"email": "jane@example.com",
"status": "valid",
"confidence": 95,
"reason": "mailbox_accepts",
"checks": {
"syntax": true,
"mx": ["aspmx.l.google.com"],
"smtpConnectable": true,
"smtpAccepted": true,
"catchAll": false,
"disposable": false,
"roleBased": false,
"freeProvider": false,
"provider": "google",
"didYouMean": null,
"smtpCode": 250,
"smtpMessage": "2.1.5 OK"
},
"durationMs": 812,
"checkedAt": "2026-07-02T10:14:03.000Z",
"cached": false,
"retryable": false
},
"checkId": "b2b7c9a0-1e3f-4a2b-9c1d-4e8f0a2b3c4d"
}Every call (cached or not) is saved to your history as checkId. Errors: 400 bad_request (invalid_body) for an invalid body, 403 channel_not_included if your plan does not include email features, and 402 payment_required if you're out of verification quota. The 402 message is plan_limit_reached (or free_trial_limit_reached when you have no active plan), and details holds used, limit and label.
{ "error": { "code": "payment_required", "message": "plan_limit_reached", "details": { "used": 5000, "limit": 5000, "label": "email verifications" } } }