Skip to content
IPOK

Developer API

Free, no auth, CORS-enabled. Just GET the endpoints โ€” JSON in, JSON out.

Endpoints

GET/api/ip?ip={ip}

Full IP check: geo, ASN, purity/risk, native IP, use-case scores, AI availability

GET/api/bgp?asn={asn}&ip={ip}

BGP routing: announced prefix, upstream/downstream ASNs (via RIPEstat)

GET/api/reverse-ip?ip={ip}

Reverse IP: domains hosted on the same IP

GET/api/batch?q={ips|cidr}

Batch lookup: location, type and risk for multiple IPs / an IPv4 CIDR at once

GET/api/cidr?q={cidr}

Block reputation: scan a whole CIDR (โ‰ค/16) against the offline DB โ€” VPN/Tor/abuse ratio + verdict (no extra requests)

GET/api/badge?ip={ip}

SVG risk badge, band-colored โ€” embeddable in READMEs / forums (?label= custom left text, ?lang=zh|en)

Example

# Full IP check: geo, ASN, purity/risk, native IP, use-case scores, AI availability
curl "https://ipok.io/api/ip?ip=1.1.1.1"

# BGP routing: announced prefix, upstream/downstream ASNs (via RIPEstat)
curl "https://ipok.io/api/bgp?asn=AS13335&ip=1.1.1.1"

# Reverse IP: domains hosted on the same IP
curl "https://ipok.io/api/reverse-ip?ip=1.1.1.1"

# Batch lookup: location, type and risk for multiple IPs / an IPv4 CIDR at once
curl "https://ipok.io/api/batch?q=1.1.1.1,8.8.8.8"

# Block reputation: scan a whole CIDR (โ‰ค/16) against the offline DB โ€” VPN/Tor/abuse ratio + verdict (no extra requests)
curl "https://ipok.io/api/cidr?q=146.70.50.0/24"

# SVG risk badge, band-colored โ€” embeddable in READMEs / forums (?label= custom left text, ?lang=zh|en)
![IP risk](https://ipok.io/api/badge?ip=1.1.1.1)

Key response fields

{
  "geo":   { "ip", "version", "country", "city", "asn", "asName", "isp", "lat", "lon" },
  "ipType":    "residential | hosting | mobile | business | unknown",
  "usageType": "isp | dual_isp | business | hosting | mobile | education | government | unknown",
  "risk":      0,
  "riskBreakdown": {                       // how the score was computed (see /methodology)
    "contributors": [{ "source", "risk", "weight" }],
    "weightedAvg": 0,
    "floors": [{ "key": "tor", "floor": 90 }],
    "final": 0
  },
  "signals":   ["proxy", "hosting", ...],
  "blocklist": { "listed": ["SpamCop"], "checked": 5 },  // DNSBL hits, IPv4 only
  "anonAsn?":  { "asn", "name", "type" },                // known VPN/proxy provider ASN
  "nativeType": "native | broadcast | unknown",
  "sharedUsers": { "range": "1-5", "quality": "good | ok | poor | unknown" },
  "scenarios":  [{ "key": "tiktok", "stars": 3, "verdict": "try" }],
  "services":   [{ "key": "chatgpt", "status": "available" }],
  "media":      [{ "key": "netflix", "status": "available" }],   // region reference, not a live unlock test
  "sources":    [{ "source": "ip-api", "risk": 10, "flags": {} }],
  "intel?":     { "asn", "company", "datacenter", "abuse" },     // ipapi.is enrichment
  "asnHistory?": [{ "asn", "firstSeen", "lastSeen" }],
  "rdap?":      { "registry", "country", "registered", "org" }   // "?" = optional, omitted when unavailable
}

Status / errors

200OK
400Bad request: invalid/private IP, missing ip/asn, etc.
502Upstream data source unavailable or timed out

Rate limits & caching

Unauthenticated calls are rate-limited to 30 requests per minute per IP to prevent abuse. If your website or application references our data and provides a backlink to ipok.io in compliance with our attribution policy, you can contact us to request a higher free quota. Otherwise, please add your own cache.

Attribution Policy

Our API is free and does not require registration. However, if you display, quote, or reference our IP risk intelligence data (such as IP type, threat scores, or VPN flags) in your public products, web pages, or research, you must prominently credit IPOK as the data source and include an active, followable HTML backlink to https://ipok.io.

Please use responsibly; add your own cache for high-volume or commercial use.