Référence de l’API
Points d’accès, formats de réponse et erreurs HTTP pour les recherches d’une seule IP.
Points d’accès
https://api.ipquery.ioSans clé APIIP de l’appelant
/Par défaut : text/plainRenvoie l’adresse à l’origine de la requête. Un fetch dans le navigateur identifie sa connexion ; un fetch côté serveur identifie celle du serveur.
curl --fail --silent --show-error --max-time 5 \
"https://api.ipquery.io/?format=json"Une seule IP
/:ipPar défaut : application/jsonIndiquez une IPv4 ou IPv6 dans le chemin. Le résultat décrit cette adresse, indépendamment de la connexion de l’appelant.
curl --fail --silent --show-error --max-time 5 \
"https://api.ipquery.io/1.1.1.1"
curl --fail --silent --show-error --max-time 5 \
"https://api.ipquery.io/2606:4700:4700::1111"Utilisez HTTPS. Ajoutez ?format=json lorsque votre application a besoin d’un résultat structuré pour sa propre IP.
Formats de réponse
Définissez le paramètre format de requête pour choisir la représentation de la réponse.
- JSON
?format=jsonapplication/json- XML
?format=xmlapplication/xml- YAML
?format=yamlapplication/x-yaml- Texte
?format=texttext/plain
Le format texte renvoie uniquement l’adresse. JSON, XML et YAML renvoient le résultat structuré de la recherche.
Erreurs et recherches groupées
Vérifiez le statut HTTP avant de lire un résultat valide. Le corps des erreurs suit une valeur reconnue du paramètre format de requête ; un format omis ou non pris en charge produit du texte brut.
Adresse invalide
HTTP 404Vérifiez la syntaxe de l’adresse. Le chemin accepte une seule IPv4 ou IPv6.
curl -i "https://api.ipquery.io/not-an-ip?format=json"HTTP/1.1 404 Not Found
Content-Type: application/json
{"error":"IP address not-an-ip not found"}Format non pris en charge
HTTP 400Utilisez json, xml, yaml ou text. CSV n’est pas un format de réponse de l’API.
curl -i "https://api.ipquery.io/1.1.1.1?format=csv"HTTP/1.1 400 Bad Request
Content-Type: text/plain
Invalid formatRecherche groupée désactivée
HTTP 400Utilisez le point d’accès de sa propre IP pour un visiteur, ou recherchez une seule adresse. Répéter la même requête groupée ne l’activera pas.
curl -i "https://api.ipquery.io/1.1.1.1,8.8.8.8?format=json"HTTP/1.1 400 Bad Request
Content-Type: application/json
{"error":"Bulk lookups are disabled due to abuse. For your own IP, embed fetch(\"https://api.ipquery.io/?format=json\") in your app, or use a single-IP lookup at https://api.ipquery.io/<ip>."}Gérer une requête en échec
Les requêtes GET du navigateur autorisent l’accès interorigines. Une erreur réseau rejette la promesse de fetch; une erreur HTTP renvoie néanmoins une réponse. Vérifiez response.ok avant d’analyser le JSON.
const response = await fetch(
"https://api.ipquery.io/1.1.1.1?format=json",
{ signal: AbortSignal.timeout(5000) }
);
if (!response.ok) {
const message = await response.text();
throw new Error("IPQuery " + response.status + ": " + message);
}
const data = await response.json();
console.log(data.ip);Un délai d’attente dépassé ou une réponse 5xx n’est pas un enregistrement IP. Conservez un état explicite d’indisponibilité et limitez les nouvelles tentatives. Le corps d’une erreur en amont peut être du texte ou du HTML ; ne supposez donc pas que chaque réponse contient du JSON.
Les chaînes absentes dans la source peuvent être vides. Un indicateur false signifie une absence de correspondance, pas un verdict de sécurité. Lire les définitions des champs
Réponse réelle
1.1.1.1{
"ip": "1.1.1.1",
"isp": {
"asn": "AS13335",
"org": "Cloudflare, Inc.",
"isp": "Cloudflare, Inc."
},
"location": {
"country": "Australia",
"country_code": "AU",
"city": "Brisbane",
"state": "Queensland",
"zipcode": "",
"latitude": -27.474848400186662,
"longitude": 153.00996200912815,
"timezone": "Australia/Brisbane",
"localtime": "2026-11-03T14:32:36"
},
"risk": {
"is_mobile": false,
"is_vpn": false,
"is_tor": false,
"is_proxy": false,
"is_datacenter": true,
"risk_score": 20
}
}