↑ Все API

Город по IP-адресу

✔️ Определяет город по IP-адресу в России. Использует IP-адрес клиента, значение из параметра ip или заголовок X-Forwarded-For.

✔️ Поддерживает как IPv4, так и IPv6 адреса.

✔️ Возвращает детальную информацию о городе, в том числе почтовый индекс.

Как вызвать

Чтобы вызвать метод, зарегистрируйтесь и подтвердите почту.

Пример запроса:

{ "ip": "46.226.227.20" }
curl -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Token ${API_KEY}" \
  https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address?ip=46.226.227.20
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Token ${API_KEY}" \
  -d '{ "ip": "46.226.227.20" }' \
  https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address
// https://github.com/hflabs/dadata-csharp

var token = "${API_KEY}";
var api = new SuggestClientAsync(token);
var result = await api.Iplocate("46.226.227.20");
// https://github.com/ekomobile/dadata
// Использует API-ключ из переменной окружения DADATA_API_KEY

import (
    "context"
    dadata "github.com/ekomobile/dadata/v2"
    "github.com/ekomobile/dadata/v2/api/suggest"
)

func main() {
    api := dadata.NewSuggestApi()
    query := "46.226.227.20"
    result, err := api.GeoIP(context.Background(), query)
}
var url = "https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address?ip=";
var token = "${API_KEY}";
var query = "46.226.227.20";

var options = {
    method: "GET",
    mode: "cors",
    headers: {
        "Content-Type": "application/json",
        "Accept": "application/json",
        "Authorization": "Token " + token
    }
}

fetch(url + query, options)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log("error", error));
// https://github.com/hflabs/dadata-php

$token = "${API_KEY}";
$dadata = new \Dadata\DadataClient($token, null);
$result = $dadata->iplocate("46.226.227.20");
# https://github.com/hflabs/dadata-py

from dadata import Dadata
token = "${API_KEY}"
dadata = Dadata(token)
result = dadata.iplocate("46.226.227.20")

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

Название Тип Обяз.? По умолч. Описание
ip string IP-адрес
language string ru На каком языке вернуть результат (ru / en)

Что в ответе

Ответ:

{
    "location": {
        "value": "г Краснодар",
        "unrestricted_value": "350000, Краснодарский край, г Краснодар",
        "data": {
            "postal_code": "350000",
            "country": "Россия",
            "country_iso_code": "RU",
            "federal_district": "Южный",
            "region_fias_id": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
            "region_kladr_id": "2300000000000",
            "region_iso_code": "RU-KDA",
            "region_with_type": "Краснодарский край",
            "region_type": "край",
            "region_type_full": "край",
            "region": "Краснодарский",
            "area_fias_id": null,
            "area_kladr_id": null,
            "area_with_type": null,
            "area_type": null,
            "area_type_full": null,
            "area": null,
            "city_fias_id": "7dfa745e-aa19-4688-b121-b655c11e482f",
            "city_kladr_id": "2300000100000",
            "city_with_type": "г Краснодар",
            "city_type": "г",
            "city_type_full": "город",
            "city": "Краснодар",
            ...
        }
    }
}

Если город не удалось определить, ответ будет таким:

{
    "location": null
}

Точность определения города

Определение города по IP-адресу — не слишком надёжный способ. Точность составляет 60–80%. Если «Дадата» неправильно определила город или не определила его вовсе — сообщите об этом через специальную форму. Мы исправляем ошибки ежемесячно.

Как не исчерпать лимит запросов

Если просто подключить API «город по IP» на сервере, можно очень быстро выйти за бесплатный лимит в 10 000 запросов в сутки. Причины у этого две:

  1. Когда человек ходит по страницам сайта, каждая страница заново пытается определить город.
  2. Большое количество запросов генерируют поисковые боты (Яндекс, Гугл, Бинг).

Чтобы решить обе проблемы, мы рекомендуем:

  1. Запоминать результат, который вернула «Дадата» — и не делать повторных вызовов на других страницах.
  2. Вызывать API из браузера, а не с сервера — это защитит от ботов.

Примеры вызова

Ограничения

Длина запроса (параметр query) — не более 300 символов.

Количество запросов в день — в соответствии с тарифным планом.

Максимальная частота запросов — 30 в секунду с одного IP-адреса.

Максимальная частота создания новых соединений — 60 в минуту с одного IP-адреса.

Стоимость

Метод бесплатный до 10 000 запросов в день. Больше — в составе годовой подписки.

ajax-spinner

Ошибка

Укажите свой адрес электронной почты, и мы отправим на него инструкции по восстановлению пароля.