IPLookInfo

Documentation de l’API de géolocalisation IP

API JSON gratuite pour la géolocalisation IP, les données ASN et de risque. IPv4 et IPv6, HTTPS, CORS activé.

Démarrage rapide

Aucune inscription n’est nécessaire pour l’essayer. Appelez le point de terminaison ci-dessous sans clé pour obtenir les données de votre propre IP (limité à 100 requêtes par jour).

curl https://iplookinfo.com/json

Authentification

Créez une clé API gratuite dans le tableau de bord et envoyez-la dans l’en-tête Authorization. Un paramètre de requête token fonctionne aussi pour des tests rapides, mais évitez-le en production, car les URL finissent dans les journaux.

Authorization: Bearer ipl_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Points de terminaison

GET/api/v1/{ip}
Rechercher n’importe quelle adresse IPv4 ou IPv6.
GET/api/v1/me
Rechercher l’IP de l’appelant. Également disponible sur /json.
POST/api/v1/batch
Rechercher jusqu’à 10 000 IP en une seule requête (offres payantes). Chaque IP compte comme une requête.

Paramètres de requête

lang — Langue des noms de lieux : en, zh, es, pt, ru, ja. Par défaut : en.

Réponse

L’objet risk n’est inclus que dans les offres Pro et 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" }
}

Limites de débit et erreurs

Chaque réponse contient les en-têtes X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset. Les quotas sont réinitialisés à 00:00 UTC.

Les erreurs utilisent un format JSON cohérent avec un code de statut 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

Dépassement

Les offres payantes peuvent activer le dépassement dans le tableau de bord. Les requêtes au-delà du quota quotidien sont alors traitées et facturées par tranche de 1 000, dans la limite d’un plafond de dépenses mensuel que vous choisissez. Ces réponses contiennent un en-tête X-Overage-Units.

Exemples de code

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)