Документация API

Данные публичного IPv4 или IPv6 со своего сервера за три шага. Начало работы · Создать ключ API

Скачать спецификацию OpenAPI

Ваш первый запрос API

curl --get 'https://www.geoipy.com/api/IPsInfo' \
  --data-urlencode 'ip=8.8.8.8' \
  --header 'X-API-Key: YOUR_API_KEY'

Используйте HTTPS и X-API-Key. Ключ в URL может попасть в журналы. Разные ключи в заголовке и URL дают HTTP 400.

Создайте ключ на панели. Он показывается полностью один раз. Храните в закрытых настройках сервера, не в браузерном коде или открытом репозитории. Замена сразу отключает старый ключ. Отзыв или истечение блокирует новые запросы; принятые могут завершиться.

Ответ и актуальность

HTTP 200 возвращает JSON. Пример сокращён; поля зависят от данных поставщика.

{
  "ip": "8.8.8.8",
  "type": "ipv4",
  "country_code": "US"
}

Свежесть кеша по умолчанию — 12 часов. X-Data-Fetched-At — время получения UTC. При сбое обновления просроченные данные не выдаются; время получения не означает возраст данных.

X-Request-ID помогает поддержке найти запрос. Геолокация — примерное положение сети, а не точное местоположение человека.

Использование и повторы

Успешные запросы, включая кеш, расходуют лимит. Текущие резервируют его, ошибки освобождают. Сброс — 1-го числа в 00:00 UTC. Смена тарифа или ключа не сбрасывает расход.

Для HTTP 429 и временных 503/504 учитывайте Retry-After и ограничьте повторы с растущей задержкой. Сначала исправьте неверные данные или ключи.

Ошибки

Ошибки возвращают application/json со статусом ошибки HTTP. Идентификаторы API и примеры сохраняют документированную форму.

{
  "success": false,
  "error": {
    "code": 104,
    "type": "usage_limit_reached",
    "info": "The monthly API allowance has been reached."
  }
}
Ошибки
КодТипЗначение
101invalid_access_keyКлюч отсутствует, истёк, отозван или неверен (HTTP 401).
104usage_limit_reachedМесячный лимит исчерпан с учётом текущих запросов (HTTP 429).
105rate_limit_reachedПревышена частота; учитывайте Retry-After (HTTP 429).
106invalid_ip_addressУкажите публичный IPv4 или IPv6 (HTTP 400).
202upstream_failureСбой поставщика или неверные данные (HTTP 502).
503lookup_unavailableСервис, хранилище лимитов или обновление временно недоступны (HTTP 503).
504upstream_timeoutВремя ожидания поставщика истекло (HTTP 504).

Серверные примеры

JavaScript · сервер

const url = new URL('https://www.geoipy.com/api/IPsInfo');
url.searchParams.set('ip', '8.8.8.8');
const response = await fetch(url, {
  headers: { 'X-API-Key': process.env.GEOIPY_API_KEY }
});
const data = await response.json();
if (!response.ok) throw new Error(data.error.info);
console.log(data);

C#

using (var client = new System.Net.Http.HttpClient())
{
    client.DefaultRequestHeaders.Add("X-API-Key",
        System.Environment.GetEnvironmentVariable("GEOIPY_API_KEY"));
    var response = await client.GetAsync(
        "https://www.geoipy.com/api/IPsInfo?ip=8.8.8.8");
    var json = await response.Content.ReadAsStringAsync();
    // Inspect response.StatusCode and parse json before retrying.
}

Python

import os, requests
response = requests.get(
    'https://www.geoipy.com/api/IPsInfo',
    params={'ip': '8.8.8.8'},
    headers={'X-API-Key': os.environ['GEOIPY_API_KEY']},
    timeout=15)
data = response.json()
response.raise_for_status()

PHP

$url = 'https://www.geoipy.com/api/IPsInfo?' . http_build_query(['ip' => '8.8.8.8']);
$ch = curl_init($url);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15,
    CURLOPT_HTTPHEADER => ['X-API-Key: ' . getenv('GEOIPY_API_KEY')]]);
$json = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($json === false) { throw new RuntimeException('The request failed.'); }
curl_close($ch);
$data = json_decode($json, true);
// Inspect $status and $data['error'] when the status is not 200.

Для помощи отправьте ID запроса и примерное время UTC. Ключи API держите в секрете. support-geoipy@rumex.bh