Справочник API
Эндпоинты, форматы ответов и ошибки HTTP для запросов одного IP.
Эндпоинты
https://api.ipquery.ioБез API-ключаIP вызывающего клиента
/По умолчанию: text/plainВозвращает адрес, с которого сделан запрос. Вызов fetch в браузере определяет соединение браузера, а серверный fetch определяет соединение сервера.
curl --fail --silent --show-error --max-time 5 \
"https://api.ipquery.io/?format=json"Один IP
/:ipПо умолчанию: application/jsonУкажите один адрес IPv4 или IPv6 в пути. Результат описывает этот адрес независимо от соединения вызывающего клиента.
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"Используйте HTTPS. Добавьте ?format=json если приложению нужен структурированный результат для собственного IP.
Форматы ответа
Задайте параметр format запроса, чтобы выбрать представление ответа.
- JSON
?format=jsonapplication/json- XML
?format=xmlapplication/xml- YAML
?format=yamlapplication/x-yaml- Текст
?format=texttext/plain
Текстовый формат возвращает только адрес. JSON, XML и YAML возвращают структурированный результат запроса.
Ошибки и массовые запросы
Проверяйте HTTP-статус перед чтением успешного результата. Формат тела ошибки определяется поддерживаемым значением параметра format запроса; при отсутствующем или неподдерживаемом формате возвращается обычный текст.
Недопустимый адрес
HTTP 404Проверьте синтаксис адреса. Путь принимает один адрес IPv4 или 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"}Неподдерживаемый формат
HTTP 400Используйте json, xml, yaml или text. API не поддерживает формат ответа CSV.
curl -i "https://api.ipquery.io/1.1.1.1?format=csv"HTTP/1.1 400 Bad Request
Content-Type: text/plain
Invalid formatМассовые запросы отключены
HTTP 400Для посетителя используйте эндпоинт собственного IP либо запрашивайте один адрес. Повтор того же массового запроса не включит эту возможность.
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>."}Обработка неудачного запроса
GET-запросы браузера поддерживают доступ между разными источниками. При сетевом сбое отклоняется промис fetch; ошибка HTTP при этом всё равно возвращает ответ. Проверяйте response.ok перед разбором 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);Тайм-аут или ответ 5xx не является IP-записью. Явно сохраняйте состояние недоступности и ограничивайте повторные попытки. Тело ошибки вышестоящего сервиса может содержать текст или HTML, поэтому не считайте любой ответ JSON.
При отсутствии исходных данных строки могут быть пустыми. Флаг false означает отсутствие совпадения, а не заключение о безопасности. Открыть определения полей
Фактический ответ
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-03T10:24:52"
},
"risk": {
"is_mobile": false,
"is_vpn": false,
"is_tor": false,
"is_proxy": false,
"is_datacenter": true,
"risk_score": 20
}
}