POST /v1/validate/bulk
Validate multiple email addresses (up to 100) in a single API request. This endpoint is synchronous and returns conservative temporary SMTP results immediately. For durable retries after 15 minutes and four additional hours for explicitunknown_temporary
SMTP responses, use Async Validation Jobs.
Each result also contains additive combined-evidence fields. Enterprise-gateway
inference is returned in shadow mode and does not override the canonical result,
the production send_recommendation, or billing.
Endpoint
Headers
Retry-safe requests
Use a uniqueIdempotency-Key for each logical batch. Reusing the key with the
same ordered, canonical email list and benchmark-receipt setting returns the
exact successful JSON response with Idempotency-Replayed: true. The original
response sets the header to false.
Email order is part of the request identity because result order is preserved.
A changed list, changed order, or changed benchmark-receipt setting returns
409 idempotency_key_conflict. A duplicate still in progress returns 409 idempotency_request_in_progress with Retry-After: 2. Only successful
responses are retained; deterministic and transient failures can be retried
with the same key after their cause is resolved.
Request Body
Example Request
Response
Success Response (200 OK)
Response Fields
array
required
Array of validation results, one per input emailEach result has the same fields as the single validation endpoint
object
required
Summary statistics for the bulk validation
object
Present only when
X-GTM-Benchmark-Receipt: email-benchmark-receipt-v6 (or
explicit compatibility v2/v3/v4/v5) was
requested. Contains schema_version, an ES256 compact-JWS token, and the
signed server issued_at timestamp. The token binds aggregate hashes of the
cohort and ordered benchmark projection. Version 6 also binds the requested
fresh-evidence mode. Its projection includes the bounded provider family,
taxonomy version, and decisive reviewed Microsoft SMTP route
provenance when available; it contains no raw email addresses, tenant MX
hosts, internal route IDs, or verdicts. Verify it with the benchmark key published at
https://api.gtmapis.com/.well-known/jwks.json.integer
required
Total number of emails validated
integer
required
Count of
valid results (personal emails)integer
required
Count of
valid_role_based resultsinteger
required
Count of
risky results (catch-all domains)integer
required
Count of
invalid resultsinteger
required
Count of
unknown resultsinteger
required
Count of High-Value Validations: valid personal emails that are not role-based, catch-all, risky, invalid, or unknown.
integer
required
Count of results from catch-all domains. These are not High-Value Validations by default.
integer
required
Credits reserved before uncached validation work starts.
integer
required
Total credits charged for this bulk validation. This is kept as a compatibility alias for consumed credits.Sum of all
credits_charged values in resultsinteger
required
Credits consumed after applying GTMAPIs credit policy. For Email Validation this matches
credits_charged.integer
required
Reserved credits returned because the corresponding results were role-based, catch-all, invalid, risky, unknown, or otherwise non-chargeable.
number | null
required
Effective credits consumed per High-Value Validation. This is
null when the response contains no high-value validations.Limits
Exceeding Limits
Too many emails in one request (> 100):/v1/validate/batch for larger asynchronous jobs.
Processing Time
Processing time varies with cache state, DNS responsiveness, and SMTP server behavior. Use/v1/validate/bulk for synchronous batches up to 100 emails, and use /v1/validate/batch or the signed CSV upload flow for larger jobs that need polling and download handoffs.
Best Practices
Batch Processing
For large lists (1000+ emails), process in batches:Error Handling
An upstream validation failure returns502,
code: "validation_upstream_failed", retry_after: 30, and a matching
Retry-After: 30 header. Wait for that delay before retrying the same logical
request. The failed validation does not consume credits.
Handle errors gracefully:
Filtering Results
Filter by quality for campaign use:Credit Estimate
Estimate the maximum credits before processing:Common Patterns
Deduplicate Before Validation
Save credits by removing duplicates:Progress Tracking
Track progress for large batches:Next Steps
Single Validation
Validate one email at a time
CSV Upload Guide
Upload and validate CSV files via dashboard