Submit domain for analysis
Submit a single domain for analysis.
Creates an analysis job and returns 202 with a job_id for polling. Deduplicates against active jobs unless force_refresh is True. An audit log entry is written in the background.
Set wait=true for a one-call flow: the request is held briefly and returns the result inline (HTTP 200) when the analysis resolves, or HTTP 202 with the job_id to poll if it is still running when the wait budget elapses.
Set depth="quick" for the honest fast path: the fast collector subset (dns/whois/http_probe/asn/rdns) runs inline under a hard deadline and the terminal result comes back as HTTP 200 (same body shape as GET /jobs/{id}, plus job_id). Quick never runs vision/LLM/reverse-WHOIS/metered third-party enrichment -- it is the fast honest answer; deep is the full one. Quick cannot be combined with wait=true or force_refresh (400), costs the same 1 credit as deep, and refunds on a failed outcome.
Quota enforcement: each query increments a monthly Redis counter. Free tier users are hard-blocked at their monthly quota (settings.quota_free). Pro/Team users exceeding quota are billed overage via Stripe metered billing. Falls back to credit deduction if overage billing unavailable.
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
- Auth: none declared
Query parameters
When true, hold the response for up to ~20 seconds and return the result inline once ready (same body as GET /jobs/{job_id}) with HTTP 200. If the analysis is still running when the wait budget is spent, return HTTP 202 with the job_id so you can poll GET /jobs/{job_id}. Default false returns 202 immediately.
Headers
Request body
Example request
{
"callback_url": "https://example.com/webhook",
"domain": "example.com",
"force_refresh": false
}Response
wait=true or depth=quick: analysis resolved inline within the request (depth=quick always answers 200 with the terminal result; wait=true answers 200 only when the job resolved inside the wait budget)
Example response
{
"data": {
"analysis_run_id": "660e8400-e29b-41d4-a716-446655440001",
"collectors_done": 3,
"collectors_total": 7,
"domain": "example.com",
"job_id": "550e8400-e29b-41d4-a716-446655440000",
"started_at": "2026-03-18T12:00:00Z",
"status": "processing"
},
"error": {
"code": "JOB_NOT_FOUND",
"message": "No job found with the given ID."
}
}Changes
No recorded changes to this operation across all 1 revision of this API.