Riferimento dell’API
Endpoint, formati di risposta ed errori HTTP per ricerche su un singolo IP.
Endpoint
https://api.ipquery.ioSenza chiave APIIP del chiamante
/Predefinito: text/plainRestituisce l’indirizzo che effettua la richiesta. Un fetch dal browser identifica la connessione del browser; un fetch lato server identifica quella del server.
curl --fail --silent --show-error --max-time 5 \
"https://api.ipquery.io/?format=json"Un singolo IP
/:ipPredefinito: application/jsonInserisci un indirizzo IPv4 o IPv6 nel percorso. Il risultato descrive quell’indirizzo, indipendentemente dalla connessione del chiamante.
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"Usa HTTPS. Aggiungi ?format=json quando l’applicazione richiede un risultato strutturato per il proprio IP.
Formati di risposta
Imposta il parametro format della query per scegliere la rappresentazione della risposta.
- JSON
?format=jsonapplication/json- XML
?format=xmlapplication/xml- YAML
?format=yamlapplication/x-yaml- Testo
?format=texttext/plain
Il testo restituisce solo l’indirizzo. JSON, XML e YAML restituiscono il risultato strutturato della ricerca.
Errori e ricerche multiple
Verifica lo stato HTTP prima di leggere un risultato valido. Il corpo degli errori segue un valore riconosciuto del parametro format della query; se il formato è omesso o non supportato, viene restituito testo semplice.
Indirizzo non valido
HTTP 404Verifica la sintassi dell’indirizzo. Il percorso accetta un solo indirizzo IPv4 o 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"}Formato non supportato
HTTP 400Usa json, xml, yaml o text. CSV non è un formato di risposta dell’API.
curl -i "https://api.ipquery.io/1.1.1.1?format=csv"HTTP/1.1 400 Bad Request
Content-Type: text/plain
Invalid formatRicerca multipla disabilitata
HTTP 400Per un visitatore usa l’endpoint del proprio IP oppure cerca un singolo indirizzo. Ripetere la stessa richiesta multipla non la abiliterà.
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>."}Gestisci una richiesta non riuscita
Le richieste GET dal browser consentono l’accesso tra origini diverse. Un errore di rete rifiuta la Promise restituita da fetch; un errore HTTP restituisce comunque una risposta. Verifica response.ok prima di analizzare il 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 timeout o una risposta 5xx non è un record IP. Mantieni uno stato esplicito di indisponibilità e limita i tentativi. Il corpo di un errore del servizio a monte può essere testo o HTML, quindi non presumere che ogni risposta contenga JSON.
Le stringhe assenti nei dati di origine possono essere vuote. Un indicatore false segnala una mancata corrispondenza, non un giudizio di sicurezza. Leggi le definizioni dei campi
Risposta reale
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-02T23:07:35"
},
"risk": {
"is_mobile": false,
"is_vpn": false,
"is_tor": false,
"is_proxy": false,
"is_datacenter": true,
"risk_score": 20
}
}