---
title: "Verify up to 100 email addresses synchronously"
method: POST
path: "/api/v1/verify/batch"
tags: ["Verification"]
---

# Verify up to 100 email addresses synchronously

`POST /api/v1/verify/batch`

## Request

- Base URL: `https://verifly.email`
- URL: `https://verifly.email/api/v1/verify/batch`
- Auth: HTTP bearer

Verify a batch of up to 100 emails synchronously. Invalid-format emails are NOT rejected for the whole request; they are placed in the skipped[] array (with skipped_count) alongside duplicates and any filtered addresses. Honors options.deduplicate (default true). Only successfully verified addresses appear in results[] and are charged.

## Request body

- EmailBatchRequest
  - `emails` string[], required
  - `options` object
    - `deduplicate` boolean
    - `exclude_public_domains` boolean
    - `exclude_role_accounts` boolean
    - `domain_blacklist` string[]
    - `pattern_blacklist` string[]

## Response `200`

Batch results, skipped list, counts, and credit balance.

- BatchVerificationResult
  - `success` boolean, required
  - `total` integer, required
  - `verified_count` integer, required
  - `skipped_count` integer, required
  - `valid_count` integer
  - `invalid_count` integer
  - `results` BatchResultItem[], required
    - `email` string, email, required
    - `is_valid` boolean, nullable
    - `result` 'deliverable' | 'undeliverable' | 'risky' | 'unknown', required
    - `recommendation` 'safe_to_send' | 'risky' | 'do_not_send', required
    - `reason` string
  - `skipped` SkippedEmail[], required: Emails not verified: invalid format, duplicates, or filtered by options.
    - `email` string, required
    - `reason` string, required: e.g. invalid_format, duplicate, public_domain, role_account, disposable, blacklisted_domain, matched_pattern:<value>.
  - `credits` Credits, required
    - `used` integer, required: Credits charged by this request.
    - `remaining` integer, required

## Other responses

- `400`: Invalid request or invalid input.
- `401`: Missing or invalid API key.
- `402`: Not enough Verifly credits to complete the request.
- `429`: Too many requests. Includes Retry-After (seconds) and the X-RateLimit-* headers.
- `500`: Internal server error. Credits are refunded on failed verification exceptions where possible.

---

[API](https://skmtc.dev/verifly/apis/verifly-email-verification-api.md) · [All operations](https://skmtc.dev/verifly/apis/verifly-email-verification-api/llms.txt) · [OpenAPI document](https://skmtc.dev/verifly/apis/verifly-email-verification-api/revisions/9b2787c04363?raw)
