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

HintData — единый REST API для подсказок, стандартизации и обогащения данных. Все методы принимают POST с JSON-телом и возвращают JSON.

Один API — два формата ответа
По умолчанию возвращается вложенный формат (native). Для совместимости с DaData доступен плоский data-формат на URL DaData. См. раздел «Форматы ответа».
base urlhttps://api.hintdata.ru/v1

Аутентификация

API-ключ передаётся в заголовке Authorization с префиксом Token. Поддерживаются два типа ключей.

КлючГде использоватьДоступ
pk_…публичныйбраузер, виджеты, мобильные приложения только подсказки (все справочники, кроме кадастра) и геолокация. Можно передавать query-параметром ?token=pk_….
sk_…секретныйтолько сервер полный доступ: подсказки, стандартизация (clean), точный поиск (find), кадастр. Не размещается в клиентском коде.

Ключ можно ограничить списком IP-адресов или подсетей. Запрос с адреса вне списка возвращает 403.

curl https://api.hintdata.ru/v1/suggest/address \
  -H "Authorization: Token sk_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "query": "москва" }'

Готовый виджет подсказок

Если нужен не свой интерфейс, а работающее поле с подсказками — подключите виджет @hintdata/js. Он навешивается на обычное поле формы — <input> или <textarea> — и дальше работает сам: держит паузу после набора, отменяет устаревшие запросы и углубляется по уровням адреса. Связанные поля (город → улица → дом) и заполнение соседних полей задаются атрибутами, без единой строки JavaScript.

Три способа подключения равнозначны: тег <script> с нашего домена, тот же файл с публичного CDN unpkg — если не хотите зависеть от нашей раздачи, — или установка пакетом из npm для сборки. Стили встроены, отдельный файл подключать не нужно.

<!-- 1. подключите виджет: наш домен или независимый CDN -->
<script src="https://api.hintdata.ru/widget.js" data-key="pk_xxx"></script>

<!-- 2. добавьте атрибут к полю — этого достаточно -->
<input data-hintdata="address">

<!-- связанные поля и заполнение соседних — тоже атрибутами -->
<input data-hintdata="address" data-parent="#city" data-to="street">
<input data-hintdata="address" data-fill-postal="#zip" data-fill-city="#city">

В браузер ставится только публичный pk_-ключ: он и рассчитан на то, чтобы быть видимым в исходниках страницы, а ограничивается списком разрешённых IP. Исходный код и полный список опций — в репозитории пакета.

Лимиты и квоты

Лимиты зависят от тарифа. При превышении возвращается 429 Too Many Requests с заголовком Retry-After. Подсказки расходуют суточный пул; стандартизация и кадастр — отдельные пулы (кадастр — оплата за запрос). Актуальные цены и условия — на странице «Тарифы».

ТарифПодсказок в суткиRPSПоля адреса
Бесплатный10 00010базовые
Старт50 00010базовые
Расширенный100 00015+ кольцевая (МКАД/КАД)
Бизнесплавающий200 000 – 3 000 000от 20, растёт с объёмом+ кадастр, часовой пояс, квартиры, метро
Корпоративныйбезлимитпо SLAвсе

Бизнес — плавающий тариф: суточный лимит подсказок настраивается в диапазоне 200 000–3 000 000 (шаг 100 000), RPS увеличивается пропорционально лимиту (от 20). Корпоративный тариф — по договору.

Справочная информация

Форматы ответа

По умолчанию все методы возвращают нативный формат — вложенный объект с components, codes и geo. Для плавной миграции с dadata.ru поддерживается DaData-совместимый плоский data-формат.

СпособФормат
/v1/…native — вложенный, со всеми полями (рекомендуется)
/suggestions/api/4_1/rs/… плоский data-формат по адресам DaData — SDK подключается без доработок
/api/v1/clean/… адрес методов стандартизации в формате DaData — для перехода достаточно сменить базовый адрес; тип name соответствует домену fio
clean: тело-массив ["…"] плоский DaData-формат для стандартизации (объект {source} → native)

На DaData-совместимом URL имена некоторых справочников отличаются от основных. Для drop-in миграции поддерживаются их псевдонимы: fts_unit → таможни, okved2 → ОКВЭД, postal_unit → почтовые отделения. Остальные имена совпадают.

Поля адресов по тарифам

Часть полей адресного ответа доступна начиная с определённого тарифа. В нативном формате недоступные поля опускаются (ключа нет в JSON), в DaData-совместимом — присутствуют со значением null (полный набор ключей всегда, как у dadata.ru).

ТарифПоля
Все тарифы компоненты адреса и корпус (house_num/block), ФИАС/КЛАДР, индекс, ОКАТО, ОКТМО, ИФНС ФЛ/ЮЛ (tax_office, tax_office_legal), признак адмцентра (capital_marker), история переименований
Расширенный и выше положение относительно кольцевой (beltway_hit, beltway_distance)
Бизнес и вышекадастровый номер (cadastral_num), часовой пояс (timezone), количество квартир в доме (house_flat_count), площадь и стоимость квартиры, ближайшее метро

Коды ошибок

Стандартные HTTP-коды. Тело ошибки — { "error": "<код причины>" } (строковый код, например unauthorized, forbidden_scope).

КодerrorЗначение
200Успех.
400invalid_jsonНекорректное тело запроса.
401unauthorizedНет ключа или ключ неверный.
402insufficient_balanceНедостаточно средств на платном пуле (стандартизация/кадастр).
403forbidden_scopeУ ключа нет нужного доступа к методу/домену.
404unknown routeНеизвестный путь или домен.
429Превышен лимит запросов — см. заголовок Retry-After.
503no_capacity / service_unavailableСервис временно недоступен (нет узла / бэкенд недоступен).