Публичная версия документации с фокусом на практическую интеграцию: endpoint, параметры запросов, структура ответа, антифрод-поля, коды ошибок и примеры использования в реальных сценариях. Материалы синхронизированы с документацией в кабинете, но без приватных значений ключей.
| Geo enrichment | geo.country_enrichment включает метаданные страны, TLD, языки, валюту и контекст курсов. |
| Antifraud insights | antifraud.advanced_insights включает поведенческие и риск-сигналы для auth/signup/checkout-сценариев. |
| Фильтрация полей | fields и crypto уменьшают payload и ускоряют обработку ответа. |
| URL | https://apigeoip.ru/api/ |
| Метод | GET |
| Content-Type | application/json; charset=utf-8 |
| Авторизация | Authorization: Bearer YOUR_API_KEY |
| Параметр | Обязателен | Тип | Описание |
|---|---|---|---|
ip | Да | string | Целевой IPv4 или IPv6 адрес. |
user_id | Да | string | Стабильный идентификатор пользователя/сессии для поведенческой корреляции antifraud. |
ua | Нет | string | User-Agent. Если не передан, может быть использован из заголовков запроса. |
fields | Нет | string | Фильтр полей по dot-path: geo.country,antifraud.risk_score. |
crypto | Нет | string | Фильтр для geo.country_enrichment.rates.crypto. Разрешены: BTC,ETH,BNB,TON. |
| Правило | Детали |
|---|---|
| По умолчанию | Если fields не указан, возвращается полный ответ в рамках доступного тарифа. |
| Формат путей | Используйте dot-notation: geo.country, geo.country_enrichment.tld, antifraud.risk_score. |
| Ограничения тарифа | Если часть полей недоступна по тарифу, API вернет доступный поднабор и access.missing_fields. |
| Crypto-фильтр | Используйте crypto для ограничения вложенного блока курсов вместо запроса полного объекта. |
curl -G "https://apigeoip.ru/api/" \ --data-urlencode "ip=8.8.8.8" \ --data-urlencode "user_id=user_001" \ --data-urlencode "fields=geo.country,antifraud.risk_score" \ -H "Authorization: Bearer YOUR_API_KEY"
curl -G "https://apigeoip.ru/api/" \ --data-urlencode "ip=8.8.8.8" \ --data-urlencode "user_id=user_001" \ --data-urlencode "fields=geo.country,geo.country_enrichment.rates" \ --data-urlencode "crypto=BTC,ETH" \ -H "Authorization: Bearer YOUR_API_KEY"
curl -G "https://apigeoip.ru/api/" \ --data-urlencode "ip=8.8.8.8" \ --data-urlencode "user_id=user_001" \ --data-urlencode "fields=antifraud.risk_score,antifraud.confidence,antifraud.signals" \ -H "Authorization: Bearer YOUR_API_KEY"
Если часть запрошенных путей недоступна по тарифу, API вернет доступные поля и блок access.missing_fields.
Authorization: Bearer YOUR_API_KEY
Передавайте API-ключ только в заголовке Authorization. Ключ в query string не поддерживается.
user_id| Источник | Пример |
|---|---|
| Внутренний аккаунт | usr_15293 |
| Платежный/биллинг профиль | billing_9fa2d11 |
| Хеш логина/email | sha256:8f2f...ab1e |
| Анонимный cookie id | anon_7f3a2c9a1e44b2d0 |
user_idfunction getOrCreateUserId() {
const key = 'gid_uid';
const found = document.cookie.split('; ').find(v => v.startsWith(key + '='));
if (found) return decodeURIComponent(found.split('=')[1]);
const uid = 'anon_' + crypto.randomUUID().replace(/-/g, '').slice(0, 16);
document.cookie = `${key}=${encodeURIComponent(uid)}; Max-Age=31536000; Path=/; SameSite=Lax`;
return uid;
}
{
"status": "ok",
"error_code": 0,
"http_status": 200,
"ip": "8.8.8.8",
"ua": "Mozilla/5.0 ...",
"user_id": "usr_15293",
"subscription_type": "geo",
"geo": {
"city": {"name": "Mountain View"},
"country": {"iso_code": "US", "name": "United States"},
"location": {"latitude": 37.4056, "longitude": -122.0775},
"timezone": "America/Los_Angeles",
"country_enrichment": {
"tld": ".us",
"currency": {"code": "USD"},
"rates": {"currency_code": "USD", "units_per_usd": 1}
}
}
}
{
"status": "ok",
"error_code": 0,
"http_status": 200,
"subscription_type": "antifraud",
"geo": {...},
"asn": {"asn": 15169, "org": "Google LLC"},
"ptr": "dns.google",
"antifraud": {
"risk_score": 42,
"proxy_suspected": false,
"confidence": 0.7,
"signals": ["ASN:heuristic"],
"advanced_insights": {
"impossible_travel": {"is_detected": false},
"business_hours_mismatch": {"is_mismatch": false},
"smart_action_hint": "allow"
}
}
}
| Path | Описание |
|---|---|
status | Статус ответа: ok или error. |
error_code | Числовой код приложения. |
http_status | HTTP-статус, дублируемый в body. |
ip | Проверенный IP-адрес. |
ua | User-Agent, использованный в анализе. |
user_id | Стабильный идентификатор из запроса. |
subscription_type | none, geo, antifraud. |
geo.city.name | Название города. |
geo.city.geoname_id | GeoNames ID города. |
geo.country.iso_code | ISO2 код страны. |
geo.country.name | Название страны. |
geo.country.geoname_id | GeoNames ID страны. |
geo.location.latitude | Широта. |
geo.location.longitude | Долгота. |
geo.location.accuracy_radius | Радиус точности геопровайдера. |
geo.timezone | IANA timezone. |
geo.postal | Почтовый индекс (если доступен). |
geo.country_enrichment.iso2 | ISO2 код. |
geo.country_enrichment.iso3 | ISO3 код. |
geo.country_enrichment.name | Отображаемое название страны. |
geo.country_enrichment.geoname_id | GeoNames ID страны. |
geo.country_enrichment.flag_emoji | Emoji флаг. |
geo.country_enrichment.flag_cdn_png_20 | URL PNG флага 20px. |
geo.country_enrichment.flag_cdn_png_40 | URL PNG флага 40px. |
geo.country_enrichment.flag_cdn_svg | URL SVG флага. |
geo.country_enrichment.calling_code | Основной телефонный код. |
geo.country_enrichment.calling_codes | Список телефонных кодов страны. |
geo.country_enrichment.capital | Столица. |
geo.country_enrichment.continent | Объект континента. |
geo.country_enrichment.tld | Национальный домен верхнего уровня. |
geo.country_enrichment.currency | Объект основной валюты. |
geo.country_enrichment.currencies | Список валют. |
geo.country_enrichment.languages | Список языков. |
geo.country_enrichment.is_in_european_union | Признак членства в ЕС (если известно). |
geo.country_enrichment.localized_names | Локализованные названия страны. |
geo.country_enrichment.enrichment_source | Маркер источника enrichment-данных. |
geo.country_enrichment.rates.currency_code | Базовый fiat-код. |
geo.country_enrichment.rates.units_per_usd | Сколько fiat-единиц в 1 USD. |
geo.country_enrichment.rates.usd_per_unit | Сколько USD в 1 fiat-единице. |
geo.country_enrichment.rates.crypto.BTC|ETH|BNB|TON.units_per_coin | Сколько fiat-единиц в 1 coin. |
geo.country_enrichment.rates.crypto.BTC|ETH|BNB|TON.coin_per_unit | Сколько coin в 1 fiat-единице. |
geo.country_enrichment.rates.crypto.BTC|ETH|BNB|TON.usd_per_coin | USD стоимость одной монеты. |
geo.country_enrichment.rates.crypto.BTC|ETH|BNB|TON.coin_per_usd | Сколько coin в 1 USD. |
geo.geo_intelligence.geo_point | Пара lat,lon. |
geo.geo_intelligence.hemisphere | Код полушария (например NW). |
geo.geo_intelligence.geohash_8 | Geohash, точность 8. |
geo.geo_intelligence.distance_from_equator_km | Расстояние до экватора. |
geo.geo_intelligence.distance_from_prime_meridian_km | Расстояние до нулевого меридиана. |
geo.geo_intelligence.map_urls.openstreetmap | URL OpenStreetMap. |
geo.geo_intelligence.map_urls.google_maps | URL Google Maps. |
geo.geo_intelligence.time.timezone | Timezone (echo). |
geo.geo_intelligence.time.current_local_time | Текущая локальная дата/время. |
geo.geo_intelligence.time.utc_offset_seconds | Смещение UTC в секундах. |
geo.geo_intelligence.time.utc_offset_hours | Смещение UTC в часах. |
geo.geo_intelligence.time.is_dst | Признак летнего времени. |
geo.geo_intelligence.time.error | Ошибка тайм-блока (если timezone невалиден). |
asn | ASN-блок (только antifraud-планы). |
ptr | PTR/DNS-блок (только antifraud-планы). |
antifraud.risk_score | Риск-скор 0..100. |
antifraud.proxy_suspected | Флаг подозрения на proxy/VPN. |
antifraud.confidence | Коэффициент уверенности. |
antifraud.signals | Список сработавших сигналов. |
antifraud.behavior | Блок поведенческих счетчиков. |
antifraud.advanced_insights.distance_to_historical_user_centroid_km | Дистанция до исторического центроида пользователя. |
antifraud.advanced_insights.distance_to_historical_user_centroid_note | Статус расчета центроида. |
antifraud.advanced_insights.location_stability_score | Оценка стабильности локации 0..100. |
antifraud.advanced_insights.impossible_travel | Блок аномалии скорости перемещения. |
antifraud.advanced_insights.business_hours_mismatch | Блок рассинхронизации по времени активности. |
antifraud.advanced_insights.country_risk_profile | Профиль fraud-нагрузки по стране. |
antifraud.advanced_insights.asn_reputation | Репутация ASN. |
antifraud.advanced_insights.network_change_anomaly | Аномалия смены сети/ASN. |
antifraud.advanced_insights.geo_consistency_with_profile | Согласованность текущего geo с профилем пользователя. |
antifraud.advanced_insights.travel_context | Сводный travel-контекст. |
antifraud.advanced_insights.ip_quality_index | Индекс качества IP 0..100. |
antifraud.advanced_insights.region_precision_level | Уровень точности региона. |
antifraud.advanced_insights.smart_action_hint | Рекомендуемое действие: allow/step_up_2fa/manual_review/block. |
antifraud.advanced_insights.source_signals | Сигналы, использованные в advanced scoring. |
access.message | Сообщение об ограничениях тарифа. |
access.required_subscription | Требуемый тариф для недоступных полей. |
access.missing_fields | Запрошенные поля, недоступные по тарифу. |
access.available_fields | Запрошенные поля, которые были возвращены. |
{
"status": "error",
"error_code": 1005,
"http_status": 401,
"message": "Invalid API key"
}
| Error Code | HTTP | Значение |
|---|---|---|
0 | 200 | Успех. |
1001 | 405 | Метод не поддерживается. Используйте GET. |
1002 | 400 | Отсутствует параметр ip. |
1003 | 400 | Некорректный формат ip. |
1004 | 401 | Отсутствует/некорректен Bearer authorization header. |
1005 | 401 | Недействительный API-ключ. |
1006 | 400 | Отсутствует параметр user_id. |
1007 | 429 | Превышен rate limit. |
1008 | 400 | Некорректный формат fields. |
1009 | 400 | Некорректный формат crypto (разрешены: BTC,ETH,BNB,TON). |
1500 | 500 | Ошибка bootstrap/runtime фреймворка. |
1501 | 500 | Внутренняя ошибка lookup/runtime. |
curl -G "https://apigeoip.ru/api/" \ --data-urlencode "ip=8.8.8.8" \ --data-urlencode "user_id=anon_7f3a2c9a1e44b2d0" \ --data-urlencode "fields=geo.country,geo.country_enrichment.tld,antifraud.risk_score" \ --data-urlencode "crypto=BTC,ETH" \ -H "Authorization: Bearer YOUR_API_KEY"
const url = new URL("https://apigeoip.ru/api/");
url.searchParams.set("ip", "8.8.8.8");
url.searchParams.set("user_id", "anon_7f3a2c9a1e44b2d0");
url.searchParams.set("fields", "geo.country,geo.country_enrichment.tld,antifraud.risk_score");
url.searchParams.set("crypto", "BTC,ETH");
const res = await fetch(url, {
headers: { Authorization: "Bearer YOUR_API_KEY" }
});
const data = await res.json();
console.log(data.antifraud?.risk_score, data.antifraud?.advanced_insights?.smart_action_hint);
$url = "https://apigeoip.ru/api/?ip=8.8.8.8&user_id=anon_7f3a2c9a1e44b2d0&fields=geo.country,geo.country_enrichment.tld,antifraud.risk_score&crypto=BTC,ETH";
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"],
]);
$response = curl_exec($ch);
curl_close($ch);
$payload = json_decode($response, true);
echo $payload["antifraud"]["risk_score"] ?? "n/a";
| Таймаут | Используйте клиентский timeout и повторяйте только временные server/network ошибки. |
| Ошибки валидации | Не ретрайте 4xx ошибки валидации/авторизации без исправления запроса. |
| Idempotency | GET endpoint идемпотентен и безопасен для контролируемой retry-стратегии. |
| Наблюдаемость | Логируйте error_code, http_status и наборы запрошенных полей для разбора инцидентов. |