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

URL de basehttps://api.ipquery.ioSans clé API

IP de l’appelant

GET/Par défaut : text/plain

Renvoie 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.

Requête
curl --fail --silent --show-error --max-time 5 \
  "https://api.ipquery.io/?format=json"

Une seule IP

GET/:ipPar défaut : application/json

Indiquez une IPv4 ou IPv6 dans le chemin. Le résultat décrit cette adresse, indépendamment de la connexion de l’appelant.

Requête
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 404

Vérifiez la syntaxe de l’adresse. Le chemin accepte une seule IPv4 ou IPv6.

Requête
curl -i "https://api.ipquery.io/not-an-ip?format=json"
HTTP 404
HTTP/1.1 404 Not Found
Content-Type: application/json

{"error":"IP address not-an-ip not found"}

Format non pris en charge

HTTP 400

Utilisez json, xml, yaml ou text. CSV n’est pas un format de réponse de l’API.

Requête
curl -i "https://api.ipquery.io/1.1.1.1?format=csv"
HTTP 400
HTTP/1.1 400 Bad Request
Content-Type: text/plain

Invalid format

Recherche groupée désactivée

HTTP 400

Utilisez 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.

Requête
curl -i "https://api.ipquery.io/1.1.1.1,8.8.8.8?format=json"
HTTP 400
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.

Vérifier le statut HTTP
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);
Erreurs de connexion et défaillances serveur

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
Réponse réelle pour une seule IP
{
  "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
  }
}

Accès aux listes complètes.

Pour les tarifs ou l’accès aux listes complètes, écrivez à contact@ipquery.io.

Liste sélectionnée
Enregistrements sélectionnés
Enregistrements dans cette liste