Start free

Build email verification into your application

Ten pages covering the REST API, seven official SDKs, webhook delivery and a credit-free sandbox. Everything here assumes you are putting verification inside code you own rather than running checks by hand.

Verification becomes a developer problem the moment it has to happen with nobody watching: at signup, inside a queue worker, or on a scheduled cleanup job. The service exposes a JSON REST API over HTTPS at https://emailvalidationtool.org/v1, authenticated with a bearer token you generate in your dashboard and send in the Authorization header. Two request shapes cover almost every integration: a single-address check that answers in the same response, and a bulk submission that either answers inline for very small lists or hands you a job id to follow. The API documentation carries the exact request bodies, response fields and status codes for both, and it is the page to keep open while you write the first integration.

The first design decision is whether your call path can afford to wait. Checking an address at signup or on form submit is a synchronous problem: you send one address, you block on the answer, and you decide whether to accept the registration, which is what real-time verification is for and where timeout behaviour matters most. Cleaning an existing list is the opposite shape: you hand over thousands of addresses, the work is queued, and you collect results later by polling the bulk status endpoint or by letting a webhook tell you the batch finished. Getting that split right early saves a rewrite, because the two paths want different failure handling: a synchronous check should generally fail open rather than block a real signup, while a queued job can safely be retried.

All seven official SDKs wrap the same endpoints, so the choice between them is about ergonomics and object lifecycle rather than capability. The Node.js SDK ships TypeScript definitions for both CommonJS and ESM, the Python SDK offers a synchronous client alongside an asyncio client for high-concurrency services, and the Go SDK is standard-library only and takes a context.Context on every call. Where a framework already has an idiomatic place to hang validation, the client uses it: the PHP SDK registers a Laravel service provider and a validation rule, the Ruby SDK adds a Rails validator and ActiveJob support, the Java SDK auto-configures a Spring Boot bean, and the C# SDK provides dependency-injection extensions and an ASP.NET Core validation attribute. Client lifecycle is the detail worth checking per language before you scale: the Java client is documented as fully thread-safe with connection pooling, the Go client as safe for concurrent use across goroutines, the Node.js and PHP clients as poolable and reusable in long-running processes, and the C# package uses IHttpClientFactory to keep HttpClient lifecycles from exhausting sockets. As a general rule, build the client once and share it, and only construct one per request where you have measured that it costs you nothing.

Before any of that reaches production, wire it against the sandbox. Sandbox mode is a request header, or a configuration flag in every SDK, that consumes no credits and opens no real SMTP connections, and it returns deterministic results driven by the local part of the address, so addresses beginning valid, invalid, risky or disposable give your test suite something stable to assert against in CI. Treat API keys like any other secret: they are displayed once, they support IP and domain restrictions, and they belong in an environment variable or a secrets manager rather than in your source tree. If you want the commercial picture before writing code, the API product overview and the pricing page cover plans and included volume, while the bulk email verifier and the free verifier exist for the times a colleague needs an answer without an integration at all.

Start Here: Reference and Sandbox

The complete REST reference covering authentication, single and bulk verification, job status, result downloads and error codes, alongside the sandbox that lets you exercise all of it without spending credits. Read the first, build against the second.

Official SDKs by Language

Seven maintained clients over the same API. Each page covers installation, a first verification, batch handling, error and retry behaviour, and the integration that language's dominant framework expects, so you can pick the one matching your runtime and go straight to its code examples.

Integration Mechanics: Webhooks

Once you are submitting batches, polling becomes the weak link in the integration. This guide covers subscribing an HTTPS endpoint to verification events, verifying the HMAC-SHA256 signature on every delivery, acknowledging quickly enough, and what happens to events while your endpoint is down.

Generate a key, point it at the sandbox, and get a working verification call running before you commit to any design, using the API reference for the exact request and response of every endpoint.

Read the API Docs

Developer FAQ

You can call it directly. Every endpoint is JSON over HTTPS with a bearer token in the Authorization header, so curl or any HTTP client in your language is enough, and the API documentation shows the raw requests and responses. The SDKs exist for the parts a hand-rolled client usually skips, such as retry and error handling, plus the framework hooks: the Laravel validation rule, the Rails validator, the Spring Boot bean and the ASP.NET Core attribute. If verification is one call in one place, the raw API is fine; if it will appear in model validation and background jobs, take the SDK.

Use sandbox mode, which is available on every plan including the free tier and needs no separate key. Add the sandbox header to a request, or set the sandbox flag in your SDK configuration, and results are simulated rather than probed, so nothing is deducted and no real SMTP connection is made. Results are deterministic by prefix, so an address starting with valid comes back deliverable and one starting with invalid comes back undeliverable, which is what makes assertions in CI stable. The same endpoints work in sandbox mode, including batches and webhook deliveries.

Poll when the batch is small or you are already inside a process that can wait, since the bulk endpoint returns results inline for very small submissions and a job id you can check for larger ones. Use webhooks once batches are large enough that polling wastes requests, or when completion needs to trigger work in another system: you subscribe an HTTPS endpoint to events and receive a signed POST when the job finishes. Either way, verify the signature before trusting a payload, and acknowledge with a success status promptly, because slow or failed responses are treated as undelivered and retried on a backoff schedule. If you only need this occasionally, the bulk email verifier does the same job with no code.

Verify Your Email List Free

Get 100 daily free verifications. No credit card required.