Migrate from Kickbox
This guide maps the Kickbox API v2 (single verification, batch verification, and balance) to the Tomba Email Verifier and bulk verifier jobs. Kickbox API behavior checked on 2026-09-29 against Kickbox's official client libraries on GitHub.
Before you begin
- Get your API key (
ta_…) and secret (ts_…); see Authentication. - Check what a verification costs in Credit costs and your plan's throttling in Limits by plan.
- Set your HTTP client timeout to at least 180 seconds. Tomba returns the finished result in the response.
Endpoint mapping
Replace the host api.kickbox.com with api.tomba.io.
| Kickbox | Tomba |
|---|---|
GET /v2/verify | GET /v1/email-verifier |
PUT /v2/verify-batch | POST /v1/bulk/verifier, then PUT /v1/bulk/verifier/{id} to launch |
GET /v2/verify-batch/{id} | GET /v1/bulk/verifier/{id}/progress, then GET /v1/bulk/verifier/{id}/download |
GET /v2/balance | GET /v1/me |
Authentication changes
Kickbox's client libraries send the key as Authorization: token <key>. Tomba needs two headers, X-Tomba-Key and X-Tomba-Secret:
Code
Tomba API keys expire; plan their rotation with Key expiry.
Parameter mapping
| Kickbox | Tomba | Notes |
|---|---|---|
email | email | Required. A malformed address returns 422 params_invalid instead of a result. |
timeout | No equivalent | Kickbox's value is in milliseconds. Set the timeout in your HTTP client instead. |
Response field mapping
Kickbox returns a flat object. Tomba nests the checks in data.email and lists the public pages where the address appears in data.sources. Field definitions are in Email verifier response.
| Kickbox | Tomba | Notes |
|---|---|---|
result | data.email.result, data.email.status | See Status mapping. |
reason | data.email.status and the booleans in data.email | See Status mapping. |
role | No equivalent | |
free | data.email.webmail | |
disposable | data.email.disposable | |
accept_all | data.email.accept_all | |
did_you_mean | No equivalent | |
sendex | data.email.score | Kickbox scores from 0 to 1; Tomba's integer score is computed differently. Recalibrate any threshold you apply to it. |
email | data.email.email | An empty string when the domain is disposable. |
user, domain | No equivalent | Split data.email.email at @. |
success, message | HTTP status code, errors.message | See Error mapping. |
X-Kickbox-Balance header | X-Verify-Remaining header | Tomba's value is the balance before the current request; see Check usage. |
X-Kickbox-Response-Time header | No equivalent |
Tomba also returns block, greylisted, gibberish, regex, mx_check, mx.records, smtp_provider, and whois, which have no Kickbox counterpart.
Status mapping
Kickbox result | Tomba status | Tomba result |
|---|---|---|
deliverable | valid | deliverable |
undeliverable | invalid | undeliverable |
risky | accept_all | risky |
risky, with disposable: true | disposable | Empty string |
unknown | unknown | risky |
Kickbox reason | Tomba |
|---|---|
accepted_email | status is valid |
rejected_email | status is invalid |
invalid_email | The request fails with 422 params_invalid |
invalid_domain | mx_check is false |
low_deliverability | status is accept_all when the domain accepts all mail |
low_quality | No single equivalent. Check disposable, webmail, and gibberish. |
no_connect, timeout, invalid_smtp, unavailable_smtp, unexpected_error | No equivalent reason. An inconclusive check returns status unknown; a failed check returns 408 proxy_error. |
Branch on status rather than result: Tomba's unknown status carries the result risky, and a disposable address has an empty result. Compare status case-insensitively. Each value is defined in Status values.
Error mapping
Both APIs signal failures with HTTP status codes. Tomba's error body is an errors object with type, message, and code.
| Kickbox | Tomba | What to do |
|---|---|---|
403 Insufficient balance | 402 quota_exceeded | Wait for your usage window to renew or add credits. |
Other 4xx with a message | 400 or 401 authentication_failed for credentials, 400 api_key_expired, 422 params_invalid for parameters | Read errors.type to find the cause; rotate an expired key. |
5xx | 500 api_error | Retry with backoff. |
Tomba also returns 429 rate_limit when you exceed your plan's rate limits (retry after Retry-After; see Handle 429 responses), 408 proxy_error when the mailbox check fails, and 451 claimed_email when the owner of the address asked Tomba to stop processing it. Remove 451 addresses from your list. Error responses don't consume credits; every type is listed in Errors.
Bulk and async jobs
| Kickbox | Tomba |
|---|---|
PUT /v2/verify-batch with newline-separated addresses and an X-Kickbox-Filename header | POST /v1/bulk/verifier with a name and a newline-separated list, or a CSV file |
| The batch starts on submission | Launch it: PUT /v1/bulk/verifier/{id} |
GET /v2/verify-batch/{id} | Poll GET /v1/bulk/verifier/{id}/progress until status is completed, then download the CSV from GET /v1/bulk/verifier/{id}/download. Or set webhook_url to receive an event when the job ends. |
Code
The launch, progress, and download requests are shown in Lifecycle. Row limits and daily job limits are in Limits, and a job is charged when you first download its results; see Billing.
Code example
This function replaces a call to /v2/verify and returns Kickbox's field names for the values Tomba provides. It needs Node.js 18 or later.
Code
Cutover checklist
- Store the Tomba key and secret as
TOMBA_API_KEYandTOMBA_SECRET_KEY, and send them asX-Tomba-KeyandX-Tomba-Secret. - Point single verifications at
GET https://api.tomba.io/v1/email-verifier, drop thetimeoutparameter, and set a client timeout of at least 180 seconds. - Read results from
data.emailand translateresultandreasonwith the status mapping, comparingstatuscase-insensitively. - Handle
402where you handled403 Insufficient balance, retry429afterRetry-After, and drop addresses that return451. - Replace batches with
verifierbulk jobs: create, launch, poll/progress, and download the CSV. - Verify the same sample list with both services and compare the mapped results before you switch production traffic.