iprisq API

A scoring service for IP addresses. Send an address, get back an abuse score, a recommendation your application can act on, and the signals that produced it.

Quickstart

Every response is scored by our own model. You are not querying a database of somebody else's fields — you are asking for a judgement.

# is this address safe to let through?
curl "https://iprisq.com/v1/score/185.220.101.1?key=YOUR_KEY"
{
  "ip": "185.220.101.1",
  "abuse_score": 84,
  "trust_score": 16,
  "risk_band": "critical",
  "recommendation": "block",
  "assurance": 92,
  "usage_class": "anonymiser_tor",
  "signals": [
    { "code": "detection_tor", "label": "Tor exit node", "impact": 41.4 },
    { "code": "attack_history", "label": "Attacks observed from this address", "impact": 6 }
  ]
}

Authentication

Pass your key any of three ways. Keys are secret — keep them server-side.

?key=YOUR_KEY
X-API-Key: YOUR_KEY
Authorization: Bearer YOUR_KEY

Score an address

GET /v1/score/{address}

Scores one IPv4 or IPv6 address. Omit the address to score the caller's own. Costs one query.

ParameterDescription
policystrict, balanced (default) or lenient — see Risk policies.

Score in batches

POST /v1/score

Up to 100 addresses per request. Each address costs one query, and the batch is all-or-nothing against your remaining allowance. Invalid and private addresses come back with an error instead of a score, and still cost nothing extra.

curl -X POST "https://iprisq.com/v1/score?key=YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ips": ["8.8.8.8", "185.220.101.1"]}'

Score fields

FieldMeaning
abuse_score0–100. How much risk this address carries right now.
trust_score100 − abuse_score, for when a positive framing reads better.
risk_bandminimal low moderate high critical
recommendationallow, challenge or block, under the policy you asked for.
assurance0–100. How much weight to put on the verdict, given how recently and how confidently the behaviour was observed. A high score with low assurance deserves a challenge rather than a block.
usage_classconsumer, business, datacenter, mobile, anonymiser_tor, anonymiser_vpn, anonymiser_proxy, compromised_host, automation, unclassified.
fraud_indicatorsPlain booleans to branch on without reading a score.
signals[]Every factor that moved the score, with its numeric impact. Positive adds risk, negative removes it.
contextASN, provider, network type and country — enough to make sense of the score.
score_versionIncrements when the model changes. Pin it if you have tuned thresholds against a version.

Risk policies

The score is the same for everyone; the thresholds applied to it are yours to choose. A bank blocks what a forum tolerates.

PolicyChallenge atBlock atSuits
strict2550Payments, account takeover, anything with chargebacks
balanced4060Signups, trials, general abuse prevention
lenient5580Content platforms where false positives cost more than abuse

Limits & errors

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds until 00:00 UTC).

StatusMeaning
401Missing, unknown or deactivated key.
400Malformed address, unknown policy, or a batch over the size limit.
429 rate_limitedOver your plan's per-second ceiling. Retry after a second.
429 quota_exceededDaily allowance spent. Resets at 00:00 UTC.
502We could not score the address. Nothing is invented — retry or treat as unknown.

Refused requests never consume quota, so a burst of 429s costs you nothing.