validkit

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 / versionSyntactically valid IPv4 or IPv6.
is_bogonAddress 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_hostingThe address belongs to a datacenter/cloud operator. True/false when known; null when it couldn't be determined.
privacy.is_vpn / is_proxy / is_torTrue/false when our upstream can answer; null when it can't. We return null rather than a fabricated false.
risk_score0–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.