Resources
API changelog
This page lists changes to the Tomba API (v1), newest first. Refreshes of Tomba's data are listed in Data updates, and SDK release notes are on each SDK's GitHub repository, linked from SDKs. API versioning explains which changes count as breaking.
September 2026
- Breaking September 30: Bulk jobs take new
parameter names, and the old ones are ignored.
maximumis nowmax_emails_per_domain; theemail_typeanddepartmentobjects areemail_typewithemail_type_mode, anddepartmentswithdepartments_mode;verifyisverify_emails,sourcesisinclude_sources,phoneisfind_phones,fullisfind_all_phones,validisboost_score_from_sources,skipisskip_rows_with_email, andnotifieisnotify. The one-basedcolumnandcolumn_*parameters are replaced by zero-based*_field_indexparameters, and columns are found from the header row when you don't set them. Downloads takefileinstead oftype, and lists takearchived=trueinstead offilter=archived. Update your create requests; see Create a job. - Breaking September 30: Bulk jobs return their options in
configand their results inmetrics. These replaceinput_type,maximum,email_type,department,sources,verify,phone,full,notifie,upload,total,total_list,total_emails,chart,time_track,search_cost,verify_cost,phone_cost,launched, andprocessed_email;usedis nowbilled, andtableispreview.GET /v1/bulk/{type}/{id}returns the job as an object indata, and404 unknown_recordfor a missing job instead of an empty array. The progress of a job that isn't launched has the statuspendinginstead of{"data": []}, and an action that the job's status doesn't allow returns409 invalid_stateinstead of404.DELETE /v1/bulk/linkedin/{id}is removed; useDELETE /v1/bulk/linkedin/{id}/delete. A job past itsexpired_at, 180 days after it was created, can no longer be downloaded, launched, or retried: those requests return409 invalid_state. See Job fields. - September 30: Bulk jobs accept rows as JSON
data, start when created withlaunch, and send a signed event towebhook_urlwhen they end. Lists takeexpired=trueorfalse. New routes cancel, retry, restore, and estimate a job and return its history, andGET /v1/bulk/types,GET /v1/bulk/stats, andGET /v1/bulk/webhook-secretreturn the bulk types, your bulk activity, and the key events are signed with. The limit of 2 jobs per type now counts running jobs only. See Bulk operations and Bulk job events. - September 21: People can now remove their phone number or LinkedIn profile from Tomba, as well as their email address. Phone Finder, Phone Validator, and LinkedIn Finder return
451with error typeclaimed_phoneorclaimed_linkedinfor removed data; delete that data from your records. See Data removal. - Breaking September 20: A key and secret that
don't match an account now return
401instead of400, as do requests from an account that is unconfirmed, has no password set, or has an expired subscription. Missing, malformed, and expired credentials still return400; if your client branches on the status code, handle both. See Authentication errors. - Breaking September 20: API keys now expire,
and existing keys were given an expiry date. A request with an expired key
fails with
400and error typeapi_key_expired, and theX-Tomba-Key-Expiredheader gives the expiry time. Keys also gain aname,expires_at, andlast_used_at;POST /v1/keysacceptsnameandexpires_in_days, andPATCH /v1/keys/{id}renames a key. Check your keys'expires_atand rotate them before they lapse. See Key expiry. - September 8: OAuth apps can register themselves with dynamic client registration at
POST /v1/oauth/register. See OAuth 2.0.
August 2026
- August 29: The API accepts OAuth 2.0 access tokens, sent as
Authorization: Bearer <access_token>, as an alternative to a key and secret. Apps get tokens through the authorization code flow with PKCE or the device flow, and discover the endpoints athttps://api.tomba.io/.well-known/oauth-authorization-server. See OAuth 2.0. - Breaking August 28:
GET /v1/logsis now paginated: it returns 20 entries per page by default, with ametaobject, instead of up to 3,000 entries in one response. Usepageandlimitto read further pages. Entries gainhttp_method,status_code,endpoint,duration_ms, andapi_key_id, the endpoint accepts filters such astype,status_code,start, andend, andGET /v1/logs/{id}returns one entry. See Retrieve API logs. - August 25:
POST /v1/flagreports an incorrect result, andGET /v1/flaglists your reports. See Flag incorrect data and Refunds for incorrect data. - August 12: A request can now run for up to 180 seconds before the gateway ends it with
504. Set your client timeout to at least 180 seconds. See Response format. - August 12: Higher-tier plans no longer have per-endpoint rate limits. See Limits by plan.
- August 3: Rate limits now depend on your plan and apply to each endpoint per second, per minute, and per day. Responses carry
RateLimit,RateLimit-Policy, andx-*-rate-limitheaders, a429carriesRetry-After, andGET /v1/rate-limitsreturns the limits that apply to your account. See Rate limits and Retrieve rate limits.
July 2026
- July 30: Email addresses whose owners asked Tomba to remove them are left out of Domain Search results. Email Finder, Email Verifier, Author Finder, Email Enrichment, and the person and combined enrichment endpoints return
451with error typeclaimed_emailfor them; delete that address from your records. See Data removal.
April 2026
- Breaking April 21: When your search or
verification balance is lower than a request's cost, the request now fails
with
402and error typequota_exceeded, instead of429andrate_limit. Domain Search returns the request's estimated cost in theX-Estimated-Costheader, and Email Verifier inX-Estimated-Verify-Cost. Handle402separately from429, and don't retry it. See Credit costs.
March 2026
- March 28: Finder, verifier, enrichment, and phone finder endpoints accept an optional
webhook_urlparameter. Tomba returns the result as usual and also posts it to that URL. See Per-request callbacks.
February 2026
- February 26: LinkedIn Finder accepts
full=trueto return every address Tomba has stored for the profile instead of the single most likely one. See LinkedIn Finder. - February 4: Email Finder, Email Enrichment, and LinkedIn Finder accept
enrich_mobile=trueto include the person's phone numbers indata.phone_data. Phone numbers cost extra credits; see Credit costs.
January 2026
- Breaking January 19: Email Format reports its
quota in the
X-Count-LimitandX-Count-Remainingheaders instead ofX-Search-LimitandX-Search-Remaining. Update any code that reads those headers from Email Format responses. See Check usage.
December 2025
- December 29: Similar domains is paginated: it accepts
pageandlimitand returns ametaobject. See Similar.
September 2025
- September 3:
POST /v1/reveal/searchaccepts an API key and secret. See Search companies.
June 2025
- June 13:
GET /v1/locationreturns, for each country, how many of a domain's email addresses belong to people there. See Location.
May 2025
- May 22: Phone Finder is available at
GET /v1/phone-finder. The older/v1/phone/{email}path keeps working; see Legacy paths. - May 21:
GET /v1/phone-validatorchecks whether a phone number is valid, and Phone Finder accepts adomainas well as anemail. See Phone validator and Phone finder. - May 21:
GET /v1/domain-suggestionsreturns companies whose name or domain matches a query, with their domains. See Get domain suggestions.
April 2025
- April 17:
GET /v1/people/find,GET /v1/companies/find, andGET /v1/combined/findenrich a person, a company, or both. See Person API, Company API, and Combined API.
Last modified on