Документация API ApiGeoIP.ru: GeoIP, ASN, Proxy/VPN и антифрод-сигналы

APIGeoIP.RU

Платформа IP-аналитики и антифрода



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

Публичная версия документации с фокусом на практическую интеграцию: endpoint, параметры запросов, структура ответа, антифрод-поля, коды ошибок и примеры использования в реальных сценариях. Материалы синхронизированы с документацией в кабинете, но без приватных значений ключей.

Что входит в текущую версию API

Geo enrichmentgeo.country_enrichment включает метаданные страны, TLD, языки, валюту и контекст курсов.
Antifraud insightsantifraud.advanced_insights включает поведенческие и риск-сигналы для auth/signup/checkout-сценариев.
Фильтрация полейfields и crypto уменьшают payload и ускоряют обработку ответа.

Endpoint

URLhttps://apigeoip.ru/api/
МетодGET
Content-Typeapplication/json; charset=utf-8
АвторизацияAuthorization: Bearer YOUR_API_KEY

Параметры запроса

ПараметрОбязателенТипОписание
ipДаstringЦелевой IPv4 или IPv6 адрес.
user_idДаstringСтабильный идентификатор пользователя/сессии для поведенческой корреляции antifraud.
uaНетstringUser-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 для ограничения вложенного блока курсов вместо запроса полного объекта.

Примеры точечной фильтрации fields + crypto

1. Только страна + risk score

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"

2. Country enrichment + только BTC/ETH

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"

3. Узкий antifraud-профиль

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.

Авторизация (Bearer)

Authorization: Bearer YOUR_API_KEY

Передавайте API-ключ только в заголовке Authorization. Ключ в query string не поддерживается.

Как выбирать user_id

ИсточникПример
Внутренний аккаунтusr_15293
Платежный/биллинг профильbilling_9fa2d11
Хеш логина/emailsha256:8f2f...ab1e
Анонимный cookie idanon_7f3a2c9a1e44b2d0

Пример cookie-based user_id

function 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;
}

Успешный ответ (тариф geo)

{
  "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}
    }
  }
}

Успешный ответ (тариф antifraud)

{
  "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"
    }
  }
}

Полный каталог полей ответа (paths)

PathОписание
statusСтатус ответа: ok или error.
error_codeЧисловой код приложения.
http_statusHTTP-статус, дублируемый в body.
ipПроверенный IP-адрес.
uaUser-Agent, использованный в анализе.
user_idСтабильный идентификатор из запроса.
subscription_typenone, geo, antifraud.
geo.city.nameНазвание города.
geo.city.geoname_idGeoNames ID города.
geo.country.iso_codeISO2 код страны.
geo.country.nameНазвание страны.
geo.country.geoname_idGeoNames ID страны.
geo.location.latitudeШирота.
geo.location.longitudeДолгота.
geo.location.accuracy_radiusРадиус точности геопровайдера.
geo.timezoneIANA timezone.
geo.postalПочтовый индекс (если доступен).
geo.country_enrichment.iso2ISO2 код.
geo.country_enrichment.iso3ISO3 код.
geo.country_enrichment.nameОтображаемое название страны.
geo.country_enrichment.geoname_idGeoNames ID страны.
geo.country_enrichment.flag_emojiEmoji флаг.
geo.country_enrichment.flag_cdn_png_20URL PNG флага 20px.
geo.country_enrichment.flag_cdn_png_40URL PNG флага 40px.
geo.country_enrichment.flag_cdn_svgURL 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_coinUSD стоимость одной монеты.
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_8Geohash, точность 8.
geo.geo_intelligence.distance_from_equator_kmРасстояние до экватора.
geo.geo_intelligence.distance_from_prime_meridian_kmРасстояние до нулевого меридиана.
geo.geo_intelligence.map_urls.openstreetmapURL OpenStreetMap.
geo.geo_intelligence.map_urls.google_mapsURL Google Maps.
geo.geo_intelligence.time.timezoneTimezone (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 невалиден).
asnASN-блок (только antifraud-планы).
ptrPTR/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 CodeHTTPЗначение
0200Успех.
1001405Метод не поддерживается. Используйте GET.
1002400Отсутствует параметр ip.
1003400Некорректный формат ip.
1004401Отсутствует/некорректен Bearer authorization header.
1005401Недействительный API-ключ.
1006400Отсутствует параметр user_id.
1007429Превышен rate limit.
1008400Некорректный формат fields.
1009400Некорректный формат crypto (разрешены: BTC,ETH,BNB,TON).
1500500Ошибка bootstrap/runtime фреймворка.
1501500Внутренняя ошибка lookup/runtime.

Примеры

cURL

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"

JavaScript (fetch)

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);

PHP (cURL)

$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 ошибки валидации/авторизации без исправления запроса.
IdempotencyGET endpoint идемпотентен и безопасен для контролируемой retry-стратегии.
НаблюдаемостьЛогируйте error_code, http_status и наборы запрошенных полей для разбора инцидентов.