Skip to main content

Reputation API

The v2 Reputation API returns urlquery's verdict for a URL and exports reputation indicators for use in your own blocklists and detections.

All routes are on https://api.urlquery.net and require x-apikey.

MethodPathQuota classResult
POST/public/v2/reputation/lookupreputation_lookupVerdict for one URL.
GET/public/v2/reputation/exportreputation_exportNDJSON download of reputation indicators. Requires the reputation_export capability.

Every call also consumes the account's overall v2 quota.

Treat reputation as one signal. A missing or clean result does not prove that an indicator is benign.

Look up a URL​

POST /public/v2/reputation/lookup

Send one URL in a JSON body of at most 1 MiB; unknown fields are rejected with 400 BAD_REQUEST. The lookup evaluates exact URL and FQDN reputation over the last 30 days and returns the stronger verdict. Registrable-domain reputation is not applied, and the URL result wins ties. For an IP-hosted URL, only the exact URL verdict is considered.

curl --fail-with-body --request POST \
--header "x-apikey: ${URLQUERY_API_KEY}" \
--header 'content-type: application/json' \
--data '{"url":"https://example.com/path"}' \
https://api.urlquery.net/public/v2/reputation/lookup
{
"success": true,
"data": {
"input": "https://example.com/path",
"verdict": "suspicious",
"applied_to": "fqdn"
}
}
FieldMeaning
inputThe submitted URL, unchanged.
verdictmalicious, suspicious, benign, or unknown.
applied_tourl or fqdn: which exact result supplied the verdict.

Export indicators​

GET /public/v2/reputation/export

The export returns indicators with urlquery evidence in the selected window as a reputation-indicators.jsonl download. It is not wrapped in the v2 success envelope. A limited number of exports can run at the same time for each account.

ParameterValues
timeframeA positive number followed by h or d, or all; defaults to 30d.
as_ofRFC3339 timestamp the export is evaluated at; defaults to the request time.
typeRepeat to select indicator types: url, fqdn, domain, ip, or sha256. Defaults to all types.
detectorOptional. Only urlquery is accepted; other values return 400 BAD_REQUEST.
curl --fail-with-body \
--header "x-apikey: ${URLQUERY_API_KEY}" \
--header 'accept: application/x-ndjson' \
--output reputation-indicators.jsonl \
'https://api.urlquery.net/public/v2/reputation/export?timeframe=30d&type=url&type=domain'

The first line has kind=meta, declares the schema reputation-indicator-export/v2, and lists "detectors":["urlquery"]. It is followed by the declared number of kind=indicator lines:

{"kind":"indicator","data":{"type":"url","value":"example.test/login","verdict":"malicious","confidence":"high"}}

Each indicator contains its type, normalized value, verdict, and confidence (high, medium, low, or none). A complete stream ends with a matching kind=complete line containing the export ID, count, and SHA-256 digest. Exports are limited to 256 MiB of decoded data; a larger export is cut off after the 200 response has started.

Discard the download if the completion line is missing or does not match. An HTTP 200 alone does not prove that the stream completed.

Failures before the download starts use the normal v2 JSON error envelope:

StatusErrorWhen
400BAD_REQUESTas_of is not an RFC3339 timestamp, or detector is not urlquery.
400INVALID_TIMEFRAMEtimeframe is not a valid window, or as_of is in the future.
400INVALID_INDICATORA type value is not supported.
400RETENTION_WINDOW_EXCEEDEDThe window starts before the retained data.
401MISSING_API_KEYNo x-apikey header.
403INVALID_API_KEYThe key is invalid or disabled.
403FORBIDDENThe account lacks the reputation_export capability.
422EXPORT_TOO_LARGEThe selection has more indicators than one export allows. Narrow timeframe or type.
429RATE_LIMIT_EXCEEDEDThe quota, or the limit on concurrent exports, is reached. Wait Retry-After seconds.
502, 504BAD_GATEWAY, GATEWAY_TIMEOUTThe reputation service failed, returned an invalid response, or timed out. Retry later.
503RATE_LIMIT_UNAVAILABLEQuota enforcement is temporarily unavailable. Retry later.