analysis

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.

post/analyze

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

waitboolean

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

X-API-Keystring nullable
X-LLM-API-Keystring nullable
X-LLM-Providerstring nullable

Request body

domainstring required

Domain name to analyze (ASCII or internationalized).

display_domainstring

Original IDN form of the domain (populated internally).

depth'deep' | 'quick'

Analysis depth. 'deep' (default) queues the full async pipeline (all collectors, vision, LLM enrichment, metered third-party enrichment) and returns 202 + job_id for polling. 'quick' runs the fast collector subset (dns/whois/http_probe/asn/rdns) inline under a hard deadline and returns 200 with the terminal result plus job_id; it never runs vision/LLM/reverse-WHOIS/metered enrichment. 'quick' cannot be combined with force_refresh or wait=true (400).

force_refreshboolean
callback_urlstring nullable

Optional URL to receive a webhook POST when analysis completes

output_schemastring uuid nullable

Template ID for response projection (mutually exclusive with output_fields)

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)

metaobject nullable

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.