batch_id immediately; each profile is processed independently and
delivers its own webhook.
The scan mode is selected by the path you call — every profile in the
batch runs in that mode:
Both modes accept the same request body and return the same response
shape (the
scan_mode field echoes which one ran). See
Scan modes for the full
comparison.
Request body
string[]
required
Array of creator profile URLs. Each URL must be a valid HTTP or
HTTPS URL.
string
HTTPS endpoint Tumban will
POST each result to as profiles
complete. Optional: if omitted, Tumban falls back to the
organization’s default_callback_url.
If neither is set, the batch still runs and individual scans can be
polled via GET /api/v2/scans/{scan_id} — no
webhooks are sent.object
default:"{}"
Arbitrary JSON object applied to every profile in the batch. Echoed
back on each per-profile webhook payload.
Response
string
required
UUID of the batch. Use it to fetch aggregate progress via
GET /api/v2/batches/{batch_id}.string
required
Always
processing on submission. See
Status values.integer
required
Count of profiles accepted in the batch.
string
required
ISO 8601 UTC timestamp of when Tumban accepted the batch.
string
required
ISO 8601 UTC timestamp of the expected completion time. Scales
roughly linearly with batch size at the deployment’s concurrency
cap.
string
required
Which mode ran for every profile in the batch:
deep or quick.
Echoes the endpoint you called.boolean
Present and
true only when the batch was partially accepted because
the org’s daily_scan_limit had remaining capacity for fewer profiles
than were requested. Absent (or null) when every submitted URL was
accepted.integer
Present only when
daily_limit_truncated is true. The number of
trailing profile URLs from the request that were not queued for
scanning. The first total_profiles URLs (in submission order) were
accepted; the last profiles_skipped URLs were dropped. Resubmit the
remainder after the daily limit window resets (00:00 UTC).Example
/api/v2/batch/quick with the same
body. The response is identical except scan_mode is "quick".
The batch’s
scan_ids are not returned in the response. Read each
per-profile result via the webhook callback or by querying
GET /api/v2/batches/{batch_id} for
aggregate progress.Example — partial acceptance
When the org’sdaily_scan_limit has capacity for fewer profiles than
were requested, the batch is accepted with the leading N profiles only
and the response sets daily_limit_truncated and profiles_skipped.
Worked example. Submit 50 URLs with 30 remaining in the daily
quota → the first 30 URLs (in submission order) are queued; the
last 20 are dropped:
total_profiles is the count actually queued (30), not the count
submitted (50). To recover the skipped URLs, take the last
profiles_skipped entries from your original profile_urls array — in
the same order — and resubmit them after the next daily window opens at
00:00 UTC.

