IP validation
Format validation, bogon/reserved-range detection, geolocation (country, city, ASN, operator), datacenter detection, and a transparent risk heuristic. IPv4 and IPv6. 1 credit per lookup.
Request
POST /api/v1/validate/ip
Authorization: Bearer vk_live_...
Content-Type: application/json
{"ip": "8.8.8.8"}Response
{
"success": true,
"result": {
"type": "ip",
"input": "8.8.8.8",
"valid": true,
"version": 4,
"is_bogon": false,
"geo": {
"country": "US",
"country_name": "United States",
"region": "California",
"city": "Mountain View",
"latitude": 37.405,
"longitude": -122.078,
"timezone": "America/Los_Angeles",
"asn": "AS15169",
"org": "Google LLC"
},
"privacy": { "is_hosting": true, "is_vpn": null, "is_proxy": null, "is_tor": null },
"risk_score": 40,
"confidence": "medium",
"checks": { "syntax": "pass", "bogon": "pass", "geo_lookup": "pass" },
"notes": ["VPN/proxy/Tor status could not be verified on this lookup; ..."]
},
"credits": { "used": 1, "remaining": 499 }
}Field guide
| valid / version | Syntactically valid IPv4 or IPv6. |
| is_bogon | Address sits in a reserved range (private, loopback, link-local, documentation, multicast…) and cannot appear on the public internet. Checked locally — always authoritative. |
| geo.* | Country, region, city, coordinates, timezone, ASN, and network operator from our geolocation upstream. |
| privacy.is_hosting | The address belongs to a datacenter/cloud operator. True/false when known; null when it couldn't be determined. |
| privacy.is_vpn / is_proxy / is_tor | True/false when our upstream can answer; null when it can't. We return null rather than a fabricated false. |
| risk_score | 0–100 transparent heuristic (documented below) — not a machine-learning fraud model. null when geo lookup failed. |
How risk_score works
It's an additive heuristic, published here so you can decide whether it fits your threat model: base 5, +35 if the address belongs to a hosting/datacenter network, +30 if VPN, +35 if proxy, +45 if Tor (capped at 100). Signals that come back null contribute nothing — a risk_score of 5 with three nulls is weaker evidence than a 5 with three explicit falses, and the privacyobject lets you tell the difference. If you need adversarial-grade fraud scoring, use a dedicated provider; if you need "is this signup coming from a datacenter in another country", this is plenty.
Try it
Live request against the real engine — no signup needed. Rate-limited; sign up for 500 free credits.