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

Каждый вызов представляет собой GET-запрос к https://api.mygeocode.com/v1/ с параметрами в строке запроса, ответ приходит в JSON. На этой странице описано то, что общее для всех эндпоинтов. Параметры и поля каждого эндпоинта описаны на его отдельной странице.

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

Для первых 2 500 запросов в день с одного адреса ключ не нужен. С любого компьютера:

$ curl "https://api.mygeocode.com/v1/forward?q=Brandenburg+Gate,+Berlin&limit=1"
{
  "status": "ok",
  "query": "Brandenburg Gate, Berlin",
  "results": [
    {
      "formatted": "Brandenburger Tor, Pariser Platz, 10117 Berlin, Germany",
      "lat": 52.516275,
      "lon": 13.377704,
      "type": "poi",
      "precision": "house",
      "confidence": 0.99,
      "components": {
        "name": "Brandenburger Tor",
        "road": "Pariser Platz",
        "suburb": "Mitte",
        "city": "Berlin",
        "state": "Berlin",
        "postcode": "10117",
        "country": "Germany",
        "country_code": "de"
      },
      "bounds": { "north": 52.516441, "south": 52.516107, "east": 13.377862, "west": 13.377538 }
    }
  ]
}

Этот запрос засчитан как 1 из 2 500 бесплатных запросов, которые ваш адрес получает сегодня. С ключом он был бы засчитан ключу, а заголовки дополнительно показали бы ваш баланс и данные по IP-слотам. Заголовки ответа показывают ваше текущее положение:

HTTP/2 200
content-type: application/json; charset=utf-8
x-quota-limit: 2500
x-quota-used: 1
x-quota-free-remaining: 2499
x-quota-reset: 1756339200
x-request-id: 2726386e38428697

Переходите с другого провайдера?

Возможно, остальная часть этой страницы вам не понадобится. Если ваш код уже работает с Google Maps, Bing Maps, HERE, Mapbox, Geocode.Farm, Nominatim, OpenCage, LocationIQ, Geoapify, TomTom, MapQuest, Geocodio, PositionStack, ip-api, ipinfo, ipstack или Open-Elevation, у нас есть хост, который понимает формат запросов и ответов этого провайдера и отдаёт наши данные. Смените имя хоста, укажите свой ключ там, где был старый, и оставьте код разбора ответов как есть. То же касается Google Maps JavaScript API, Bing Maps V8, HERE Maps for JavaScript, MapQuest.js, а также плагинов геокодера для MapLibre, Mapbox GL и Leaflet.

Как работают совместимые хосты: полная таблица хостов, соответствие ключей, соответствие ошибок и чек-лист миграции.

Базовый URL и эндпоинты

ЭндпоинтПутьОбязательные параметры
Прямое геокодированиеGET /v1/forwardq (или структурированные поля)
Обратное геокодированиеGET /v1/reverselat, lon
Автодополнение адресовGET /v1/autocompleteq
Определение IPv4GET /v1/ipv4нет (ip необязателен)
Определение IPv6GET /v1/ipv6нет (ip необязателен)
Определение IP любой версииGET /v1/ipнет (ip необязателен)
Определение часового поясаGET /v1/timezonelat, lon
Определение высотыGET /v1/elevationlat, lon или locations
Поиск по почтовому индексуGET /v1/postcodecode

Обслуживается только HTTPS. Запросы по обычному HTTP отклоняются с кодом 400, а не перенаправляются, чтобы ключ никогда случайно не был отправлен открытым текстом. Поддерживаются HTTP/2 и HTTP/3. Ответы сжимаются, если клиент принимает gzip или br.

Обёртка ответа

Каждый ответ представляет собой JSON-объект с полем status со значением ok или error.

Корректный запрос, по которому ничего не найдено, возвращает ok с пустым массивом results или result, равным null. Это не ошибка, и такой запрос засчитывается.

Параметры, которые принимает каждый эндпоинт

ПараметрОписание
keyВаш API-ключ, если вы предпочитаете параметр запроса заголовку X-API-Key. Заголовок лучше, потому что строки запроса попадают в логи.
langКод языка ISO 639-1 для названий мест, если они у нас есть. По умолчанию en. Адреса всегда форматируются по правилам страны.
pretty1, чтобы добавить отступы в JSON. Удобно в браузере; в коде не используйте.

Имена параметров чувствительны к регистру и пишутся строчными буквами. Неизвестные параметры игнорируются, а пустые считаются отсутствующими, поэтому HTML-форма может отправлять необязательные поля пустыми. Координаты задаются в десятичных градусах; lat от -90 до 90 и lon от -180 до 180. Текст передаётся в UTF-8 и должен быть закодирован для URL.

Аутентификация в одном абзаце

Ключ необязателен: каждый адрес получает 2 500 бесплатных запросов в день без него. Ключ передаётся в заголовке X-API-Key, в виде токена Authorization: Bearer или в параметре key; ключи бесплатны, а для аккаунта нужны ваше имя, адрес электронной почты и пароль. У каждого ключа есть собственные 2 500 бесплатных запросов в день; сверх этого запросы списываются с предоплаченного баланса аккаунта по 0,0001 € за запрос или бесплатны для ключа, входящего в пакет Unlimited (50 € в месяц). Запросы без ключа и запросы с ключом из одной и той же сети делят одну дневную квоту. Ключ с оплатой по мере использования работает с двух IP-адресов за скользящие 24 часа, ключ Unlimited с трёх. Полные правила описаны на странице аутентификации.

Заголовки квоты

ЗаголовокЗначение
X-Quota-LimitБесплатных запросов в день для этого ключа или для этого адреса, если ключ не передан: 2 500. Для ключа Unlimited -1.
X-Quota-UsedЗапросы, засчитанные этому ключу сегодня, включая текущий.
X-Quota-Free-RemainingСколько бесплатных запросов осталось у этого ключа сегодня. -1 для ключа Unlimited.
X-Credits-RemainingНа сколько ещё платных запросов хватит баланса аккаунта.
X-Key-IPs-Used, X-Key-IPs-LimitСколько IP-слотов этого ключа занято сейчас и сколько их всего.
X-Quota-ResetВремя Unix ближайшего момента 00:00 UTC, когда обнуляются дневные счётчики.
X-Request-IdУникальный идентификатор запроса. Укажите его, когда пишете в поддержку.

Вызовы из браузера

CORS включён на каждом эндпоинте, и заголовки квоты доступны, но ключ в исходном коде страницы становится публичным и исчерпает свои IP-слоты после пары посетителей. Выполняйте вызовы со своего сервера; см. ключи и браузеры.

Версионирование

Префикс пути /v1/ и есть версия. В пределах версии мы добавляем поля и параметры, но никогда не удаляем и не переименовываем их и никогда не меняем смысл существующего поля. Если нам когда-нибудь понадобится что-то сломать, это попадёт в /v2/, а /v1/ продолжит работать не менее шести месяцев после объявления. О дополнениях мы сообщаем в разделе Новости блога.

Ваш JSON-парсер должен игнорировать неизвестные ему поля. Это единственное требование прямой совместимости.