TombaTomba
Start free
  • Documentation
  • API reference
  • SDKs & CLI
  • AI & MCP
  • Integrations
  • Enterprise
  • Migration guides

Find, verify and enrich B2B contacts from public sources, in the app, your spreadsheet or through the API.

GDPR & CCPA

// docs

  • API changelog
  • Support options
  • Security

// platform

  • Dashboard
  • Pricing
  • API status

// resources

  • Help center
  • Product updates
  • TombaBot crawler

// company

  • Website
  • Contact us
  • Edit or remove your data

© 2021–2026 Tomba.io

  • Terms of service
  • Privacy policy
  • Cookie policy
  • Security policy
  • GDPR
  • CCPA
Information
Finder
Verifier
Enrichment
Phone
Domain
Email
Domain Suggestions
Reveal
Bulks
    List bulk jobsgetCreate a bulk jobpostGet a bulk jobgetLaunch a bulk jobputGet bulk job progressgetDownload bulk job resultsgetEstimate bulk job creditsgetGet bulk job historygetCancel a bulk jobpostRetry a bulk jobpostRename a bulk jobputArchive a bulk jobdeleteRestore an archived bulk jobputDelete a bulk jobdeleteList bulk typesgetGet bulk statisticsgetGet the bulk webhook secretgetRotate the bulk webhook secretpost
Scrape Campaigns
Leads
Lead Lists
Lead Attributes
Account
Keys
Flag
MCP Server
Schemas
Tomba
Tomba

Bulks

Download schema

Create, launch, follow, and download bulk jobs. Every route takes the bulk type in its path


List bulk jobs

GET
https://api.tomba.io/v1
/bulk/{type}
X-Tomba-Key (header)
+X-Tomba-Secret (header)

List the jobs of a type, limit per page, sorted by job ID. Jobs are shared by all members of a workspace. Archived jobs are listed only with archived=true, and deleted jobs never.

List bulk jobs › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier

List bulk jobs › query Parameters

page
​integer · min: 1

Page number, starting at 1.

Default: 1
limit
​integer · min: 1 · max: 50

Number of jobs per page. Values above 50 are treated as 50.

Default: 10
direction
​string · enum

Sort order by job ID. desc lists the newest jobs first.

Enum values:
desc
asc
Default: desc
archived
​boolean

true lists only archived jobs. Without it, archived jobs aren't listed.

Default: false
status
​string · enum

Lists only the jobs with this status.

Enum values:
pending
running
completed
failed
cancelled
expired
​boolean

true lists only the jobs past their expired_at, 180 days after creation; false lists only the others. Without it, both are listed.

q
​string

Lists only the jobs whose name contains this text.

List bulk jobs › Responses

A page of jobs, newest first unless direction is asc.

​BulkJob[] · required
​object · required
GET/bulk/{type}
curl https://api.tomba.io/v1/bulk/:type \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": [ { "bulk_id": 4521, "user_id": 1042, "bulk_type": "search", "name": "Q3 target accounts", "status": "completed", "archived": false, "progress": 100, "processed": 3, "billed": true, "error_message": null, "retry_count": 0, "created_at": "2026-09-29T09:14:03Z", "started_at": "2026-09-29T09:14:05Z", "completed_at": "2026-09-29T09:16:18Z", "cancelled_at": null, "expired": false, "expired_at": "2027-03-28T09:14:03Z", "config": { "v": 1, "input": { "source": "list", "has_header": false, "rows": 3 }, "options": { "input_type": "domain", "max_emails_per_domain": 10, "email_type": "personal", "email_type_mode": "only", "departments": [ "engineering", "sales" ], "departments_mode": "only", "verify_emails": true, "find_phones": false, "include_sources": true, "boost_score_from_sources": false, "find_all_phones": false, "skip_rows_with_email": false }, "notify": false, "webhook": { "url": "https://hooks.example.com/tomba/7f3c9a" } }, "metrics": { "v": 1, "rows": { "input": 3, "valid_input": 3, "invalid_input": 0, "duplicates": 0, "skipped": 0, "processed": 3, "errors": 0 }, "results": { "found": 3, "not_found": 0, "hit_rate": 100, "records": 24 }, "distribution": { "rows": [ { "key": "found", "label": "Found", "count": 3, "percent": 100 }, { "key": "not_found", "label": "Not found", "count": 0, "percent": 0 } ], "verification": [ { "key": "valid", "label": "Valid", "count": 18, "percent": 75 }, { "key": "accept_all", "label": "Accept all", "count": 4, "percent": 16.7 }, { "key": "unknown", "label": "Unknown", "count": 2, "percent": 8.3 } ] }, "emails": { "total": 24, "per_found_row": 8, "with_sources": 21, "webmail": 0, "deliverable_rate": 75 }, "errors": { "client": 0, "server": 0, "rate_limited": 0 }, "credits": { "search": 3, "verify": 24, "phone": 0, "total": 27 }, "timing": { "queued_ms": 1840, "duration_ms": 133520, "rows_per_minute": 1.3 } } } ], "meta": { "total": 1, "pageSize": 10, "current": 1, "total_pages": 0 } }
json
application/json

Create a bulk job

POST
https://api.tomba.io/v1
/bulk/{type}
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Create a job from a list of values, data rows, or a CSV file (multipart). With data or file, each column is found from the header row unless you set its zero-based *_field_index. The options a type uses are listed in Bulk types; unknown parameters are ignored.

The job is pending until you launch it. With launch set to true, it starts right away; if it can't, it stays pending and data.message says why. A domain export (export) takes one domain, always starts, and needs a paid plan.

Nothing is charged until the first download; see Billing. You can create 15 jobs of a type a day (30 domain exports), and none while 2 jobs of the type are running; see Limits.

Create a bulk job › path Parameters

type
​string · enum · required

The bulk type, or export for a domain export. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier

Create a bulk job › Request Body

Parameters of `POST /bulk/{type}`. Send the input as one of `list`, `data`, or `file`. With `data` or `file`, each column is found from the header row unless you set its zero-based `*_field_index`. A parameter a type doesn't use returns `422`, except `verify_emails`, which is ignored; unknown parameters are ignored. See [Create a job](https://docs.tomba.io/bulks#create-a-job).
BulkCreate
name
​string · minLength: 3 · maxLength: 200

Job name, 3 to 200 characters. Required, except for a domain export, which is named after its domain.

list
​string

One value per line, or a JSON array of values. Tomba trims, lowercases, and de-duplicates the values, drops the invalid ones, and keeps the first ones up to the type's row limit. Not accepted by finder.

data
​array[]

Rows of cells, for input with several columns. The first row is a header unless has_header is false. In a multipart form, send it as a JSON-encoded string.

has_header
​boolean

Whether the first row of data or of the file is a header. A list has no header.

Default: true
delimiter
​string

Column separator of the uploaded file: ,, ;, |, or tab. Any other value is read as ,.

Default: ,
domain
​string

The domain to export. Required for export, and used by no other type.

domain_field_index
​integer · min: 0

Zero-based column of the domain or website. Used by search, similar, company, finder, and phone-finder.

company_name_field_index
​integer · min: 0

Zero-based column of the company name. Used by search, similar, company, and finder.

first_name_field_index
​integer · min: 0

Zero-based column of the first name. Used by finder.

last_name_field_index
​integer · min: 0

Zero-based column of the last name. Used by finder.

full_name_field_index
​integer · min: 0

Zero-based column of the full name. Used by finder.

email_field_index
​integer · min: 0

Zero-based column of the email address. Used by enrich, verifier, and phone-finder.

linkedin_url_field_index
​integer · min: 0

Zero-based column of the LinkedIn profile URL. Used by linkedin and phone-finder.

url_field_index
​integer · min: 0

Zero-based column of the article URL. Used by author.

phone_field_index
​integer · min: 0

Zero-based column of the phone number. Used by phone-validator.

country_field_index
​integer · min: 0

Zero-based column of the country code. Used by phone-validator.

technology_field_index
​integer · min: 0

Zero-based column of the technology slug. Used by technology.

input_type
​string · enum

Used by search, similar, and company: whether the input is domains or company names. Defaults to company when the input has a company name column and no domain column, and to domain otherwise.

Enum values:
domain
company
max_emails_per_domain
​integer · enum

Used by search and similar. Addresses returned per domain.

Enum values:
1
10
20
50
100
Default: 10
email_type
​string · enum

Used by search. With email_type_mode only, only addresses of this type are returned.

Enum values:
all
personal
generic
Default: all
email_type_mode
​string · enum

only returns only the addresses of email_type; priority returns every type.

Enum values:
only
priority
Default: only
departments
​string[]

Used by search. With departments_mode only, only addresses in these departments are returned.

Enum values:
all
engineering
sales
finance
hr
it
marketing
operations
departments_mode
​string · enum

only returns only the addresses in departments; priority returns every department.

Enum values:
only
priority
Default: only
verify_emails
​boolean

Used by search: verifies the addresses found. It is turned off, without an error, when max_emails_per_domain is above 10 or the input has more than 2,000 rows. similar, company, finder, enrich, linkedin, and author accept it, but it only adds verification credits there; see Billing.

Default: false
find_phones
​boolean

Adds phone numbers, at an extra cost. Used by search, company, finder, enrich, linkedin, verifier, and export.

Default: false
include_sources
​boolean

Adds the web pages where each address was found. Used by search, finder, enrich, linkedin, author, verifier, and export.

Default: false
boost_score_from_sources
​boolean

Used by search. Adds 10 points, up to 90, to the score of an address that couldn't be verified but was found on at least 5 web pages.

Default: false
skip_rows_with_email
​boolean

Used by finder. Skips the rows that already have a value in a column named email.

Default: false
find_all_phones
​boolean

Used by phone-finder. Returns every phone number found instead of one.

Default: false
filter
​string · enum

Used by export. The addresses to export, by type or by department.

Enum values:
all
personal
generic
engineering
sales
finance
hr
it
Default: all
notify
​boolean

Emails you when the job finishes with at least one result.

Default: false
launch
​boolean

Launches the job right after creating it. If it can't start, it stays pending and data.message in the response says why. A domain export always starts.

Default: false
webhook_url
​string · uri · maxLength: 2048

An https:// URL that receives an event when the job completes, fails, or is cancelled. At most 2,048 characters, without a username or password, on a host with a public IP address. See Bulk job events.

Create a bulk job › Responses

The job was created. With launch, data.message is present when the job couldn't start: it stays pending, and you can launch it later. The X-RateLimit-* headers count the jobs of this type created today.

​object · required
POST/bulk/{type}
curl https://api.tomba.io/v1/bulk/:type \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>' \ --data '{ "name": "Q3 target accounts", "list": "stripe.com\nshopify.com\nnotion.so", "max_emails_per_domain": 10, "email_type": "personal", "departments": [ "engineering", "sales" ], "verify_emails": true, "launch": true }'
Example Request Body
{ "name": "Q3 target accounts", "list": "stripe.com\nshopify.com\nnotion.so", "max_emails_per_domain": 10, "email_type": "personal", "departments": [ "engineering", "sales" ], "verify_emails": true, "launch": true }
json
Example Responses
{ "data": { "id": 4521 } }
json
application/json

Get a bulk job

GET
https://api.tomba.io/v1
/bulk/{type}/{id}
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Get a job by ID, with its options in config, its results in metrics, and, once it is billed, the first result rows in preview.

Get a bulk job › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Get a bulk job › Responses

The job, with the first rows of its results in preview once it is billed.

​BulkJob · required

A bulk job. preview is returned only by GET /bulk/{type}/{id}.

GET/bulk/{type}/{id}
curl https://api.tomba.io/v1/bulk/:type/:id \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "bulk_id": 4521, "user_id": 1042, "bulk_type": "search", "name": "Q3 target accounts", "status": "completed", "archived": false, "progress": 100, "processed": 3, "billed": true, "error_message": null, "retry_count": 0, "created_at": "2026-09-29T09:14:03Z", "started_at": "2026-09-29T09:14:05Z", "completed_at": "2026-09-29T09:16:18Z", "cancelled_at": null, "expired": false, "expired_at": "2027-03-28T09:14:03Z", "config": { "v": 1, "input": { "source": "list", "has_header": false, "rows": 3 }, "options": { "input_type": "domain", "max_emails_per_domain": 10, "email_type": "personal", "email_type_mode": "only", "departments": [ "engineering", "sales" ], "departments_mode": "only", "verify_emails": true, "find_phones": false, "include_sources": true, "boost_score_from_sources": false, "find_all_phones": false, "skip_rows_with_email": false }, "notify": false, "webhook": { "url": "https://hooks.example.com/tomba/7f3c9a" } }, "metrics": { "v": 1, "rows": { "input": 3, "valid_input": 3, "invalid_input": 0, "duplicates": 0, "skipped": 0, "processed": 3, "errors": 0 }, "results": { "found": 3, "not_found": 0, "hit_rate": 100, "records": 24 }, "distribution": { "rows": [ { "key": "found", "label": "Found", "count": 3, "percent": 100 }, { "key": "not_found", "label": "Not found", "count": 0, "percent": 0 } ], "verification": [ { "key": "valid", "label": "Valid", "count": 18, "percent": 75 }, { "key": "accept_all", "label": "Accept all", "count": 4, "percent": 16.7 }, { "key": "unknown", "label": "Unknown", "count": 2, "percent": 8.3 } ] }, "emails": { "total": 24, "per_found_row": 8, "with_sources": 21, "webmail": 0, "deliverable_rate": 75 }, "errors": { "client": 0, "server": 0, "rate_limited": 0 }, "credits": { "search": 3, "verify": 24, "phone": 0, "total": 27 }, "timing": { "queued_ms": 1840, "duration_ms": 133520, "rows_per_minute": 1.3 } }, "preview": [ { "email": "jane.doe@stripe.com", "name": "stripe.com", "org": "Stripe", "score": 97, "status": "valid", "type": "personal", "pattern": "{first}.{last}", "f_name": "Jane", "l_name": "Doe", "position": "Engineering Manager", "department": "engineering" } ] } }
json
application/json

Launch a bulk job

PUT
https://api.tomba.io/v1
/bulk/{type}/{id}
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Start a pending job; any other status, or an expired job, returns 409. The launch is refused with 429 while 2 jobs of the type are running, or when a kind of credit the job needs is used up. Nothing is charged at launch; see Billing. Follow the job with GET /bulk/{type}/{id}/progress or a webhook.

Launch a bulk job › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Launch a bulk job › Responses

The action succeeded. data.message says what was done.

​BulkActionResult · required
PUT/bulk/{type}/{id}
curl https://api.tomba.io/v1/bulk/:type/:id \ --request PUT \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "status": true, "message": "The Email Verifier bulk has been launched.", "code": 200 } }
json
application/json

Get bulk job progress

GET
https://api.tomba.io/v1
/bulk/{type}/{id}/progress
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Get a job's status, progress, estimated time left, and results so far. The fields are at the top level of the response, not in data. Poll until status is completed, failed, or cancelled, or use a webhook instead.

Get bulk job progress › path Parameters

type
​string · enum · required

The bulk type, or export for a domain export. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Get bulk job progress › Responses

The job's progress, at the top level of the response rather than in data.

Progress of a bulk job.
BulkProgress
status
​string · enum · required

pending until the job is launched. completed, failed, and cancelled are final.

Enum values:
pending
running
completed
failed
cancelled
progress
​integer · min: 0 · max: 100 · required

Percentage of the rows processed.

processed
​integer · required

Rows processed so far.

error_message
​string | null · required

Why the job failed.

rows_per_minute
​number | null · required

Processing speed. null until enough rows are processed.

eta_seconds
​integer | null · required

Estimated seconds until the job completes. null until enough rows are processed.

​BulkMetrics · required

The job's results. They are updated while the job runs (partial is true) and final once it completes.

GET/bulk/{type}/{id}/progress
curl https://api.tomba.io/v1/bulk/:type/:id/progress \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "status": "running", "progress": 42, "processed": 1260, "error_message": null, "rows_per_minute": 420, "eta_seconds": 248, "metrics": { "v": 1, "partial": true, "rows": { "input": 3000, "valid_input": 3000, "invalid_input": 0, "duplicates": 0, "skipped": 0, "processed": 1260, "errors": 0 }, "results": { "found": 1105, "not_found": 155, "hit_rate": 87.7, "records": 1105 }, "distribution": {}, "errors": { "client": 0, "server": 0, "rate_limited": 0 }, "credits": { "search": 0, "verify": 1105, "phone": 0, "total": 1105 }, "timing": { "queued_ms": 950, "duration_ms": 180000, "rows_per_minute": 420 } } }
json
application/json

Download bulk job results

GET
https://api.tomba.io/v1
/bulk/{type}/{id}/download
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Download a result file of a completed job as CSV. file selects it: full (the default), valid, or not_found. A job without a file of that kind returns 404, and a job past its expired_at returns 409.

The first successful download charges the job's credits, shown in metrics.credits; later downloads of any file are free. If your balance is lower than the cost at the first download, the response is 429 and nothing is charged. See Billing.

Each job can be downloaded 25 times a day, and a domain export 30 times.

Download bulk job results › path Parameters

type
​string · enum · required

The bulk type, or export for a domain export. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Download bulk job results › query Parameters

file
​string · enum

The result file: full for every result, valid for the rows with a valid result, or not_found for the input rows that returned no result.

Enum values:
full
valid
not_found
Default: full

Download bulk job results › Responses

The CSV file, as an attachment named after the job: <name>.csv for full, <name>_valid.csv for valid, and <name>_invalid.csv for not_found.

string
GET/bulk/{type}/{id}/download
curl https://api.tomba.io/v1/bulk/:type/:id/download \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
string
csv
text/csv

Estimate bulk job credits

GET
https://api.tomba.io/v1
/bulk/{type}/{id}/estimate
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Get the credits a job costs, and whether your balance covers them. Before the job completes, basis is upper_bound: the cost if every row returned the maximum. Once it completes, basis is exact: what the first download charges.

Estimate bulk job credits › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Estimate bulk job credits › Responses

The estimate.

​BulkEstimate · required

The credits of a job. Before it completes, an upper bound, as if every row returned the maximum. Once it completes, exactly what the first download charges.

GET/bulk/{type}/{id}/estimate
curl https://api.tomba.io/v1/bulk/:type/:id/estimate \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "bulk_id": 4521, "status": "pending", "basis": "upper_bound", "billed": false, "rows": 3, "credits": { "search": 3, "verify": 30, "phone": 0, "total": 33 }, "remaining": { "search": 480, "verify": 950 }, "sufficient": true, "note": "Upper bound: credits are charged on the first download, for what the job actually finds." } }
json
application/json

Get bulk job history

GET
https://api.tomba.io/v1
/bulk/{type}/{id}/history
X-Tomba-Key (header)
+X-Tomba-Secret (header)

List a job's events, oldest first: creation, launch, start, end, retries, downloads, renames, archiving, and webhook deliveries.

Get bulk job history › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Get bulk job history › query Parameters

page
​integer · min: 1

Page number, starting at 1.

Default: 1
limit
​integer · min: 1 · max: 100

Events per page. Values above 100 are treated as 100.

Default: 50

Get bulk job history › Responses

A page of events.

​BulkEvent[] · required
​PaginationMeta · required
GET/bulk/{type}/{id}/history
curl https://api.tomba.io/v1/bulk/:type/:id/history \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": [ { "id": 90211, "user_id": 1042, "event": "created", "actor": "user", "message": null, "meta": { "source": "list", "rows": 3, "invalid": 0, "duplicates": 0 }, "created_at": "2026-09-29T09:14:03Z" }, { "id": 90212, "user_id": 1042, "event": "launched", "actor": "user", "message": null, "meta": null, "created_at": "2026-09-29T09:14:03Z" }, { "id": 90230, "user_id": null, "event": "webhook_delivered", "actor": "worker", "message": null, "meta": { "attempt": 1, "status": 200, "event": "bulk.completed" }, "created_at": "2026-09-29T09:16:19Z" } ], "meta": { "total": 3, "pageSize": 50, "current": 1, "total_pages": 0 } }
json
application/json

Cancel a bulk job

POST
https://api.tomba.io/v1
/bulk/{type}/{id}/cancel
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Cancel a pending job: its status becomes cancelled, and you can retry it later. Only a pending job can be cancelled; any other status returns 409.

Cancel a bulk job › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Cancel a bulk job › Responses

The action succeeded. data.message says what was done.

​BulkActionResult · required
POST/bulk/{type}/{id}/cancel
curl https://api.tomba.io/v1/bulk/:type/:id/cancel \ --request POST \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "status": true, "message": "The Email Verifier bulk has been launched.", "code": 200 } }
json
application/json

Retry a bulk job

POST
https://api.tomba.io/v1
/bulk/{type}/{id}/retry
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Run a failed or cancelled job again from its input, with the same options. Its results and metrics are reset, retry_count goes up by one, and the job is launched. It returns 409 when the job has another status, has expired, or its input is no longer stored, and 429 like PUT /bulk/{type}/{id}.

Retry a bulk job › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Retry a bulk job › Responses

The action succeeded. data.message says what was done.

​BulkActionResult · required
POST/bulk/{type}/{id}/retry
curl https://api.tomba.io/v1/bulk/:type/:id/retry \ --request POST \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "status": true, "message": "The Email Verifier bulk has been launched.", "code": 200 } }
json
application/json

Rename a bulk job

PUT
https://api.tomba.io/v1
/bulk/{type}/{id}/rename
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Rename a job.

Rename a bulk job › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Rename a bulk job › Request Body

BulkPutRename
name
​string · minLength: 3 · maxLength: 200 · required

New name of the job, 3 to 200 characters.

Rename a bulk job › Responses

The action succeeded. data.message says what was done.

​BulkActionResult · required
PUT/bulk/{type}/{id}/rename
curl https://api.tomba.io/v1/bulk/:type/:id/rename \ --request PUT \ --header 'Content-Type: application/json' \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>' \ --data '{ "name": "Q3 target accounts, EMEA" }'
Example Request Body
{ "name": "Q3 target accounts, EMEA" }
json
application/json
Example Responses
{ "data": { "status": true, "message": "The Email Verifier bulk has been launched.", "code": 200 } }
json
application/json

Archive a bulk job

DELETE
https://api.tomba.io/v1
/bulk/{type}/{id}/archive
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Archive a completed, failed, or cancelled job: it leaves the default list and appears with archived=true. Restore it with PUT /bulk/{type}/{id}/restore. Other statuses, and an archived job, return 409.

Archive a bulk job › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Archive a bulk job › Responses

The action succeeded. data.message says what was done.

​BulkActionResult · required
DELETE/bulk/{type}/{id}/archive
curl https://api.tomba.io/v1/bulk/:type/:id/archive \ --request DELETE \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "status": true, "message": "The Email Verifier bulk has been launched.", "code": 200 } }
json
application/json

Restore an archived bulk job

PUT
https://api.tomba.io/v1
/bulk/{type}/{id}/restore
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Move an archived job back to the default list. A job that isn't archived returns 409.

Restore an archived bulk job › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Restore an archived bulk job › Responses

The action succeeded. data.message says what was done.

​BulkActionResult · required
PUT/bulk/{type}/{id}/restore
curl https://api.tomba.io/v1/bulk/:type/:id/restore \ --request PUT \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "status": true, "message": "The Email Verifier bulk has been launched.", "code": 200 } }
json
application/json

Delete a bulk job

DELETE
https://api.tomba.io/v1
/bulk/{type}/{id}/delete
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Delete a job. It no longer appears in lists and its routes return 404.

Delete a bulk job › path Parameters

type
​string · enum · required

The bulk type. Each type's input, options, and row limit are in Bulk types and in GET /bulk/types.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
id
​integer · int64 · required

Job ID, as returned when you created the job.

Delete a bulk job › Responses

The action succeeded. data.message says what was done.

​BulkActionResult · required
DELETE/bulk/{type}/{id}/delete
curl https://api.tomba.io/v1/bulk/:type/:id/delete \ --request DELETE \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "status": true, "message": "The Email Verifier bulk has been launched.", "code": 200 } }
json
application/json

List bulk types

GET
https://api.tomba.io/v1
/bulk/types
X-Tomba-Key (header)
+X-Tomba-Secret (header)

List every bulk type with its input fields and the header names detected for them, its options, row limit, daily limits, result files, and metrics distributions.

List bulk types › Responses

Every bulk type.

​BulkTypeInfo[] · required
GET/bulk/types
curl https://api.tomba.io/v1/bulk/types \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": [ { "type": "verifier", "path": "verifier", "label": "Email Verifier", "description": "Check the deliverability of a list of email addresses.", "app_path": "verifications", "storage": "file", "allows_upload": true, "file_required": false, "primary_field": "email", "fields": [ { "field": "email", "param": "email_field_index", "label": "Email", "header_synonyms": [ "email", "emails", "emailaddress", "mail", "workemail", "businessemail" ] } ], "options": [ "include_sources", "find_phones" ], "max_rows": 20000, "verify": { "always": true }, "creates_per_day": 15, "downloads_per_job_per_day": 25, "auto_launch": false, "downloads": [ "full", "valid", "not_found" ], "distributions": [ "rows", "verification" ] } ] }
json
application/json

Get bulk statistics

GET
https://api.tomba.io/v1
/bulk/stats
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Get the bulk activity of your account, or of your workspace: jobs created by status, rows processed, results, and credits billed, in total, per type, and per day. The period is the last 30 days unless you set from and to, and is at most one year.

Get bulk statistics › query Parameters

type
​string · enum

Counts only the jobs of this type.

Enum values:
search
similar
company
finder
enrich
linkedin
author
verifier
from
​string · date

First day of the period, as YYYY-MM-DD.

to
​string · date

Last day of the period, included, as YYYY-MM-DD.

Get bulk statistics › Responses

The statistics.

​BulkStats · required

Bulk activity of your account, or of your workspace, over a period. Credits count billed jobs only.

GET/bulk/stats
curl https://api.tomba.io/v1/bulk/stats \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "from": "2026-09-01T00:00:00Z", "to": "2026-10-01T00:00:00Z", "jobs": { "total": 4, "pending": 0, "running": 1, "completed": 3, "failed": 0, "cancelled": 0 }, "rows_processed": 5230, "found": 4410, "emails_found": 4410, "hit_rate": 84.3, "credits": { "search": 0, "verify": 4410, "phone": 0, "total": 4410 }, "by_type": [ { "type": "verifier", "label": "Email Verifier", "jobs": 4, "rows_processed": 5230, "found": 4410, "hit_rate": 84.3, "credits": { "search": 0, "verify": 4410, "phone": 0, "total": 4410 } } ], "daily": [ { "date": "2026-09-29", "jobs": 2, "rows_processed": 3000, "credits": 2580 } ] } }
json
application/json

Get the bulk webhook secret

GET
https://api.tomba.io/v1
/bulk/webhook-secret
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Get the key your bulk job events are signed with. It is created on first use, or when you first create a job with webhook_url. See Bulk job events.

Get the bulk webhook secret › Responses

The secret.

​BulkWebhookSecret · required

The key bulk job events are signed with. See Bulk job events.

GET/bulk/webhook-secret
curl https://api.tomba.io/v1/bulk/webhook-secret \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "secret": "whsec_xxxx", "created_at": "2026-09-29T09:14:03Z", "rotated_at": null } }
json
application/json

Rotate the bulk webhook secret

POST
https://api.tomba.io/v1
/bulk/webhook-secret/rotate
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Replace the key your bulk job events are signed with. The old key stops working at once, including for events of jobs that are already running.

Rotate the bulk webhook secret › Responses

The secret.

​BulkWebhookSecret · required

The key bulk job events are signed with. See Bulk job events.

POST/bulk/webhook-secret/rotate
curl https://api.tomba.io/v1/bulk/webhook-secret/rotate \ --request POST \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "secret": "whsec_xxxx", "created_at": "2026-09-29T09:14:03Z", "rotated_at": null } }
json
application/json

RevealScrape Campaigns