POST /v1/verify
Run a single email verification. Returns a score, recommendation, and signal breakdown.
Request
POST /v1/verify
Requires Authorization: Bearer vch_... header. Each non-cached call deducts 1 credit.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| string | Yes | Email address to verify. | |
| name | string | No | Full name of the person. Improves person-match signals. |
| company_name | string | No | Company name. Enables domain age and company signals. |
| ip_address | string | No | Source IP (v4 or v6). Enables VPN/Tor/geo signals. |
Response
Returns 200 OK with the verification result:
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique ID for this check (e.g. req_8f3a0c921b...). |
| score | integer (0-100) | Trust score. Higher is better. |
| recommendation | string | One of approve, review, or block. |
| object | Email signal breakdown. | |
| company | object | Company/domain signals. |
| person | object | Person-match signals. |
| ip | object | IP reputation signals. |
| flags | string[] | Risk flags (if any). |
| reasoning | string | Human-readable explanation of the score. |
| cached | boolean | Whether this was served from cache. |
| processed_in_ms | integer | Processing time in milliseconds. |
Signal objects
email — valid (bool), disposable (bool), free_provider (bool), role_based (bool), mx_record (bool).
company — domain (string), domain_alive (bool), domain_age_days (int), has_website (bool), industry_guess (string), size_estimate (string).
person — name_matches_email (bool), likely_at_company (bool), confidence (float 0-1).
ip — country (string), is_vpn (bool), is_tor (bool), risk_score (int 0-100).
Example
Request
curl -X POST https://api.vouchley.getrevlio.com/v1/verify \
-H "Authorization: Bearer $VOUCHLEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "john.doe@acme.com",
"name": "John Doe",
"company_name": "Acme Inc.",
"ip_address": "203.0.113.42"
}'