Unif API Docs

Check up to 1,000 emails for free providers

Classify up to 1,000 email addresses in one call, in input order, plus verdict counts. Each address gets the same checks as `GET /email/check`: exact match against 4,768 free email provider domains (the list HubSpot forms block with "Block free email providers", snapshot 2026-10-10), role-mailbox detection, and a syntax check. Use it to split a lead list or CRM export into business and personal addresses. Costs 0 credits.

Pricing — Free

This endpoint returns billing metadata with zero credits charged.

POST
/email/check/batch

Authorization

bearerAuth
AuthorizationBearer <token>

UnifAPI API key. Provider credentials are managed by UnifAPI.

In: header

Header Parameters

Unifapi-Version?"2026-07-01"

Pin the API version an integration was built against (date-based, e.g. 2026-07-01). Omit to use the current version. Public URL paths stay stable and unversioned; breaking changes ship under a new dated version and are announced with Deprecation and Sunset response headers. The served version is echoed in every response's Unifapi-Version header. Policy: https://unifapi.com/versioning.md

Default"2026-07-01"

Value in

  • "2026-07-01"
Idempotency-Key?string

Client-supplied unique key that makes a write request safe to retry. If a request with the same key was already processed, the original response is replayed (with Idempotency-Replayed: true) instead of executing — and billing — again. Send a fresh UUID per logical operation. Best-effort with a 24h window.

Lengthlength <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/email/check/batch" \  -H "Content-Type: application/json" \  -d '{    "emails": [      "string"    ]  }'
{  "request_id": "string",  "data": {    "results": [      {        "input": "string",        "email": "string",        "local_part": "string",        "domain": "string",        "is_valid_syntax": true,        "is_free_provider": true,        "is_role_account": true,        "verdict": "business",        "invalid_reason": "empty"      }    ],    "summary": {      "total": 0,      "business": 0,      "free": 0,      "invalid": 0,      "role_accounts": 0    }  },  "billing": {    "credits_charged": 0,    "records_charged": 0,    "balance_remaining": 0,    "truncated_due_to_balance": true  }}