{"name":"Хантфлоу API v2","vendor":"Хантфлоу","industry":"hr","summary":"API рекрутинговой CRM Хантфлоу: организации и пользователи, вакансии и заявки на вакансии, кандидаты и их резюме, движение кандидатов по этапам подбора, загрузка и распознавание файлов резюме, метки, справочники, вебхуки, офферы, анкеты и журнал действий. Первая версия API устарела и не поддерживается — используется v2.","docsUrl":"https://api.huntflow.ru/v2/docs","coverage":{"included":[],"excluded":[]},"scenarios":[{"id":"dobavit-kandidata-iz-formy-na-sayte","title":"Добавить кандидата из формы на сайте на вакансию","summary":"Отклик с карьерного сайта сразу попадает в Хантфлоу: кандидат, резюме и этап подбора.","steps":["Создай токен: «Настройки» → «API» → «Добавить токен». access_token живёт 7 дней, refresh_token — 14; при ответе 401 с detail = token_expired обнови пару через POST /token/refresh.","Узнай ID организации: GET /accounts — account_id нужен во всех остальных методах.","Загрузи файл резюме: POST /accounts/{account_id}/upload (multipart) с заголовком x-file-parse: true — Хантфлоу распознает ФИО, контакты и опыт. Сохрани id файла.","Создай кандидата: POST /accounts/{account_id}/applicants с first_name, last_name, phone, email и externals — резюме с файлом.","Добавь кандидата на вакансию: POST /accounts/{account_id}/applicants/{applicant_id}/vacancy с vacancy и status — ID этапа подбора (список этапов — /accounts/{account_id}/vacancies/statuses)."],"code":"H=\"Authorization: Bearer $HF_TOKEN\"\nAPI=https://api.huntflow.ru/v2/accounts/<account_id>\n\nFILE_ID=$(curl -s -X POST \"$API/upload\" -H \"$H\" -H 'x-file-parse: true' -F file=@cv.pdf | jq -r .id)\n\nAPPLICANT=$(curl -s -X POST \"$API/applicants\" -H \"$H\" -H 'Content-Type: application/json' \\\n  -d \"{\\\"first_name\\\": \\\"Иван\\\", \\\"last_name\\\": \\\"Петров\\\", \\\"phone\\\": \\\"+79990001122\\\", \\\"email\\\": \\\"ivan@example.ru\\\",\n       \\\"externals\\\": [{\\\"auth_type\\\": \\\"NATIVE\\\", \\\"data\\\": {\\\"body\\\": \\\"Отклик с сайта\\\"}, \\\"files\\\": [$FILE_ID]}]}\" | jq -r .id)\n\ncurl -X POST \"$API/applicants/$APPLICANT/vacancy\" -H \"$H\" -H 'Content-Type: application/json' \\\n  -d '{\"vacancy\": 101, \"status\": 1001, \"comment\": \"Отклик с карьерного сайта\"}'","language":"bash","methods":["POST /token/refresh","GET /accounts","POST /accounts/{account_id}/applicants","POST /accounts/{account_id}/applicants/{applicant_id}/vacancy","POST /accounts/{account_id}/upload"]},{"id":"otkryt-vakansiyu-iz-svoey-sistemy","title":"Открыть вакансию из своей системы","summary":"Заявка на подбор согласована во внутренней системе — вакансия появляется в Хантфлоу.","steps":["Создай вакансию: POST /accounts/{account_id}/vacancies с position, company, money, body, requirements, conditions (HTML) и fill_quotas — квотой найма с deadline и applicants_to_hire.","Добавь коллег-рекрутеров через coworkers, скрыть вакансию от остальных — hidden = true.","Проверь список: GET /accounts/{account_id}/vacancies с state = OPEN и mine = true — только вакансии текущего пользователя."],"code":"curl -X POST https://api.huntflow.ru/v2/accounts/<account_id>/vacancies \\\n  -H \"Authorization: Bearer $HF_TOKEN\" -H 'Content-Type: application/json' \\\n  -d '{\n        \"position\": \"Python-разработчик\",\n        \"company\": \"Отдел разработки\",\n        \"money\": \"200 000 – 300 000 ₽\",\n        \"requirements\": \"<ul><li>Python 3, FastAPI</li></ul>\",\n        \"fill_quotas\": [{\"deadline\": \"2026-12-01\", \"applicants_to_hire\": 2}]\n      }'","language":"bash","methods":["GET /accounts/{account_id}/vacancies","POST /accounts/{account_id}/vacancies"]},{"id":"vygruzit-kandidatov-po-vakansii-i-etapam","title":"Выгрузить кандидатов по вакансии и этапам","summary":"Воронка подбора для отчёта: кто на каком этапе по каждой вакансии.","steps":["Для массовой выгрузки используй курсорный поиск: GET /accounts/{account_id}/applicants/search_by_cursor с vacancy, status (ID этапов) и only_current_status = true — только те, кто сейчас на этапе.","Для следующей страницы передай next_page_cursor из ответа — остальные параметры тогда не учитываются.","Для простых выборок подходит GET /accounts/{account_id}/applicants с vacancy_id и status, постранично через page и count."],"code":"curl -G https://api.huntflow.ru/v2/accounts/<account_id>/applicants/search_by_cursor \\\n  -H \"Authorization: Bearer $HF_TOKEN\" \\\n  -d vacancy=101 -d status=1002 -d only_current_status=true -d count=100","language":"bash","methods":["GET /accounts/{account_id}/applicants","GET /accounts/{account_id}/applicants/search_by_cursor"]},{"id":"poluchat-sobytiya-cherez-vebhuk","title":"Получать события через вебхук","summary":"Реагировать на смену этапа кандидата или новую вакансию сразу: уведомить менеджера, завести сотрудника в HR-системе.","steps":["Создай вебхук: POST /accounts/{account_id}/hooks с url, secret, active = true и webhook_events — нужными событиями (APPLICANT, VACANCY, RESPONSE, OFFER и др.).","Хантфлоу присылает события POST-запросом на url. Используй secret, чтобы отличать настоящие запросы, — способ проверки описан в документации вебхуков.","По ID из события получай актуальные данные: например, GET /accounts/{account_id}/applicants с vacancy_id."],"code":"curl -X POST https://api.huntflow.ru/v2/accounts/<account_id>/hooks \\\n  -H \"Authorization: Bearer $HF_TOKEN\" -H 'Content-Type: application/json' \\\n  -d '{\"url\": \"https://example.ru/huntflow/webhook\", \"secret\": \"s3cr3t_Random_42\", \"active\": true, \"webhook_events\": [\"APPLICANT\", \"VACANCY\"]}'","language":"bash","methods":["GET /accounts/{account_id}/applicants","POST /accounts/{account_id}/hooks"]}],"baseUrls":[{"label":"Боевой","url":"https://api.huntflow.ru/v2"},{"label":"Тестовый (песочница)","url":"https://sandbox.huntflow.dev"},{"label":"Официальный Python-клиент Хантфлоу по умолчанию указывает хост .","url":"https://api.huntflow.ai"}],"auth":{"type":"bearer","description":"Токен создаётся в настройках Хантфлоу: «Настройки» → «API» → «Добавить токен»; выдаётся пара `access_token` и `refresh_token`. Все запросы передают заголовок `Authorization: Bearer <access_token>`.\n\n- `access_token` действует 7 дней, `refresh_token` — 14 дней; если refresh-токен не использовать 14 дней, пару нужно создать заново.\n- Истёкший токен даёт `401` с `type: authorization_error` и `detail: token_expired` — тогда вызывайте `POST /token/refresh`.","example":""},"methods":[{"id":"POST /token/refresh","title":"Обновление токенов","httpMethod":"POST","path":"/token/refresh","description":"В ответе: `access_token`, `refresh_token`, `expires_in`.","params":[{"name":"refresh_token","in":"body","type":"string","required":true,"description":"Refresh-токен"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /me","title":"Текущий пользователь","httpMethod":"GET","path":"/me","description":"Информация о владельце токена.","params":[],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /accounts","title":"Доступные организации","httpMethod":"GET","path":"/accounts","description":"Список организаций, к которым есть доступ; `account_id` из ответа нужен в остальных методах.","params":[],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /accounts/{account_id}/vacancies","title":"Список вакансий","httpMethod":"GET","path":"/accounts/{account_id}/vacancies","description":"","params":[{"name":"account_id","in":"path","type":"integer","required":true,"description":"ID организации"},{"name":"count","in":"query","type":"integer","required":false,"description":"Элементов на странице, по умолчанию 30"},{"name":"page","in":"query","type":"integer","required":false,"description":"Номер страницы, по умолчанию 1"},{"name":"mine","in":"query","type":"boolean","required":false,"description":"Только вакансии, с которыми работает текущий пользователь"},{"name":"state","in":"query","type":"string","required":false,"description":"Состояние вакансии (можно несколько)"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /accounts/{account_id}/vacancies","title":"Создание вакансии","httpMethod":"POST","path":"/accounts/{account_id}/vacancies","description":"Также: `GET`/`PUT`/`PATCH`/`DELETE /accounts/{account_id}/vacancies/{vacancy_id}`; этапы подбора — `GET /accounts/{account_id}/vacancies/statuses`.","params":[{"name":"account_id","in":"path","type":"integer","required":true,"description":"ID организации"},{"name":"position","in":"body","type":"string","required":true,"description":"Название вакансии"},{"name":"company","in":"body","type":"string","required":false,"description":"Отдел или компания"},{"name":"account_division","in":"body","type":"integer","required":false,"description":"ID подразделения"},{"name":"account_region","in":"body","type":"integer","required":false,"description":"ID региона"},{"name":"money","in":"body","type":"string","required":false,"description":"Зарплата"},{"name":"priority","in":"body","type":"integer","required":false,"description":"Приоритет"},{"name":"hidden","in":"body","type":"boolean","required":false,"description":"Скрыть от коллег, по умолчанию false"},{"name":"state","in":"body","type":"string","required":false,"description":"Состояние, по умолчанию OPEN"},{"name":"coworkers","in":"body","type":"array","required":false,"description":"ID коллег, работающих с вакансией"},{"name":"body","in":"body","type":"string","required":false,"description":"Обязанности (HTML)"},{"name":"requirements","in":"body","type":"string","required":false,"description":"Требования (HTML)"},{"name":"conditions","in":"body","type":"string","required":false,"description":"Условия (HTML)"},{"name":"files","in":"body","type":"array","required":false,"description":"ID прикреплённых файлов"},{"name":"fill_quotas","in":"body","type":"array","required":true,"description":"Квота найма: deadline, applicants_to_hire (один элемент)"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /accounts/{account_id}/applicants","title":"Список кандидатов","httpMethod":"GET","path":"/accounts/{account_id}/applicants","description":"","params":[{"name":"account_id","in":"path","type":"integer","required":true,"description":"ID организации"},{"name":"count","in":"query","type":"integer","required":false,"description":"Элементов на странице, по умолчанию 30"},{"name":"page","in":"query","type":"integer","required":false,"description":"Номер страницы, по умолчанию 1"},{"name":"status","in":"query","type":"integer","required":false,"description":"ID этапа подбора"},{"name":"vacancy_id","in":"query","type":"integer","required":false,"description":"ID вакансии"},{"name":"agreement_state","in":"query","type":"string","required":false,"description":"Статус согласия на обработку ПДн; нельзя вместе со status"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /accounts/{account_id}/applicants/search_by_cursor","title":"Поиск кандидатов","httpMethod":"GET","path":"/accounts/{account_id}/applicants/search_by_cursor","description":"Если передан `next_page_cursor`, остальные параметры не учитываются.","params":[{"name":"account_id","in":"path","type":"integer","required":true,"description":"ID организации"},{"name":"next_page_cursor","in":"query","type":"string","required":false,"description":"Курсор следующей страницы"},{"name":"q","in":"query","type":"string","required":false,"description":"Поисковый запрос"},{"name":"status","in":"query","type":"array","required":false,"description":"ID этапов подбора"},{"name":"vacancy","in":"query","type":"array","required":false,"description":"ID вакансий; null — кандидаты без вакансии"},{"name":"only_current_status","in":"query","type":"boolean","required":false,"description":"Только кандидаты, находящиеся сейчас на этапе"},{"name":"account_source","in":"query","type":"array","required":false,"description":"ID источников резюме"},{"name":"count","in":"query","type":"integer","required":false,"description":"Элементов на странице, по умолчанию 30"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /accounts/{account_id}/applicants","title":"Создание кандидата","httpMethod":"POST","path":"/accounts/{account_id}/applicants","description":"Также: `GET`/`PATCH`/`DELETE /accounts/{account_id}/applicants/{applicant_id}`.","params":[{"name":"account_id","in":"path","type":"integer","required":true,"description":"ID организации"},{"name":"first_name","in":"body","type":"string","required":false,"description":"Имя"},{"name":"last_name","in":"body","type":"string","required":false,"description":"Фамилия"},{"name":"middle_name","in":"body","type":"string","required":false,"description":"Отчество"},{"name":"phone","in":"body","type":"string","required":false,"description":"Телефон"},{"name":"email","in":"body","type":"string","required":false,"description":"Email"},{"name":"position","in":"body","type":"string","required":false,"description":"Желаемая должность"},{"name":"company","in":"body","type":"string","required":false,"description":"Компания"},{"name":"money","in":"body","type":"string","required":false,"description":"Зарплатные ожидания"},{"name":"birthday","in":"body","type":"string","required":false,"description":"Дата рождения"},{"name":"photo","in":"body","type":"integer","required":false,"description":"ID фото"},{"name":"externals","in":"body","type":"array","required":false,"description":"Резюме (одно): auth_type, account_source, data.body, files"},{"name":"social","in":"body","type":"array","required":false,"description":"Соцсеть (одна): social_type (TELEGRAM), value"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /accounts/{account_id}/applicants/{applicant_id}/vacancy","title":"Добавление кандидата на вакансию","httpMethod":"POST","path":"/accounts/{account_id}/applicants/{applicant_id}/vacancy","description":"Смена этапа по уже добавленной вакансии — `PUT` по тому же пути.","params":[{"name":"account_id","in":"path","type":"integer","required":true,"description":"ID организации"},{"name":"applicant_id","in":"path","type":"integer","required":true,"description":"ID кандидата"},{"name":"vacancy","in":"body","type":"integer","required":true,"description":"ID вакансии"},{"name":"status","in":"body","type":"integer","required":true,"description":"ID этапа подбора"},{"name":"comment","in":"body","type":"string","required":false,"description":"Комментарий"},{"name":"rejection_reason","in":"body","type":"integer","required":false,"description":"ID причины отказа (для этапа отказа)"},{"name":"fill_quota","in":"body","type":"integer","required":false,"description":"ID квоты (для этапа «вышел на работу»)"},{"name":"employment_date","in":"body","type":"string","required":false,"description":"Дата выхода (для этапа «вышел на работу»)"},{"name":"files","in":"body","type":"array","required":false,"description":"ID файлов, до 15"},{"name":"calendar_event","in":"body","type":"object","required":false,"description":"Событие календаря (интервью)"},{"name":"email","in":"body","type":"object","required":false,"description":"Письмо кандидату"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /accounts/{account_id}/upload","title":"Загрузка и распознавание файла","httpMethod":"POST","path":"/accounts/{account_id}/upload","description":"Файл отправляется в `multipart/form-data`.","params":[{"name":"account_id","in":"path","type":"integer","required":true,"description":"ID организации"},{"name":"file","in":"body","type":"file","required":true,"description":"Файл"},{"name":"x-file-parse","in":"header","type":"boolean","required":false,"description":"Распознать поля резюме"},{"name":"x-ignore-lastname","in":"header","type":"string","required":false,"description":"Фамилии, которые игнорировать при распознавании"},{"name":"x-ignore-email","in":"header","type":"string","required":false,"description":"Email, которые игнорировать"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /accounts/{account_id}/hooks","title":"Создание вебхука","httpMethod":"POST","path":"/accounts/{account_id}/hooks","description":"","params":[{"name":"account_id","in":"path","type":"integer","required":true,"description":"ID организации"},{"name":"url","in":"body","type":"string","required":true,"description":"URL вебхука"},{"name":"secret","in":"body","type":"string","required":true,"description":"Секретный ключ"},{"name":"active","in":"body","type":"boolean","required":true,"description":"Активен ли вебхук"},{"name":"webhook_events","in":"body","type":"array","required":true,"description":"APPLICANT, VACANCY, RESPONSE, OFFER, VACANCY-REQUEST, RECRUITMENT-EVALUATION, SURVEY-QUESTIONARY"},{"name":"type","in":"body","type":"string","required":false,"description":"USER (по умолчанию) или APPLICATION"}],"requestExample":"","responseExample":"","docsUrl":""}],"codeExamples":[],"errors":[{"code":"401","description":"Нет авторизации или токен истёк (type: authorization_error, detail: token_expired)"}],"limits":"","gotchas":["Почти все методы работают в контексте организации: `account_id` берётся из `GET /accounts`.","ID этапов подбора — из `GET /accounts/{account_id}/vacancies/statuses`, причины отказа — из `/rejection_reasons`, источники резюме — из `/applicants/sources`.","Для массовой выборки кандидатов удобнее курсорный поиск `search_by_cursor`.","Есть также методы заявок на вакансии, мультивакансий, меток, справочников, регионов, подразделений, офферов, анкет, журнала действий (`action_logs`) и производственного календаря."],"slug":"huntflow","version":2,"updatedAt":"2026-10-24T17:05:33.564Z","sources":[{"title":"Huntflow API Reference v2","url":"https://api.huntflow.ru/v2/docs","kind":"research","addedAt":"2026-10-17T07:20:34.264Z"},{"title":"Спецификация OpenAPI","url":"https://api.huntflow.ru/v2/openapi.json","kind":"research","addedAt":"2026-10-17T07:20:34.264Z"},{"title":"Официальный Python-клиент Хантфлоу","url":"https://github.com/huntflow/huntflow-api-client-python","kind":"research","addedAt":"2026-10-17T07:20:34.264Z"},{"title":"Хантфлоу API v1 (устарел)","url":"https://github.com/huntflow/api","kind":"research","addedAt":"2026-10-17T07:20:34.264Z"},{"title":"Вставленный текст","url":"","kind":"import","addedAt":"2026-10-17T07:20:34.264Z"},{"title":"scenarios-huntflow.md","url":"","kind":"import","addedAt":"2026-10-24T17:05:24.926Z"}],"logoUrl":null}