IPLookInfo

Documentația API de geolocalizare IP

API JSON gratuit pentru geolocalizare IP, ASN și date de risc. IPv4 și IPv6, HTTPS, CORS activat.

Pornire rapidă

Nu e nevoie de înregistrare pentru a-l încerca. Apelează endpointul de mai jos fără cheie pentru a obține datele propriului IP (limitat la 100 cereri pe zi).

curl https://iplookinfo.com/json

Autentificare

Creează o cheie API gratuită în panou și trimite-o în antetul Authorization. Un parametru de interogare token funcționează și el pentru teste rapide, dar evită-l în producție, deoarece URL-urile ajung în jurnale.

Authorization: Bearer ipl_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Endpointuri

GET/api/v1/{ip}
Caută orice adresă IPv4 sau IPv6.
GET/api/v1/me
Caută IP-ul apelantului. Disponibil și la /json.
POST/api/v1/batch
Caută până la 10.000 de IP-uri într-o singură cerere (planuri plătite). Fiecare IP contează ca o cerere.

Parametri de interogare

lang — Limba pentru numele de locuri: en, zh, es, pt, ru, ja. Implicit en.

Răspuns

Obiectul risk este inclus doar în planurile Pro și Business.

{
  "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" }
}

Limite de rată și erori

Fiecare răspuns conține antetele X-RateLimit-Limit, X-RateLimit-Remaining și X-RateLimit-Reset. Cotele se resetează la 00:00 UTC.

Erorile au o structură JSON consecventă, cu un cod de stare HTTP:

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

Depășire

Planurile plătite pot activa depășirea din panou. Cererile peste cota zilnică sunt atunci servite și facturate per 1.000, până la un plafon lunar de cheltuieli ales de tine. Aceste răspunsuri conțin antetul X-Overage-Units.

Exemple de cod

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)