{"name":"HeadHunter API (hh.ru)","vendor":"HeadHunter","industry":"hr","summary":"REST API сайтов группы HeadHunter (hh.ru, rabota.by, hh1.az, hh.uz, hh.kz, headhunter.ge, headhunter.kg). Позволяет искать вакансии, резюме и работодателей, публиковать и архивировать вакансии, работать с откликами и приглашениями, вести переписку в чатах, получать справочники и подписываться на вебхуки. Данные передаются только в JSON по HTTPS, даты — в формате ISO 8601 (`YYYY-MM-DDThh:mm:ss±hhmm`).","docsUrl":"https://api.hh.ru/openapi/redoc","coverage":{"included":[],"excluded":[]},"scenarios":[{"id":"nayti-vakansii-po-zaprosu","title":"Найти вакансии по запросу","summary":"Поиск вакансий hh.ru для своего сайта, бота или аналитики зарплат.","steps":["Передавай в каждом запросе заголовок HH-User-Agent с названием приложения и почтой разработчика — без него придёт 400.","Узнай ID региона: GET /areas (1 — Москва, 2 — Санкт-Петербург). Значения фильтров (опыт, тип занятости, сортировка) — в GET /dictionaries.","Ищи: GET /vacancies с text, area, salary, experience, per_page (до 100) и page (с нуля). Только с указанной зарплатой — label = with_salary.","В ответе found, pages и items. Глубина выдачи — не больше 2000 вакансий: для полного охвата сужай запрос по регионам или датам (date_from, date_to).","Без токена после первого запроса может потребоваться капча (ответ 403) — для массовых запросов используй токен приложения."],"code":"curl -G https://api.hh.ru/vacancies \\\n  -H 'HH-User-Agent: MyApp/1.0 (dev@example.ru)' \\\n  --data-urlencode 'text=python разработчик' \\\n  -d area=1 -d salary=200000 -d only_with_salary=true \\\n  -d per_page=50 -d page=0","language":"bash","methods":["GET /vacancies","GET /dictionaries","GET /areas"]},{"id":"opublikovat-vakansiyu-ot-imeni","title":"Опубликовать вакансию от имени работодателя","summary":"Размещать вакансии из своей ATS или карьерного сайта сразу на hh.ru.","steps":["Зарегистрируй приложение на dev.hh.ru. Отправь менеджера работодателя на https://hh.ru/oauth/authorize с response_type = code, client_id и redirect_uri.","Обменяй код на токены: POST /token с grant_type = authorization_code, client_id, client_secret, code и redirect_uri (тело — form-urlencoded). Обновить пару — тот же метод с refresh_token, но только после истечения access_token.","Узнай ID работодателя: GET /me — поле employer.id.","Опубликуй: POST /vacancies с name, description (HTML), area, professional_roles и при необходимости salary_range, experience, work_format, key_skills. Ответ 201. Услуги списываются с пакета работодателя; все вакансии проходят модерацию и появляются в поиске через несколько минут.","Изменить вакансию — PUT /vacancies/{vacancy_id} (составные поля вроде salary_range передавай целиком). Снять с публикации — PUT /employers/{employer_id}/vacancies/archived/{vacancy_id}."],"code":"curl -X POST https://api.hh.ru/vacancies \\\n  -H \"Authorization: Bearer $HH_TOKEN\" \\\n  -H 'HH-User-Agent: MyApp/1.0 (dev@example.ru)' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n        \"name\": \"Python-разработчик\",\n        \"description\": \"<p>Разрабатываем сервисы для логистики.</p><ul><li>Python 3, FastAPI</li></ul>\",\n        \"area\": {\"id\": \"1\"},\n        \"professional_roles\": [{\"id\": \"96\"}],\n        \"salary_range\": {\"from\": 200000, \"to\": 300000, \"currency\": \"RUR\", \"gross\": false, \"mode\": {\"id\": \"MONTH\"}, \"frequency\": {\"id\": \"TWICE_PER_MONTH\"}},\n        \"key_skills\": [{\"name\": \"Python\"}, {\"name\": \"PostgreSQL\"}]\n      }'","language":"bash","methods":["POST /token","GET /me","POST /vacancies","PUT /vacancies/{vacancy_id}","PUT /employers/{employer_id}/vacancies/archived/{vacancy_id}"]},{"id":"razobrat-otkliki-na-vakansiyu","title":"Разобрать отклики на вакансию","summary":"Забирать откликнувшихся кандидатов в свою систему и приглашать или отказывать без захода на hh.ru.","steps":["Получи отклики: GET /negotiations с vacancy_id (обязателен для работодателя) и, например, has_updates = true — только с непросмотренным.","Открой отклик: GET /negotiations/{id} — адрес берётся из items[].url. Резюме кандидата смотри через ссылку из отклика.","Чтобы пригласить или отказать, возьми из actions[] нужное действие и вызови PUT /negotiations/{collection_name}/{nid} с аргументами из actions[].arguments (form-urlencoded). Успех — 204.","Не составляй адреса действий вручную: доступные действия зависят от состояния отклика и приходят в ответе."],"code":"curl -G https://api.hh.ru/negotiations \\\n  -H \"Authorization: Bearer $HH_TOKEN\" -H 'HH-User-Agent: MyApp/1.0 (dev@example.ru)' \\\n  -d vacancy_id=123456789 -d has_updates=true -d per_page=50","language":"bash","methods":["GET /negotiations","GET /negotiations/{id}","PUT /negotiations/{collection_name}/{nid}"]},{"id":"perepisyvatsya-s-kandidatom-v-chate","title":"Переписываться с кандидатом в чате","summary":"Отправлять кандидатам сообщения из своей системы и читать ответы.","steps":["Получи чаты: GET /common/chats — с filter_unread = true только непрочитанные, с filter_with_vacancy_ids — по нужным вакансиям.","Прочитай сообщения: GET /common/chats/{chat_id}/messages с limit (до 50) и start_message_id для постраничного чтения.","Отправь сообщение: POST /common/chats/{chat_id}/messages с idempotency_key (UUID) и text. Повтор с тем же ключом вернёт 409 и не создаст дубль.","Старые методы /negotiations/{nid}/messages устарели — переписку веди через /common/chats."],"code":"curl -X POST https://api.hh.ru/common/chats/<chat_id>/messages \\\n  -H \"Authorization: Bearer $HH_TOKEN\" -H 'HH-User-Agent: MyApp/1.0 (dev@example.ru)' \\\n  -H 'Content-Type: application/json' \\\n  -d \"{\\\"idempotency_key\\\": \\\"$(uuidgen)\\\", \\\"text\\\": \\\"Добрый день! Приглашаем на собеседование в четверг в 15:00.\\\"}\"","language":"bash","methods":["GET /common/chats","GET /common/chats/{chat_id}/messages","POST /common/chats/{chat_id}/messages"]},{"id":"poluchat-uvedomleniya-o-novyh-otklikah","title":"Получать уведомления о новых откликах","summary":"Узнавать о новых откликах и сообщениях сразу, без опроса.","steps":["Подпишись: POST /webhook/subscriptions с url своего обработчика и actions — списком нужных событий (типы событий — в документации вебхуков). Доступно только работодателю; на приложение — один URL.","Колбэк приходит POST-запросом с action_type, id и payload (vacancy_id, resume_id, chat_id и др.). Отвечай 2xx в течение 5 секунд, на повтор с тем же id — 409.","Доставка не гарантирована: раз в несколько часов сверяй отклики через GET /negotiations.","Список подписок — GET /webhook/subscriptions, удалить — DELETE /webhook/subscriptions/{subscription_id}."],"code":"curl -X POST https://api.hh.ru/webhook/subscriptions \\\n  -H \"Authorization: Bearer $HH_TOKEN\" -H 'HH-User-Agent: MyApp/1.0 (dev@example.ru)' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"url\": \"https://example.ru/hh/webhook\", \"actions\": [{\"type\": \"<тип события>\"}]}'","language":"bash","methods":["GET /negotiations","POST /webhook/subscriptions","GET /webhook/subscriptions","DELETE /webhook/subscriptions/{subscription_id}"]}],"baseUrls":[{"label":"Боевой","url":"https://api.hh.ru"},{"label":"Запросы ко всем сайтам группы идут на один адрес; нужный сайт задаётся параметром  (по умолчанию ), локаль","url":"?host="}],"auth":{"type":"oauth2","description":"OAuth 2.0. Токен передаётся в заголовке `Authorization: Bearer {ACCESS_TOKEN}`.\n\n- Токен пользователя (authorization code): пользователь открывает `https://hh.ru/oauth/authorize?response_type=code&client_id={client_id}&state={state}&redirect_uri={redirect_uri}`, затем `authorization_code` из редиректа обменивается на `access_token` и `refresh_token` запросом `POST https://api.hh.ru/token`. Поддерживается PKCE (`code_challenge`, `code_challenge_method=S256`).\n- Обновление: `POST https://api.hh.ru/token` с `refresh_token`; refresh-токен одноразовый и работает только после истечения `access_token` (срок — `expires_in`, в секундах).\n- Токен приложения (client credentials): срок жизни не ограничен, при повторном запросе прежний отзывается; запрашивать не чаще раза в 5 минут. Актуальный токен виден владельцу на `https://dev.hh.ru/admin`.\n\nПараметры `/oauth/authorize`: `skip_choose_account=true` — не показывать выбор аккаунта, `force_login=true` — всегда показывать форму входа, `role` (`applicant` или `employer`) с `force_role=true` — требовать нужную роль.\n\nВ каждом запросе обязателен заголовок `User-Agent` или `HH-User-Agent` (при обоих учитывается `HH-User-Agent`); без него — `400 Bad Request`.","example":"User-Agent: MyApp/1.0 (my-app-feedback@example.com)"},"methods":[{"id":"POST /token","title":"Получение access-токена","httpMethod":"POST","path":"/token","description":"Тело — `application/x-www-form-urlencoded`. Набор полей зависит от `grant_type` (получение токена пользователя, обновление пары токенов, токен приложения). Ниже — поля для обмена `authorization_code`.\n\nВ ответе: `access_token`, `token_type` (`bearer`), `expires_in`, `refresh_token`.","params":[{"name":"HH-User-Agent","in":"header","type":"string","required":true,"description":"Название приложения и почта разработчика"},{"name":"grant_type","in":"body","type":"string","required":true,"description":"authorization_code"},{"name":"client_id","in":"body","type":"string","required":true,"description":"Идентификатор приложения"},{"name":"client_secret","in":"body","type":"string","required":true,"description":"Секретный ключ приложения"},{"name":"code","in":"body","type":"string","required":true,"description":"Полученный authorization_code"},{"name":"redirect_uri","in":"body","type":"string","required":true,"description":"URI перенаправления (если не указан — из настроек приложения)"},{"name":"code_verifier","in":"body","type":"string","required":false,"description":"Верификатор PKCE; обязателен, если передавался code_challenge"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"DELETE /token","title":"Инвалидация токена","httpMethod":"DELETE","path":"/token","description":"Работает только для действующего токена пользователя; токен приложения так инвалидировать нельзя. После инвалидации нужно авторизоваться заново. Успех — `204`.","params":[{"name":"HH-User-Agent","in":"header","type":"string","required":true,"description":"Название приложения и почта разработчика"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /me","title":"Информация о текущем пользователе","httpMethod":"GET","path":"/me","description":"В ответе: `auth_type`, `id`, `email`, `first_name`, `last_name`, `is_applicant`, `is_employer`, `employer`, `manager`, `counters` и др.","params":[{"name":"HH-User-Agent","in":"header","type":"string","required":true,"description":"Название приложения и почта разработчика"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /vacancies","title":"Поиск по вакансиям","httpMethod":"GET","path":"/vacancies","description":"Неизвестные параметры игнорируются. Без токена после первого запроса может потребоваться капча. Глубина выдачи — не больше 2000 (`per_page=10&page=199` можно, `page=200` — ошибка). Параметры, где указано «можно несколько», передаются как `key=value&key=value`.","params":[{"name":"text","in":"query","type":"string","required":false,"description":"Поисковая фраза (поддерживается язык запросов)"},{"name":"search_field","in":"query","type":"string","required":false,"description":"Область поиска из vacancy_search_fields в /dictionaries; можно несколько"},{"name":"area","in":"query","type":"string","required":false,"description":"Регион из /areas; можно несколько"},{"name":"metro","in":"query","type":"string","required":false,"description":"Ветка или станция метро из /metro; можно несколько"},{"name":"professional_role","in":"query","type":"string","required":false,"description":"Профессиональная роль из /professional_roles"},{"name":"industry","in":"query","type":"string","required":false,"description":"Индустрия компании из /industries; можно несколько"},{"name":"employer_id","in":"query","type":"string","required":false,"description":"Работодатель; можно несколько"},{"name":"experience","in":"query","type":"string","required":false,"description":"Опыт из experience в /dictionaries; можно несколько"},{"name":"employment_form","in":"query","type":"string","required":false,"description":"Тип занятости из vacancy_search_employment_form; можно несколько"},{"name":"work_format","in":"query","type":"string","required":false,"description":"Формат работы из work_format; можно несколько"},{"name":"work_schedule_by_days","in":"query","type":"string","required":false,"description":"График работы; можно несколько"},{"name":"working_hours","in":"query","type":"string","required":false,"description":"Рабочие часы в день; можно несколько"},{"name":"salary","in":"query","type":"number","required":false,"description":"Размер зарплаты; валюта по умолчанию RUR"},{"name":"currency","in":"query","type":"string","required":false,"description":"Код валюты из currency в /dictionaries (только вместе с salary)"},{"name":"label","in":"query","type":"string","required":false,"description":"Метки вакансий из vacancy_label (например, with_salary); можно несколько"},{"name":"excluded_text","in":"query","type":"string","required":false,"description":"Исключить вакансии с этими словами (через запятую)"},{"name":"education","in":"query","type":"string","required":false,"description":"not_required_or_not_specified, special_secondary, higher"},{"name":"period","in":"query","type":"number","required":false,"description":"Поиск за последние N дней"},{"name":"date_from","in":"query","type":"string","required":false,"description":"Нижняя граница даты публикации (ISO 8601); нельзя вместе с period"},{"name":"date_to","in":"query","type":"string","required":false,"description":"Верхняя граница даты публикации; нельзя вместе с period"},{"name":"top_lat","in":"query","type":"number","required":false,"description":"Верхняя граница широты (передавать все четыре гео-параметра)"},{"name":"bottom_lat","in":"query","type":"number","required":false,"description":"Нижняя граница широты"},{"name":"left_lng","in":"query","type":"number","required":false,"description":"Левая граница долготы"},{"name":"right_lng","in":"query","type":"number","required":false,"description":"Правая граница долготы"},{"name":"order_by","in":"query","type":"string","required":false,"description":"Сортировка из vacancy_search_order; для distance нужны sort_point_lat, sort_point_lng"},{"name":"clusters","in":"query","type":"boolean","required":false,"description":"Вернуть кластеры поиска (по умолчанию false)"},{"name":"describe_arguments","in":"query","type":"boolean","required":false,"description":"Вернуть описание применённых параметров (arguments)"},{"name":"no_magic","in":"query","type":"boolean","required":false,"description":"Отключить автоматическое преобразование текстового запроса в параметры"},{"name":"responses_count_enabled","in":"query","type":"boolean","required":false,"description":"Добавить поле counters с числом откликов"},{"name":"page","in":"query","type":"number","required":false,"description":"Номер страницы, по умолчанию 0"},{"name":"per_page","in":"query","type":"number","required":false,"description":"Элементов на странице, по умолчанию 10, максимум 100"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /vacancies/{vacancy_id}","title":"Просмотр вакансии","httpMethod":"GET","path":"/vacancies/{vacancy_id}","description":"Коды: `403` — нужна капча, `404` — вакансия не существует или нет прав, `429` — слишком много запросов.","params":[{"name":"vacancy_id","in":"path","type":"string","required":true,"description":"Идентификатор вакансии"},{"name":"HH-User-Agent","in":"header","type":"string","required":true,"description":"Название приложения и почта разработчика"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /vacancies/{vacancy_id}/similar_vacancies","title":"Похожие вакансии","httpMethod":"GET","path":"/vacancies/{vacancy_id}/similar_vacancies","description":"","params":[{"name":"vacancy_id","in":"path","type":"string","required":true,"description":"Идентификатор вакансии"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /vacancies","title":"Публикация вакансии","httpMethod":"POST","path":"/vacancies","description":"При успешной публикации списываются услуги работодателя; конкретный пакет задаётся `employer_service_id`, иначе выбирается автоматически. Все вакансии проходят ручную модерацию и появляются в поиске через несколько минут. Успех — `201`.","params":[{"name":"ignore_duplicates","in":"query","type":"boolean","required":false,"description":"Принудительно добавить дубликат"},{"name":"name","in":"body","type":"string","required":true,"description":"Название"},{"name":"description","in":"body","type":"string","required":true,"description":"Описание в HTML"},{"name":"area","in":"body","type":"object","required":true,"description":"Регион"},{"name":"professional_roles","in":"body","type":"array","required":true,"description":"Профессиональные роли"},{"name":"vacancy_properties","in":"body","type":"object","required":false,"description":"Свойства публикации (заменяет устаревшие type и billing_type)"},{"name":"employer_service_id","in":"body","type":"string","required":false,"description":"Пакет услуг из suitable_packages[].employer_service_id"},{"name":"salary_range","in":"body","type":"object","required":false,"description":"Зарплата (поле salary устарело)"},{"name":"address","in":"body","type":"object","required":false,"description":"Адрес"},{"name":"experience","in":"body","type":"object","required":false,"description":"Опыт работы"},{"name":"employment_form","in":"body","type":"object","required":false,"description":"Тип занятости"},{"name":"work_format","in":"body","type":"array","required":false,"description":"Форматы работы"},{"name":"work_schedule_by_days","in":"body","type":"array","required":false,"description":"Графики работы"},{"name":"working_hours","in":"body","type":"array","required":false,"description":"Рабочие часы в день"},{"name":"key_skills","in":"body","type":"array","required":false,"description":"Ключевые навыки"},{"name":"contacts","in":"body","type":"object","required":false,"description":"Контакты; при использовании нужен атрибут phones"},{"name":"code","in":"body","type":"string","required":false,"description":"Внутренний код вакансии"},{"name":"department","in":"body","type":"object","required":false,"description":"Департамент работодателя"},{"name":"manager","in":"body","type":"object","required":false,"description":"Менеджер вакансии"},{"name":"previous_id","in":"body","type":"string","required":false,"description":"ID архивной вакансии для связи с новой"},{"name":"response_letter_required","in":"body","type":"boolean","required":false,"description":"Обязательно сопроводительное письмо"},{"name":"test","in":"body","type":"object","required":false,"description":"Тест для вакансии"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"PUT /vacancies/{vacancy_id}","title":"Редактирование вакансии","httpMethod":"PUT","path":"/vacancies/{vacancy_id}","description":"Изменяет переданные поля. Составные поля (`salary_range`, `contacts`, `professional_roles`) передаются целиком. `billing_type` и `manager` меняются отдельным запросом.","params":[{"name":"vacancy_id","in":"path","type":"string","required":true,"description":"Идентификатор вакансии"},{"name":"ignore_duplicates","in":"query","type":"boolean","required":false,"description":"Игнорировать появление дубликата (по умолчанию false)"},{"name":"ignore_replacement_warning","in":"query","type":"boolean","required":false,"description":"Игнорировать ошибку о значительном изменении (по умолчанию true, есть риск блокировки)"},{"name":"name","in":"body","type":"string","required":false,"description":"Название"},{"name":"description","in":"body","type":"string","required":false,"description":"Описание в HTML"},{"name":"salary_range","in":"body","type":"object","required":false,"description":"Зарплата (целиком)"},{"name":"contacts","in":"body","type":"object","required":false,"description":"Контакты (целиком)"},{"name":"professional_roles","in":"body","type":"array","required":false,"description":"Профессиональные роли (целиком)"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /employers/{employer_id}/vacancies/active","title":"Опубликованные вакансии работодателя","httpMethod":"GET","path":"/employers/{employer_id}/vacancies/active","description":"","params":[{"name":"employer_id","in":"path","type":"string","required":true,"description":"Идентификатор работодателя"},{"name":"manager_ids","in":"query","type":"string","required":false,"description":"ID менеджеров через запятую, например manager_ids=1,2,3"},{"name":"all_accessible","in":"query","type":"boolean","required":false,"description":"Вакансии текущего пользователя и менеджеров, к которым есть доступ"},{"name":"text","in":"query","type":"string","required":false,"description":"Поиск по названию"},{"name":"area","in":"query","type":"string","required":false,"description":"Регион вакансии"},{"name":"department_id","in":"query","type":"string","required":false,"description":"Департамент работодателя"},{"name":"resume_id","in":"query","type":"string","required":false,"description":"Только вакансии, подходящие резюме (без других параметров)"},{"name":"order_by","in":"query","type":"string","required":false,"description":"Сортировка из employer_active_vacancies_order"},{"name":"page","in":"query","type":"number","required":false,"description":"Номер страницы, с 0"},{"name":"per_page","in":"query","type":"number","required":false,"description":"Элементов на странице, по умолчанию 20, максимум 50"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"PUT /employers/{employer_id}/vacancies/archived/{vacancy_id}","title":"Архивация вакансии","httpMethod":"PUT","path":"/employers/{employer_id}/vacancies/archived/{vacancy_id}","description":"Успех — `204`.","params":[{"name":"employer_id","in":"path","type":"string","required":true,"description":"Идентификатор работодателя"},{"name":"vacancy_id","in":"path","type":"string","required":true,"description":"Идентификатор вакансии"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /resumes","title":"Поиск резюме","httpMethod":"GET","path":"/resumes","description":"Результаты группируются по соискателю (одно резюме на соискателя). Глубина выдачи — не больше 2000. Для тонкой настройки `text` передаётся вся триада `text.logic`, `text.field`, `text.period`.\n\nПример:","params":[{"name":"text","in":"query","type":"string","required":false,"description":"Поисковая фраза; можно несколько"},{"name":"text.logic","in":"query","type":"string","required":false,"description":"Логика поиска из resume_search_logic"},{"name":"text.field","in":"query","type":"string","required":false,"description":"Где искать, из resume_search_fields (через запятую)"},{"name":"text.period","in":"query","type":"string","required":false,"description":"Период опыта работы"},{"name":"area","in":"query","type":"string","required":false,"description":"Регион; можно несколько"},{"name":"relocation","in":"query","type":"string","required":false,"description":"Готовность к переезду (вместе с area)"},{"name":"age_from","in":"query","type":"string","required":false,"description":"Возраст от"},{"name":"age_to","in":"query","type":"string","required":false,"description":"Возраст до"},{"name":"salary_from","in":"query","type":"number","required":false,"description":"Желаемая зарплата от"},{"name":"salary_to","in":"query","type":"number","required":false,"description":"Желаемая зарплата до"},{"name":"currency","in":"query","type":"string","required":false,"description":"Код валюты"},{"name":"experience","in":"query","type":"string","required":false,"description":"Опыт работы; можно несколько"},{"name":"skill","in":"query","type":"string","required":false,"description":"ID ключевых навыков"},{"name":"professional_role","in":"query","type":"string","required":false,"description":"Профессиональная роль; можно несколько"},{"name":"language","in":"query","type":"string","required":false,"description":"Язык в формате language.level, например ita.c2"},{"name":"label","in":"query","type":"string","required":false,"description":"Доп. фильтр из resume_search_label; можно несколько"},{"name":"period","in":"query","type":"number","required":false,"description":"Резюме, опубликованные за N дней"},{"name":"date_from","in":"query","type":"string","required":false,"description":"Дата начала поиска; нельзя с period"},{"name":"date_to","in":"query","type":"string","required":false,"description":"Дата окончания (только с date_from)"},{"name":"vacancy_id","in":"query","type":"string","required":false,"description":"Поиск резюме, похожих на вакансию"},{"name":"search_in_responses","in":"query","type":"boolean","required":false,"description":"Искать только среди откликнувшихся на вакансии компании"},{"name":"folder","in":"query","type":"string","required":false,"description":"Папки с отобранными резюме, например folder=111&folder=222"},{"name":"order_by","in":"query","type":"string","required":false,"description":"Сортировка из resume_search_order"},{"name":"page","in":"query","type":"number","required":false,"description":"Номер страницы, с 0"},{"name":"per_page","in":"query","type":"number","required":false,"description":"По умолчанию 20, максимум 100"}],"requestExample":"GET /resumes?text=программист&text=java","responseExample":"","docsUrl":""},{"id":"GET /resumes/{resume_id}","title":"Просмотр резюме","httpMethod":"GET","path":"/resumes/{resume_id}","description":"Требуется платный доступ. Если полные данные недоступны, часть полей придёт `null`, `can_view_full_info` = `false`, `contact_view_status` = `NONE`. Ссылки на просмотр с контактами и скачивание (PDF, RTF) приходят в поле `actions`; переход по ним списывает контакт.","params":[{"name":"resume_id","in":"path","type":"string","required":true,"description":"Идентификатор резюме"},{"name":"with_negotiations_history","in":"query","type":"boolean","required":false,"description":"Добавить negotiations_history.vacancies (до трёх вакансий)"},{"name":"with_creds","in":"query","type":"boolean","required":false,"description":"Добавить поле creds"},{"name":"with_job_search_status","in":"query","type":"boolean","required":false,"description":"Добавить статус поиска работы"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /negotiations","title":"Список откликов и приглашений","httpMethod":"GET","path":"/negotiations","description":"По умолчанию сортировка по дате обновления, от новых к старым. Активные отклики — `?status=active`.","params":[{"name":"vacancy_id","in":"query","type":"string","required":true,"description":"ID вакансии (обязателен для работодателя)"},{"name":"status","in":"query","type":"string","required":false,"description":"Статус из applicant_negotiation_status"},{"name":"order_by","in":"query","type":"string","required":false,"description":"Сортировка из negotiations_order"},{"name":"order","in":"query","type":"string","required":false,"description":"asc или desc"},{"name":"has_updates","in":"query","type":"boolean","required":false,"description":"Только с непросмотренными сообщениями"},{"name":"with_job_search_status","in":"query","type":"boolean","required":false,"description":"Вернуть статус поиска работы кандидата"},{"name":"with_generated_collections","in":"query","type":"boolean","required":false,"description":"Вернуть сгенерированные коллекции"},{"name":"page","in":"query","type":"number","required":false,"description":"Номер страницы"},{"name":"per_page","in":"query","type":"number","required":false,"description":"По умолчанию 20"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /negotiations/{id}","title":"Просмотр отклика или приглашения","httpMethod":"GET","path":"/negotiations/{id}","description":"URL берётся из `items[].url` списка откликов.","params":[{"name":"id","in":"path","type":"string","required":true,"description":"Идентификатор отклика"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"PUT /negotiations/{collection_name}/{nid}","title":"Действие с откликом","httpMethod":"PUT","path":"/negotiations/{collection_name}/{nid}","description":"Меняет работодательское (`employer_state`) или соискательское (`state`) состояние: отложить, пригласить на интервью, отказать. Доступные действия и их URL — в `actions[]` списка откликов; аргументы из `actions[].arguments` передаются как `application/x-www-form-urlencoded`. Успех — `204`.","params":[{"name":"collection_name","in":"path","type":"string","required":true,"description":"Коллекция из collections[].id"},{"name":"nid","in":"path","type":"string","required":true,"description":"Идентификатор отклика"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /common/chats","title":"Список чатов","httpMethod":"GET","path":"/common/chats","description":"","params":[{"name":"page","in":"query","type":"integer","required":false,"description":"Страница, 0–50"},{"name":"per_page","in":"query","type":"integer","required":false,"description":"Чатов на странице, 1–20 (по умолчанию 20)"},{"name":"filter_unread","in":"query","type":"boolean","required":false,"description":"Только непрочитанные"},{"name":"filter_has_text_message","in":"query","type":"boolean","required":false,"description":"Только с активной перепиской (для работодателя)"},{"name":"vacancy_status","in":"query","type":"string","required":false,"description":"all (по умолчанию), with, without"},{"name":"filter_with_vacancy_ids","in":"query","type":"string","required":false,"description":"Список ID вакансий, например [1,2,3] (до 100)"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /common/chats/{chat_id}/messages","title":"Сообщения чата","httpMethod":"GET","path":"/common/chats/{chat_id}/messages","description":"","params":[{"name":"chat_id","in":"path","type":"string","required":true,"description":"Идентификатор чата"},{"name":"start_message_id","in":"query","type":"string","required":false,"description":"С какого сообщения выбирать"},{"name":"limit","in":"query","type":"integer","required":false,"description":"1–50, по умолчанию 10"},{"name":"order","in":"query","type":"string","required":false,"description":"next (по умолчанию) или prev"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /common/chats/{chat_id}/messages","title":"Отправка сообщения в чат","httpMethod":"POST","path":"/common/chats/{chat_id}/messages","description":"Вместе с ключом идемпотентности передаётся либо текст, либо ID загруженных файлов. Успех — `201`; `409` — повтор `idempotency_key`.","params":[{"name":"chat_id","in":"path","type":"string","required":true,"description":"Идентификатор чата"},{"name":"idempotency_key","in":"body","type":"string","required":true,"description":"Уникальный ключ сообщения (UUID)"},{"name":"text","in":"body","type":"string","required":false,"description":"Текст сообщения"},{"name":"file_upload_ids","in":"body","type":"array","required":false,"description":"upload_id загруженного файла (1 элемент)"}],"requestExample":"{\n\"idempotency_key\": \"8abcdef8-4abc-4edf-1234-1234567890ab\",\n\"text\": \"Cъешь же ещё этих мягких французских булок, да выпей чаю\"\n}","responseExample":"","docsUrl":""},{"id":"GET /employers","title":"Поиск работодателей","httpMethod":"GET","path":"/employers","description":"Глубина выдачи — не больше 5000.","params":[{"name":"text","in":"query","type":"string","required":false,"description":"Поиск по названию и описанию"},{"name":"area","in":"query","type":"string","required":false,"description":"Регион; можно несколько"},{"name":"type","in":"query","type":"string","required":false,"description":"Тип из employer_type; можно несколько"},{"name":"only_with_vacancies","in":"query","type":"boolean","required":false,"description":"Только с открытыми вакансиями"},{"name":"sort_by","in":"query","type":"string","required":false,"description":"by_name (по умолчанию) или by_vacancies_open"},{"name":"page","in":"query","type":"number","required":false,"description":"Номер страницы, с 0"},{"name":"per_page","in":"query","type":"number","required":false,"description":"По умолчанию 20, максимум 100"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /employers/{employer_id}","title":"Информация о работодателе","httpMethod":"GET","path":"/employers/{employer_id}","description":"","params":[{"name":"employer_id","in":"path","type":"string","required":true,"description":"Идентификатор работодателя"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /dictionaries","title":"Справочники полей","httpMethod":"GET","path":"/dictionaries","description":"Значения справочников могут меняться в любой момент.","params":[{"name":"locale","in":"query","type":"string","required":false,"description":"Локаль, по умолчанию RU"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /areas","title":"Дерево регионов","httpMethod":"GET","path":"/areas","description":"","params":[{"name":"additional_case","in":"query","type":"string","required":false,"description":"prepositional — название в предложном падеже (только для русской локали)"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /professional_roles","title":"Справочник профессиональных ролей","httpMethod":"GET","path":"/professional_roles","description":"","params":[{"name":"locale","in":"query","type":"string","required":false,"description":"Локаль"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /webhook/subscriptions","title":"Подписка на уведомления","httpMethod":"POST","path":"/webhook/subscriptions","description":"Успех — `201`, в ответе `id` подписки. Только для работодателя.\n\nПример колбэка:","params":[{"name":"actions","in":"body","type":"array","required":true,"description":"Список событий"},{"name":"url","in":"body","type":"string","required":true,"description":"URL для POST-уведомлений"}],"requestExample":"{\n\"action_type\": \"string\",\n\"id\": \"string\",\n\"payload\": {\n\"chat_id\": \"string\",\n\"employer_id\": \"string\",\n\"negotiation_date\": \"string\",\n\"resume_id\": \"string\",\n\"topic_id\": \"string\",\n\"vacancy_id\": \"string\"\n},\n\"subscription_id\": \"string\",\n\"user_id\": \"string\"\n}","responseExample":"","docsUrl":""},{"id":"GET /webhook/subscriptions","title":"Список подписок","httpMethod":"GET","path":"/webhook/subscriptions","description":"","params":[{"name":"HH-User-Agent","in":"header","type":"string","required":true,"description":"Название приложения и почта разработчика"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"DELETE /webhook/subscriptions/{subscription_id}","title":"Удаление подписки","httpMethod":"DELETE","path":"/webhook/subscriptions/{subscription_id}","description":"","params":[{"name":"subscription_id","in":"path","type":"string","required":true,"description":"Идентификатор подписки"}],"requestExample":"","responseExample":"","docsUrl":""}],"codeExamples":[],"errors":[{"code":"400","description":"Ошибка в параметрах запроса; нет заголовка User-Agent/HH-User-Agent"},{"code":"403","description":"Ошибка авторизации, нет прав или требуется капча"},{"code":"404","description":"Объект не найден или недоступен"},{"code":"409","description":"Конфликт (например, повтор idempotency_key)"},{"code":"429","description":"Слишком много запросов или превышен дневной лимит просмотра резюме"},{"code":"500","description":"Внутренняя ошибка"},{"code":"503","description":"Сбой сервиса"}],"limits":"- Глубина выдачи поиска вакансий и резюме — 2000 элементов, работодателей — 5000.\n- `per_page` не больше 100 для поиска.\n- Токен приложения — не чаще раза в 5 минут.\n- Дневной лимит просмотра резюме из поиска — проверяется методом `GET /employers/{employer_id}/managers/{manager_id}/limits/resume`.","gotchas":["Пагинация: `page=N&per_page=M`, нумерация с нуля; ответ — `found`, `per_page`, `pages`, `page`, `items`.","Неизвестные и недокументированные параметры игнорируются; недокументированные поля в ответах не рекомендуется использовать.","Длинные ответы сжимаются gzip.","Поддерживается CORS; для отладки есть `/cors` (HEAD, GET, POST, PUT, DELETE), для JSONP — `?callback=callback_name`.","Вебхуки: на одно приложение — один URL. Ваш сервер отвечает `2xx` или `409` для дубликата (определяется по `id`). Без ответа за 5 секунд колбэк отправляется повторно; доставка не гарантирована. При долгих сбоях подписка блокируется, при отзыве доступа удаляется.","Методы `/negotiations/{nid}/messages` устарели — переписка ведётся через `/common/chats`.","Просмотр резюме с контактами списывает контакт один раз на компанию; если контакты скрыты соискателем, просмотр всё равно спишется — проверяйте `hidden_fields`."],"slug":"hh-api","version":2,"updatedAt":"2026-10-24T17:05:33.381Z","sources":[{"title":"HeadHunter API — документация OpenAPI","url":"https://api.hh.ru/openapi/redoc","kind":"research","addedAt":"2026-10-17T08:17:51.443Z"},{"title":"Вставленный текст","url":"","kind":"import","addedAt":"2026-10-17T08:17:51.443Z"},{"title":"scenarios-hh-api.md","url":"","kind":"import","addedAt":"2026-10-24T17:05:24.802Z"}],"logoUrl":null}