Skip to main content
POST
Synchronous endpoint Assess the threat-intelligence risk of a domain or URL. Optionally add a liveness check that asks whether a visitor would see usable content.
This endpoint analyzes domains and URLs, so it does not accept chain_id.
HashDit-owned request fields are documented in snake_case. Equivalent camelCase input remains accepted for compatibility.

Quick Start

The minimum request sends only url.

Request Fields

string
required
Your HashDit API key. Missing keys return HTTP 401; a legacy gateway can return 403 for a rejected key. Keep the key on a trusted server.
string
required
Domain or URL to analyze. A scheme, path, and query string are accepted and normalized.
boolean
default:"false"
Add a usable-content availability check. This increases latency.
string
default:"lenient"
How to interpret a check blocked by bot protection: lenient, strict, or evidence.

Response Fields

string
required
API result code. "0" indicates success; non-zero values indicate an error.
string
required
Request status. A successful completed response returns "ok".
string
Unique request identifier to include in support requests.
boolean
Whether a domain risk result was immediately available.
number
Seconds to wait before retrying when has_result is false; otherwise 0.
integer
Numeric threat-intelligence risk level.
string
Human-readable risk label.
object[]
Triggered threat-intelligence indicators. Use each item’s name for application logic.
string
alive, dead, or unknown when liveness_check was requested and a result is available.
object
Availability status, policy, observed HTTP status, and scan timestamp.
The availability result is per host, so URLs sharing a host share one availability answer. accessible asks whether a visitor would see usable content; a working server alone is not sufficient. liveness maps from liveness_detail.status: accessible → alive, not_accessible → dead, and unknown when no determination is available or the policy is evidence.
Absence is not negative. If the check could not run, liveness and liveness_detail are omitted. Treat a missing field as “no answer”, never as “not accessible”.

How to Use the Response

  • Use risk_level and risk_name for the top-level domain decision.
  • Use risk_detail[].name for application logic and value for user-facing context.
  • If you request liveness, treat it as an availability signal independent from risk_level.
  • A low risk result is a point-in-time threat-intelligence assessment, not a guarantee that every path or future page is safe.

Risk Level Reference

Choosing a Liveness Policy

liveness_policy resolves one uncertainty: the check was blocked and cannot tell whether a visitor would have been. Definite observations such as 404, a sale placeholder, or a domain that does not resolve are read the same under every policy. Changing this policy never changes risk_level. A bot-protected site can return the same http_status: 403 under both policies while the availability interpretation differs.

Latency and Cache Age

liveness_check: false is the fast path. A liveness check adds latency; a recently checked host normally answers quickly, while a new host can return unknown as the result is prepared in the background. A later request can then use the cached result. Results are cached per host. last_scanned_at describes when the availability check ran, not when the current API response was generated. Apply your own freshness threshold when needed.

Limits

  • The availability answer is per host, not per path.
  • A block against automated checks cannot prove the site is blocked for a human visitor.
  • A determined site can serve different content to security infrastructure and users.
Availability is a useful signal, but should not be the only input to a security decision.

Errors and Retry Guidance

All errors use the standard code, status, and detail envelope. A liveness-check failure does not fail the risk request. The API can return HTTP 200 with the risk verdict intact and omit the two liveness fields.