rework.by · v0.4.2

Rework Public API

API вакансий и откликов для работодателей, ATS и сторонних разработчиков. Поля вакансий пишутся в JobSearch (таксономии sector/jobtype/skill, meta опыта, локации, зарплаты и способа отклика) — как в кабинете и XML-фидах.

Базовый URL: https://rework.by/api/v2

Как получить доступ

1. Работодатель

  1. Кабинет работодателя → «Настройки API».
  2. Создайте приложение (Trusted ATS для client_credentials).
  3. Сохраните client_id / client_secret (secret один раз; есть «Новый secret»).
  4. «Согласие на ПДн» — для чтения откликов.
  5. Опционально: webhooks в том же разделе кабинета.

2. ATS / интегратор

  1. Заявка → статус pending (secret ещё нет).
  2. После approve — ключи на email.
  3. Либо OAuth с каждым employer, либо trusted + привязка employer_id (по договору).

OAuth2

TTL: access 3600 с (1 ч) · refresh 2592000 с (30 дн) · authorization code 600 с (10 мин).

Scopes: vacancies, negotiations (нужно ПДн), webhook, employer.

Client credentials (Trusted)

Требует app: is_trusted=1 и привязанный employer_id. Иначе 403 unauthorized_client. Токен с consent_pdn=0 — для откликов всё равно нужно согласие в кабинете.

POST https://rework.by/api/v2/oauth/token
Content-Type: application/json

{"grant_type":"client_credentials","client_id":"...","client_secret":"..."}
{"access_token":"...","token_type":"bearer","expires_in":3600,"refresh_token":"...","scope":"vacancies,negotiations,webhook,employer"}

Authorization code

Employer должен быть залогинен. redirect_uri — из списка приложения. При scope с negotiations — чекбокс ПДн на authorize.

GET https://rework.by/oauth/authorize?client_id=...&redirect_uri=...&scope=vacancies,negotiations,webhook,employer&state=...

POST https://rework.by/api/v2/oauth/token
{"grant_type":"authorization_code","client_id":"...","client_secret":"...","code":"...","redirect_uri":"..."}

Refresh

{"grant_type":"refresh_token","client_id":"...","client_secret":"...","refresh_token":"..."}

Создание вакансии

Списывается слот пакета JobSearch. Без слотов — 402. Город — только из GET /areas (Беларусь). ПДн кандидатов — только через /negotiations, отдельного поиска резюме нет.

POST https://rework.by/api/v2/vacancies
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json

{
  "name": "Оператор линии",
  "description": "<p>Обязанности…</p>",
  "location": {
    "city_id": "164308",
    "address": "ул. Примерная, 1"
  },
  "sector_id": "145",
  "employment_id": "176",
  "experience": { "id": "1-3-years" },
  "salary": { "from": 1500, "to": 2200, "currency": "BYN", "type": "type_1" },
  "application": { "type": "external", "url": "https://company.by/apply" },
  "skill_ids": ["267", "272"],
  "contact_phones": [{ "phone": "+375 25 536-17-17", "comment": "" }],
  "billing_type": "standard"
}

Алиасы: position/body; city_id / area.id; salary.type = type_1type_5 или negotiable; application.type = internal | external (+ url) | with_email (+ email) | none.

Поля API → JobSearch

APIJobSearch meta / taxonomy
namepost_title
description (+ req/cond)post_content
salary.from/tojobsearch_field_job_salary / _max_salary
salary.typejobsearch_field_job_salary_type (type_1type_5, negotiable)
location.country/region/citylocation_location1/2/3 (таблицы JobSearch, только BY)
location.addressjobsearch_field_location_address (адрес на карте, не словарь)
sector_idtaxonomy sector
employment_idtaxonomy jobtype
experience.idmeta experience
skill_idstaxonomy skill
application.typejobsearch_field_job_apply_type
application.urljobsearch_field_job_apply_url (при external)
application.emailjobsearch_field_job_apply_email (при with_email)
contact_phones[]jobsearch_field_job_contact_phones (до 3)
(авто)job_expiry_date из пакета

Словари

Локации — только Беларусь (таблицы jobsearch_*, ~330 городов). country_id в запросе игнорируется.

  • GET /areas — города BY (+ region_id, пагинация page/per_page)
  • GET /dictionaries/locations?depth=1|2|3 — дерево страна → область → город
  • GET /dictionaries/sectors — дерево sector
  • GET /dictionaries/employmentjobtype
  • GET /dictionaries/experiencefresh, 1-3-years, 3-6-years, 6-years
  • GET /dictionaries/skills — taxonomy skill (плоский список)
  • GET /dictionaries/salary-typestype_1type_5, negotiable
  • GET /dictionaries/apply-typesinternal, external, with_email, none

Базовые URL и методы

МетодAuthНазначение
GET /vacanciesнетПоиск опубликованных
GET /employers/me/vacanciesBearer + vacanciesСписок своих вакансий (тот же формат, что поиск)
GET /vacancies/{id}нетКарточка
POST/PUT/DELETE /vacancies/{id}Bearer + vacanciesCRUD своих
GET /vacancies/{id}/negotiations[/{nid}]Bearer + negotiations + ПДнОтклики; PATCH status/comment
GET /me · /me/vacancy_typesBearerКонтекст, слоты
GET/POST /webhooks · DELETE /webhooks/{id}Bearer + webhookПодписки
GET /employers/{id}нетПрофиль компании
GET /areas · /dictionaries/*нетСловари (локации — только BY)

GET /resumes не поддерживается — данные кандидатов только в /vacancies/{id}/negotiations при scope negotiations и согласии на ПДн.

Negotiations

Id отклика: префиксы user_ / email_ / ext_. PATCH: {"status":"...","comment":"..."}.

Webhooks

События: vacancy.created, vacancy.updated, negotiation.created.

POST JSON на ваш URL. Заголовки: X-Rework-Event, X-Rework-Signature = HMAC-SHA256(body, secret) hex. Secret показывается один раз при создании (кабинет или API).

{"event":"vacancy.created","created_at":"...","data":{ ... }}

Ошибки

HTTPКогда
400Валидация (нет name, город не из /areas, неверный application и т.п.)
401Неверный client / токен
402Нет слотов пакета на публикацию
403Нет scope, не trusted CC, нет ПДн на negotiations
404Вакансия / ресурс не найден

Адаптеры ATS

Huntflow

Base: https://rework.by/api/ats/huntflow/v0.1 · Bearer или Basic.

  • GET /version
  • POST/GET/PUT/DELETE /vacancies[/{id}] — position, body, city, salary, sector/profession, employment/schedule, experience
  • GET /vacancies/{id}/responses · .../letters (нужно ПДн)

e-staff

https://rework.by/api/ats/estaff/v2.6/RecruitService — form method=… или SOAP. Поля AddVacancy: Name, Description, City, SalaryFrom/To, Profession/Sector, Employment, Experience…

curl -u CLIENT_ID:CLIENT_SECRET -X POST "https://rework.by/api/ats/estaff/v2.6/RecruitService" -d "method=GetSiteOptions"

Поиск резюме (SearchResumes) не поддерживается — только отклики на вакансии. Полная 1:1 Datex XML — по sample от интегратора.