---
title: "Estimate email validation"
method: POST
path: "/v3/email-validations/estimate"
tags: ["Email Validations"]
---

# Estimate email validation

`POST /v3/email-validations/estimate`

<small>_Requires the `contacts:read` scope (or a broader one that includes it)._</small>

Synchronous probe — given a list of contact IDs, returns counts, credit sufficiency, and any blockers that would prevent scheduling. Useful for showing pre-flight feedback in the UI before triggering `/schedule`.

## Request body

- object — Request body shared by both `/estimate` and `/schedule`. Specifies the contacts to validate and an optional partial-credit acceptance flag.
  - `contactIds` integer[], required — Contact IDs to validate. Must be non-empty, contain at most 10000 items, and every value must be a positive integer.
  - `acceptPartial` boolean, nullable — When `true`, the schedule call proceeds with `min(eligibleCount, creditsAvailable)` contacts even if available credits are below the eligible count. When `false` (default), insufficient credits become a `NotEnoughCredits` blocker on `/estimate` and a `400` on `/schedule`.

## Response `200`

Estimate computed successfully

- object — Synchronous probe result returned by `/v3/email-validations/estimate`. Reports counts, credit sufficiency, and a list of blockers that prevent scheduling.
  - `requestedCount` integer — Total number of contact IDs in the request body
  - `eligibleCount` integer — Number of contacts the user can actually validate (filtered by team scope and validation-status)
  - `creditsAvailable` integer — Email-validation credits currently available to the team
  - `creditsRequired` integer — Credits that would be charged if the eligible contacts are scheduled in full
  - `creditsSufficient` boolean — Whether `creditsAvailable >= creditsRequired`
  - `canSchedule` boolean — Whether the request can be scheduled — equivalent to `blockers.length == 0`
  - `blockers` integer[] — Reasons why scheduling is currently blocked. Empty when `canSchedule` is `true`.

## Other responses

- `400` — Validation failure on the request body, or a service-level rejection (e.g. an empty or oversized contact-id list).
- `401` — Unauthorized. The response body is empty; check the `WWW-Authenticate` header for the expected scheme.
- `429` — Too Many Requests

---

[API](https://skmtc.net/reply/apis/reply-api.md) · [All operations](https://skmtc.net/reply/apis/reply-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/reply/reply-api/revisions/1c3d32eaf95e/schema)
