IPLookInfo

Documentatie IP-geolocatie-API

Gratis JSON-API voor IP-geolocatie, ASN- en risicogegevens. IPv4 en IPv6, HTTPS, CORS ingeschakeld.

Snel aan de slag

Je hoeft je niet te registreren om het te proberen. Roep het endpoint hieronder zonder key aan om gegevens over je eigen IP te krijgen (maximaal 100 verzoeken per dag).

curl https://iplookinfo.com/json

Authenticatie

Maak een gratis API-key aan in het dashboard en stuur die mee in de Authorization-header. Een token-queryparameter werkt ook voor snelle tests, maar vermijd die in productie omdat URL's in logs terechtkomen.

Authorization: Bearer ipl_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Endpoints

GET/api/v1/{ip}
Zoek een willekeurig IPv4- of IPv6-adres op.
GET/api/v1/me
Zoek het eigen IP van de aanroeper op. Ook beschikbaar via /json.
POST/api/v1/batch
Zoek tot 10.000 IP's op in één verzoek (betaalde abonnementen). Elk IP telt als één verzoek.

Queryparameters

lang — Taal voor plaatsnamen: en, zh, es, pt, ru, ja. Standaard en.

Respons

Het risk-object wordt alleen meegestuurd bij de Pro- en Business-abonnementen.

{
  "ip": "8.8.8.8",
  "version": "IPv4",
  "type": "unicast",
  "bogon": false,
  "network": "8.8.8.0/24",
  "continent": { "code": "NA", "name": "North America" },
  "country": { "code": "US", "name": "United States", "is_eu": false },
  "region": null,
  "city": null,
  "postal": null,
  "location": { "latitude": 37.751, "longitude": -97.822, "accuracy_radius_km": 1000, "time_zone": "America/Chicago" },
  "asn": { "asn": 15169, "name": "Google LLC", "domain": "google.com", "route": "8.8.8.0/24" },
  "isp": { "name": "Google", "organization": "Google", "is_mobile": false, "mobile_country_code": null, "mobile_network_code": null },
  "risk": { "score": 60, "is_tor": false, "is_vpn": false, "is_datacenter": true, "provider": "Google Cloud" }
}

Rate limits en fouten

Elke respons bevat de headers X-RateLimit-Limit, X-RateLimit-Remaining en X-RateLimit-Reset. Quota worden om 00:00 UTC gereset.

Fouten gebruiken een consistente JSON-structuur met een HTTP-statuscode:

HTTP/1.1 429 Too Many Requests

{ "error": { "code": "quota_exceeded", "message": "..." } }
  • 400 invalid_ip / bad_request
  • 401 invalid_key
  • 403 plan_required
  • 413 too_many
  • 429 rate_limited / quota_exceeded

Overgebruik

Betaalde abonnementen kunnen overgebruik inschakelen in het dashboard. Verzoeken boven het dagelijkse quotum worden dan verwerkt en per 1.000 gefactureerd, tot een maandelijkse uitgavenlimiet die je zelf kiest. Zulke responses bevatten een X-Overage-Units-header.

Codevoorbeelden

cURL

curl -H "Authorization: Bearer $IPLOOKINFO_KEY" https://iplookinfo.com/api/v1/8.8.8.8

# Batch (paid plans)
curl -X POST -H "Authorization: Bearer $IPLOOKINFO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ips":["8.8.8.8","1.1.1.1"]}' https://iplookinfo.com/api/v1/batch

JavaScript

const res = await fetch("https://iplookinfo.com/api/v1/8.8.8.8", {
  headers: { Authorization: `Bearer ${process.env.IPLOOKINFO_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();
console.log(data.country?.code, data.city);

Python

import os, requests

r = requests.get(
    "https://iplookinfo.com/api/v1/8.8.8.8",
    headers={"Authorization": f"Bearer {os.environ['IPLOOKINFO_KEY']}"},
    timeout=5,
)
r.raise_for_status()
data = r.json()
print(data["country"]["code"], data["asn"]["name"])

PHP

$ctx = stream_context_create(["http" => [
    "header" => "Authorization: Bearer " . getenv("IPLOOKINFO_KEY"),
]]);
$data = json_decode(file_get_contents("https://iplookinfo.com/api/v1/8.8.8.8", false, $ctx), true);
echo $data["country"]["code"];

Go

req, _ := http.NewRequest("GET", "https://iplookinfo.com/api/v1/8.8.8.8", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("IPLOOKINFO_KEY"))
resp, err := http.DefaultClient.Do(req)
if err != nil { log.Fatal(err) }
defer resp.Body.Close()
var data map[string]any
json.NewDecoder(resp.Body).Decode(&data)