---
title: "Submit bulk domain analysis (results emailed)"
method: POST
path: "/analyze/bulk"
tags: ["analysis"]
---

# Submit bulk domain analysis (results emailed)

`POST /analyze/bulk`

## Request

- Base URL: `https://api.whoisgeni.us` (the document declares no server; this is the origin it was published from)
- URL: `https://api.whoisgeni.us/analyze/bulk`
- Auth: none declared

Submit a large domain list for asynchronous analysis with email delivery.

Unlike /analyze/batch (<=50 domains, processed in-request), a bulk upload
only persists a BulkJob row and dispatches a worker task: the per-domain
gate -> dispatch -> settle sequence runs in ``process_bulk_job`` with the
same post-dispatch billing settlement as the batch pass 3, and when every
child job is terminal the hygiene tick flips the row to ``exporting`` so
the export task renders CSV/JSON, uploads to S3, and emails presigned
links to the account address. Invalid domains are recorded as per-item
errors on the bulk job (batch precedent), not a whole-request 422.

## Headers

- `X-API-Key` string, nullable

## Request body

- BulkSubmitRequest: Request body for a bulk domain upload (results delivered by email). Attributes: domains: List of domain names to analyze (1-500; the operator-tunable cap ``settings.bulk_max_domains`` is enforced by the handler). force_refresh: Skip deduplication, force fresh analysis runs.
  - `domains` string[], required
  - `force_refresh` boolean

## Response `202`

Bulk submission accepted

- unknown

## Other responses

- `401`: Unauthorized — missing or invalid API key/JWT.
- `422`: Validation Error

---

[API](https://skmtc.dev/whoisgeni/apis/whoisgenius.md) · [All operations](https://skmtc.dev/whoisgeni/apis/whoisgenius/llms.txt) · [OpenAPI document](https://skmtc.dev/whoisgeni/apis/whoisgenius/revisions/707f1c34f6b3?raw)
