The Emailable API: Rate Limits, Batch Behaviour, and What to Cache
Emailable stops returning per-address results five days after a large batch finishes. That one documented behaviour decides the shape of any integration worth building.
The Emailable API verifies single addresses and batches of up to 50,000 from api.emailable.com/v1. Published rate limits are 25 requests per second on verify and 5 per second on batch and account. Per-address batch results are dropped after five or thirty days, so integrations must store verdicts themselves.
Key takeaways
- Rate limits are published per endpoint: 25 requests per second on verify, 5 per second on batch and account, with custom limits for enterprise accounts.
- Batches take up to 50,000 addresses, and callback results are retried hourly for up to three days until your endpoint returns a 200, so the receiver must be idempotent.
- Per-address results leave the API after 30 days for batches up to 1,000 addresses and after 5 days for larger ones, leaving aggregate counts only.
- The documentation warns that disabling the SMTP step significantly reduces accuracy and that disabling retries increases unknown results, so both defaults are worth keeping.
Reviewed and updated August 12, 2026
The Emailable API: Rate Limits, Batch Behaviour, and What to Cache
Emailable's batch endpoint stops returning your per-address results five days after a large batch finishes. Batches of a thousand addresses or fewer keep theirs for thirty days. After those windows the API returns aggregate counts only, and the individual verdicts you paid for are gone from the response.
That single documented behaviour decides the architecture of any integration worth building. You are not calling a verification API and reading the answer. You are calling it, storing the answer somewhere you control, and treating the vendor's copy as a cache that expires.
Here is what the API publishes, checked against Emailable's own documentation in August 2026.
The basics
The base URL is https://api.emailable.com/v1/. Authentication is an API key passed as a URL parameter or as POST data, or an OAuth access token. Emailable's documentation describes two key types, one of which is meant for contexts where the key will be exposed publicly, such as JavaScript running in a browser, and that path pairs with a captcha response parameter.
Official client libraries exist for Ruby, Node.js and Python, all published under the vendor's own GitHub organisation. The documented endpoints are small in number: verify a single address, create a batch, check a batch, and read your account.
- Step 1POST /v1/batch
Up to 50,000 comma-separated addresses, optionally with a callback URL
- Step 2Wait for the callback
Results are POSTed to your URL on completion; a non-200 response is retried hourly
- Step 3GET /v1/batch
Poll by batch id if you did not supply a callback, or to read progress
- Step 4Store the verdicts
Per-address results leave the API after 5 or 30 days depending on batch size
Rate limits, published per endpoint
Emailable publishes its rate limits rather than gating them behind support, which is less common than it should be.
Standard accounts get 25 requests per second on /v1/verify, 5 per second on /v1/batch, and 5 per second on /v1/account. Enterprise accounts are documented as custom, and the docs say higher limits may be requested.
Rate-limited responses carry headers describing the window: ratelimit-limit for the maximum requests allowed in the current window, ratelimit-remaining for how many are left, and ratelimit-reset for the timestamp when the window resets. Exceeding the limit returns a 429 with the message "Rate Limit Exceeded".
The practical read: single verification is generous and batch creation is deliberately not. Twenty-five per second on the single endpoint is enough for form-time validation at real traffic. Five per second on batch creation is a strong hint that the vendor expects you to send large batches rather than many small ones, which is also the cheaper way to use it.
The parameters that trade accuracy for latency
Three documented parameters on the single-verify endpoint change what you get, and two of them carry warnings from the vendor.
smtp defaults to true. Emailable's documentation says the SMTP step takes up the majority of the response time and that disabling it will significantly decrease verification accuracy. That is the vendor telling you not to turn off the only check that confirms a mailbox exists. Leave it on.
accept_all defaults to false, and the docs note it heavily impacts response time. This is the check that tries to resolve whether a catch-all domain can be pinned down to a concrete verdict, so for B2B lists it is the parameter that decides whether your enterprise contacts come back usable or come back labelled Risky.
timeout accepts a minimum of 2 seconds, a maximum of 10, and defaults to 5. Alongside it, the documentation states that if a verification takes longer than the timeout you may retry the request for up to five minutes without it counting again against your usage, and that after five minutes further requests do count. A slow verification also returns a 249 status code with a message asking you to send the request again.
On the batch endpoint, retries defaults to true and automatically retries verification when certain mail-server responses come back. The docs are explicit that disabling it speeds things up and may increase the number of unknown responses, which for a B2B list means more addresses you cannot act on. Greylisting is exactly the behaviour those retries exist to survive.
Batch is the endpoint you actually want
The batch endpoint documentation states that up to 50,000 addresses can be sent per batch, comma-separated, with larger batches available to enterprise accounts on request. The data can be form-encoded, multipart, or JSON, and the docs are firm that parameters belong in the request body rather than the query string.
Supply a url and Emailable POSTs the results to it when the batch completes, with a body identical to the batch status response. The retry behaviour on that callback is worth designing for: if your endpoint returns anything other than a 200, the results will continue to be sent hourly until a 200 comes back or until three days have passed since the batch finished verifying. Three days of hourly retries is a generous window, and it is also a duplicate-delivery guarantee rather than an exactly-once one, so make the receiver idempotent and key it on the batch id.
response_fields lets you narrow the payload to the attributes you want, from a documented list that includes state, reason, score, accept_all, disposable, role, free, mailbox_full, did_you_mean, mx_record, smtp_provider and the name-guess fields. Partial results while a batch is still running are available only for batches of up to 1,000 addresses.
What to cache, and why the retention windows force it
Store every verdict you receive, keyed by address, with the timestamp of the verification. The reasons stack up quickly.
The API drops per-address results after five days for batches over a thousand and after thirty days for batches at or below it. A verdict you did not persist is a verdict you will pay to obtain again.
Duplicate detection is list-scoped rather than account-scoped. Emailable's documentation says duplicates are identified within a single uploaded list, and that the same address appearing in two separate lists is treated as two separate addresses. Your own store is therefore the only place that can stop you paying twice for the same contact across two campaigns.
Verdicts decay. A mailbox confirmed today can be closed next quarter, so cache with an age and re-verify close to send rather than trusting an old row. The same caching questions come up with any credit-metered enrichment API, and the pattern is the one described for the Apollo.io API: store the result, store the cost, and never let a retry loop pay twice for an answer you already have.
Cache the reason alongside the state, not just the state. A timeout and a no_connect are both Unknown, and only one of them is worth retrying tomorrow.
Watch the balance from the same code that spends it. The documented /v1/account endpoint returns account information including remaining credits, which is the cheapest way to stop a batch job discovering mid-run that it cannot pay for the rest of the list. Read it before a large batch rather than after a failure, and alert on it rather than on the invoice, since a batch that stalls on credits is a launch that slips by a day.
- Yes: Persist every verdict with its timestamp before you act on it
- Yes: Make the batch callback receiver idempotent, since retries run hourly for up to 3 days
- Yes: Keep smtp enabled, since the vendor says disabling it significantly reduces accuracy
- Yes: Enable the accept-all check on B2B lists and budget the extra response time
- No: Do not disable retries to speed up a batch, since the documented cost is more unknowns
Verifying addresses on your own forms
The widget is the same meter as everything else. Emailable prices Bulk, Verifier, API and Widget identically at one credit per verification, so validating an address at the moment somebody types it into a signup or demo-request form costs exactly what checking it in a monthly list clean would.
That equal pricing is what makes point-of-capture validation worth wiring up. Catching a typo while the person is still on the page fixes the record at the only moment the person can confirm it, and the did_you_mean attribute exists for precisely that case, returning a suggested correction for a common misspelling. The alternative is discovering the typo weeks later in a bounce report, when nobody is around to fix it.
If you are integrating through the API rather than the drop-in widget, the public key type and captcha parameter described in the authentication docs are the documented path for browser-side calls, since a standard key in client-side JavaScript is a key you have published.
Where this sits in an outbound stack
An API integration only earns its complexity if the verdicts change what gets sent. Ours do: addresses that come back unresolved are held rather than mailed, and volume is replaced by sourcing more contacts we can confirm rather than by relaxing the gate. We send one message per campaign, never a bump or a thread reply, and a contact nobody can evidence is a contact we re-source.
Wire the verdict into the upload boundary, not into a report. A verification result that arrives in a dashboard nobody reads before launch has cost credits and prevented nothing, and the bounce rate benchmarks that follow are the number the gate exists to protect. The comparison of how the different vendors in this category handle the hard cases sits in our email verification tools breakdown, and the role-based address question is worth settling in the same pass, since the API flags those separately and the right policy differs by ICP.
Want the verification gate built into a campaign rather than bolted onto one? Get a free campaign plan and we will show you where it sits in the build.
Pricing and features verified as of August 2026. Verify current terms with the vendor before relying on them.
Frequently asked questions.
Frequently asked questions- What are the Emailable API rate limits?
- The documentation publishes them per endpoint. Standard accounts get 25 requests per second on the verify endpoint and 5 per second on both the batch and account endpoints, with enterprise limits described as custom. Exceeding a limit returns a 429, and responses carry headers giving the limit, the remaining requests and the reset timestamp.
- How many emails can one Emailable batch hold?
- Up to 50,000 addresses per batch, sent as a comma-separated list in the request body rather than the query string, with larger batches available to enterprise accounts on request. Partial results while a batch is still processing are only offered for batches of up to 1,000 addresses.
- How long does Emailable keep my verification results?
- For batches up to 1,000 addresses the individual results stop being returned after 30 days. For batches over 1,000 the downloadable results file stops being returned after 5 days. In both cases the endpoint continues to return aggregate counts, so anything you need per address has to be stored on your side.
- Should I turn off the SMTP check to make verification faster?
- The documentation advises against it in its own words, saying the SMTP step takes the majority of the response time and that disabling it will significantly decrease verification accuracy. That step is the one that confirms a mailbox exists, so turning it off removes the reason to run verification at all.
About the author.
Tim Carden is CMO / CTO at RevenueFlow, which builds and operates outbound revenue engines for B2B companies. Studied at McGill University.
Tim Carden · CMO / CTO
Connect on LinkedIn →Explore more.
Ready to scale your outreach?
We build GTM engines that book real meetings. See the receipts.
Related articles.
Emailable Review: What emailable.com Verifies, What It Costs, and Where It Fits
Emailable returns five verdicts and only one is a straight yes. Read against its own documentation: the states, the accept-all logic, and what the guarantee covers.
Emailable Pricing: What One Credit Buys and Which Price the Page Shows You
Emailable's calculator opens on $38 for 5,000 credits and a toggle turns that into $32.30. Both are on the page, and only one is the price a visitor sees first.
INKY Spam Filter: Diagnosing Placement Without Guesswork
INKY delivers your message and inserts a coloured warning frame above it. The sender problem here is the framing of the first impression, not the delivery.
SMTP Server Software: What Running Your Own Actually Costs
Postfix, Exim and hMailServer are free downloads. The cost is the IP address, its history, reverse DNS, TLS, blocklist delisting and reputation from zero.
SMTP Server: What Breaks First When You Scale Sends
Four different things get called an SMTP server, and each one fails differently at volume. The limits that appear between 1,000 and 10,000 sends a day.
Sender Reputation Check for B2B Teams: Which Surfaces Can Actually See You
Most sender reputation tools score an IP address, and if you send from Google Workspace that IP is not yours. Which layer you actually control.