Online API · self-hosted

IP risk profile

Give us an IP address and we return what we can currently say about its risk, together with its network and geographic ownership. Proxies, VPNs, dial-up pools, cloud phones and datacenters are the infrastructure attackers hide behind — and the traces they leave on the network can be captured.

The biggest difference from a traditional IP intelligence database: what we return is a judgement that expires, not a label that stays true forever. The same address that was a proxy last week may or may not still be one today; it depends on how old the evidence is.

Try an address →

Why permanent labels make you block the wrong people

An IP address is not a fixed asset; it moves. A residential line held by a dial-up pool today may be back with a real subscriber next week; a cloud host used as a proxy gets its address reassigned once the lease ends. Keeping a permanent “proxy” label on addresses like those stops being a defence against attackers and starts being a tax on whoever inherits the address.

So every judgement we return carries when it was last observed. The older the evidence, the lower the score; past the freshness window for that class of risk, the score reaches zero and the judgement is void. Letting conclusions expire on their own is the core design of this product.

What the score is, and what it is not

The response contains no Chinese. Place names, usage types and risk types come back as standard codes or stable slugs, so your parsing layer never has to deal with Chinese text. The code tables are below and in the API reference.

FieldWhat it means
risk.score 0–100. The freshness and strength of verifiable risk evidence, decaying as the evidence ages. It is not the probability that the address belongs to an attacker. This product gives exactly one score per address: score on /pulse/v1/ip has the same source and the same value.
risk.level high / medium / low / none, derived from risk.score. none means “we hold no currently verifiable evidence”, which is not the same as safe.
network / geo Address ownership, in the same shape as the professional tier of /pulse/v1/ip. network.asn plus a usage_type code; geo gives the continent code, ISO 3166-1 country code, coordinates and time zone. Chinese addresses additionally get subdivision (ISO 3166-2) and admin_code (GB/T 2260, six digits, down to district); everywhere else gets Latin region / city. Operator names are not returned; the machine-readable identity is asn.
evidence_state active: fresh evidence that still scores. stale: seen before, but past the freshness window with a score of zero — usable as a weak signal, not as a blocking reason on its own. none: never seen, which may mean a coverage gap.
tag_details[].last_seen When that class of evidence was last captured, as an RFC3339 timestamp with a UTC offset (e.g. 2026-08-20T10:51:05+08:00). A tag can still be present while the score has decayed to 0 — that means the evidence expired, not that the address is clean. Judge by how long ago last_seen was.
signals.* Boolean signals. hosting / mobile are derived from the network usage type and are not risks in themselves; the rest map one-to-one onto tags.

A score of 0 does not mean safe

Zero only says we hold no currently verifiable evidence — the address may genuinely be clean, or we may simply never have captured it. Read it as “nothing found”, not as “cleared”. Route on evidence_state rather than on the score alone.

Where it gets used

Signup and login risk

Bulk registration, credential stuffing and account farming nearly all need a proxy pool to rotate addresses. Check once at signup and on anomalous logins, and keep out requests that plainly come from attack infrastructure.

Promotions and ad spend

Where coupon claims, referral pushes and campaign entries come from — and where ad impressions and clicks come from. An abnormal share of datacenter and proxy addresses usually means that batch is not human.

Content and API scraping

Scrapers rotate exits across proxy pools. Routing by risk type and sharing level catches more of them, and hurts fewer real users, than rate limiting alone.

Post-incident review and arbitration

Whether a transaction should have been blocked has to be judged on the evidence available at the time. The API can score against a specified moment, so you are not holding yesterday's decision to today's conclusion.

Two ways to deploy

Online API

Usable as soon as you sign up, billed per call, with a free allowance active the same day. Suited to traffic you control, where sending lookups over the public internet is acceptable. Integration is below.

Pulse self-hosted

We deliver the entire intelligence set onto your machines and every lookup happens inside your network — we never learn which addresses you checked. The interface is identical to the online version. About Pulse self-hosted →

Integration

The same profiling capability, callable from your risk system. No registration needed to try it; sign in to create a key and raise the limit.

GEThttps://ip99.com/v1/ip/{ip}
# No key needed (anonymous allowance)
curl https://ip99.com/v1/ip/8.8.8.8

# With a key you create yourself, the allowance is per account
curl -H "X-API-Key: YOUR_KEY" https://ip99.com/v1/ip/8.8.8.8

To ask what the risk state was at a past moment (post-incident review, chargeback arbitration), use ?at= on the Pulse endpoint: GET /pulse/v1/ip/{ip}?at=2026-08-26T13:34:36Z (RFC3339, up to 30 days back; the returned computed_at is exactly the moment you asked for). The profile endpoint on this page answers for now only and does not accept at. Pulse is professional-tier only: without a professional key it answers 403 professional_required, while the free profile stays open at /v1/ip; for history, contact sales.

Response fields, allowances, error formats and the phone-number capability are all in the API reference.

Coverage and refresh

10 risk signals

Proxy, VPN, dial-up pool, hijacked shared proxy, cloud phone, serverless egress, datacenter, crawler, open-source intel and mobile network. Geolocation down to district level, with ASN.

10-second refresh

Risk data arrives incrementally within a minute and lands in seconds; the geolocation database is rebuilt daily. Every response carries a data version, so you can archive the version alongside the conclusion you acted on.

Contact sales

Higher allowances, self-hosted deployment, or a trial run against your own data — tell us the use case and the rough volume.

Open the contact form →