API HuntShare

Поиск и проверка кандидатов. Базовый адрес — https://cm-api.huntshare.tech, авторизация — заголовок Authorization: Bearer ваш_ключ.

С чего начать

Первым делом — GET /v1/balance. Он отдаёт остаток, действующие цены всех операций и флаг allowed по каждой. Цены меняются без релиза документации, поэтому читать их надо оттуда, а не из таблицы ниже: интеграция с зашитыми ценами однажды потратит больше, чем рассчитывала.

curl -s https://cm-api.huntshare.tech/v1/balance \
  -H "Authorization: Bearer ВАШ_КЛЮЧ"

Дальше — поиск. Это самая дешёвая осмысленная операция.

curl -s -X POST https://cm-api.huntshare.tech/v1/search \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "position_filters": [{"positions": ["product manager"], "timeframe": "now"}],
    "countries": [],
    "size": 20
  }'

Как считаются деньги

Квота — в токеновах, а не в запросах. Один токен равен 10 копейкам, и точка отсчёта — открытие профиля: оно стоит ровно токенову. Так дорогая операция не съедает ту же квоту, что и дешёвая.

  • Списываем по факту успеха. Операция, упавшая на нашей стороне, не стоит ничего. Пустой результат — это успех, и он тарифицируется: работа выполнена, а ответ «в базе нет» — тоже ответ.
  • Упавшая проверка возвращает токеновы. Не сработали мы, значит это не ваши деньги.
  • Опрос статуса бесплатен. Сколько бы раз вы ни спросили «готово?», заплатите один раз — за готовый отчёт.
  • Повтор с тем же client_request_id не спишет дважды. Повтор после сетевого обрыва не стоит ничего.
Не хватило токенов — 402 с полями needed и available. Токеновы при этом не списываются.

Продукты и доступ

API делится на три продукта, и подключаются они по отдельности: поиск кандидатов, получение резюме и антифрод. Ключ при этом один — второй набор кредов означал бы второе место, где их можно потерять, и второй остаток, который пришлось бы складывать с первым.

Что вам подключено, видно в GET /v1/balance, блок services: у каждого продукта есть enabled, а у каждой операции внутри — allowed. Прочитайте это на старте, а не выясняйте из 403 в бою.

Отказ по доступу и отказ по лимиту — разные вещи
  • 403 service_not_allowed — продукт не подключён. Поле service говорит, какой именно, enabled_services — что подключено. Лечится договором, а не ожиданием.
  • 403 operation_not_allowed — продукт подключён, но конкретная операция закрыта. Лечится одной правкой на нашей стороне.
  • 402 quota_exceeded — доступ есть, кончились токеновы. Лечится оплатой или ожиданием сброса (reset_at).
Квота одна на ключ и общая для всех подключённых продуктов. Ни один из этих отказов токенов не списывает.

Операции

КодЧто делаетПродуктТокеновРучка
searchПоиск кандидатовsearch5POST /v1/search
deep_searchПоиск на сыром Query DSLsearch10POST /v1/search/deep
profileПрофиль LinkedInresume1GET /v1/linkedin/{username}
person_lookupНайти человека в базеresume20POST /v1/person/lookup
profile_historyИстория правок профиляresume20POST /v1/profile_history
colleaguesКоллеги по пересечениюresume30POST /v1/colleagues
contactsВерифицированные контактыresume50GET /v1/contacts/{username}
antifraud_checkПроверка кандидатаantifraud2000POST /v1/antifraud/check

Таблица справочная. Действующие цены — в поле operations ответа /v1/balance.

Бесплатны и не трогают квоту: /v1/balance, /v1/dashboard/stats, /v1/search/fields, /v1/search/expression и опрос статуса проверки.

Проверка кандидата

Проверка сверяет резюме с профилем, с описаниями коллег того же периода, с историей правок профиля и с независимыми упоминаниями. Занимает 40–90 секунд на человека, поэтому асинхронная: заявка возвращает 202 и check_id, дальше опрашиваете статус.

# 1. Убедиться, что проверяем того человека — 20 токенов
curl -s -X POST https://cm-api.huntshare.tech/v1/person/lookup \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{"full_name": "Иван Петров", "company": "Сбер"}'

# 2. Заказать проверку — 2000 токенов. client_request_id обязателен на практике
curl -s -X POST https://cm-api.huntshare.tech/v1/antifraud/check \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{"resume_link": "l/3155249", "client_request_id": "petrov-2026-09-02"}'

# 3. Опрашивать до status=done — бесплатно
curl -s https://cm-api.huntshare.tech/v1/antifraud/check/CHECK_ID \
  -H "Authorization: Bearer ВАШ_КЛЮЧ"
Всегда читайте блок resolved
В отчёте есть resolved: кого именно проверили и как нашли. Вердикт про однофамильца выглядит ровно так же уверенно, как верный. Если по вашему запросу совпало несколько человек, проверка не запустится вовсе — придёт 409 ambiguous_person со списком, и токеновы не спишутся: выбираете вы.

Пачка до 25 человек — POST /v1/antifraud/batch. Каждый кандидат тарифицируется и закрывается отдельно: упавший возвращает свои токеновы и не влияет на остальных.

Подключение агента (MCP)

У API есть MCP-сервер: вставляете адрес и доступ в настройки Claude Desktop, Cursor или своего агента — и он сам видит доступные инструменты с описаниями и ценами.

https://cm-api.huntshare.tech/mcp

Не отдавайте агенту основной ключ. Заведите отдельный доступ на странице «Доступы для агентов»: его можно отозвать по одному, не трогая свою интеграцию, и ограничить набором операций — например, разрешить поиск и профиль, но не проверку за 2000 токенов.

Квота у агента общая с вашим ключом: это ограничение доступа, а не отдельный кошелёк. Сколько сжёг конкретный агент, видно в списке токенов.

Ошибки

Тело ошибки всегда {"error": "код", "message": "текст"} плюс поля, зависящие от кода. Ни одна ошибка не списывает токеновы.

КодЧто значитСписано?
401 unauthorizedНет ключа или он неверныйнет
402 quota_exceededКончились токеновы; смотрите needed / availableнет
403 service_not_allowedПродукт не подключён — смотрите поле serviceнет
403 operation_not_allowedПродукт подключён, но операция закрытанет
404 person_not_foundЧеловека нет в базе и не передан resume_textнет
409 ambiguous_personСовпало несколько человек — выбираете вынет
400 invalid_resume_linkСсылка не вида l/12345нет
422Превышен потолок постраничности или тело не разобранонет
503 *_unavailableЛежит наш бэкенд или источникнет

В ответах никогда нет нашей себестоимости, внутренних журналов, трассировок и сырого разбора резюме: наружу поля проходят через белый список, поэтому новое внутреннее поле не может утечь в вашу интеграцию случайно.