Skip to content

Latest commit

 

History

History
684 lines (563 loc) · 40.5 KB

resumes.md

File metadata and controls

684 lines (563 loc) · 40.5 KB

Резюме

Список резюме авторизованного пользователя

!! Данный метод доступен в OpenAPI

Просмотр резюме

!! Данный метод доступен в OpenAPI

Создание резюме

!! Данный метод доступен в OpenAPI

Редактирование резюме

PUT /resumes/{resume_id} — редактирование существующего. В качестве тела запроса используется json в том же формате, что отдается при GET запросе. При этом для полей с данными справочников из передаваемой JSON-структуры используются только id передаваемых данных. Например, в резюме в поле владения языками, указан русский как родной:

{
    "language": [
        {
            "id": "rus",
            "name": "Русский",
            "level": {
                "id": "l1",
                "name": "Родной"
            }
        }
     ]
   }

Для того, чтобы добавить английский с уровнем знания «B2 — Средне-продвинутый», необходимо отправить следующий JSON:

{
    "language": [
        {
            "id": "rus",
            "name": "Русский",
            "level": {
                "id": "l1",
                "name": "родной"
            }
        },
        {
            "id": "eng",
            "level": {
                "id": "b2"
            }
        }
    ]
  }

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

При отправке данные заменяют уже существующие данные указанного параметра. Каждый параметр можно отправлять отдельно от остальных.

Также ознакомьтесь с правилами заполнения параметров резюме в разделе Условия заполнения полей резюме

Параметры:

  • last_name — фамилия;
  • first_name — имя;
  • middle_name — отчество;
  • birth_date — день рождения (ГГГГ-ММ-ДД);
  • gender — пол. Элемент справочника gender;
  • photo — фотография пользователя. см. артефакты;
  • portfolio — портфолио пользователя. см. артефакты;
  • area — город проживания. Элемент справочника areas;
  • metro — ближайшая станция метро. Элемент справочника metro. Если передать метро не принадлежащее переданной area, поле проигнорируется Имеет смысл указывать только для area с метро;
  • relocation — возможен ли переезд в другой город. Состоит из полей:
    • type — элемент справочника relocation_type;
    • area — город, в который возможен переезд (список). Имеет смысл только с соответствующим полем type. Элемент справочника areas;
  • business_trip_readiness — готовность к командировкам. Элемент справочника business_trip_readiness
  • contact — контактная информация (список). Про обязательность полей и данных смотрите в условиях заполнения контактов. Состоит из полей:
    • type — элемент справочника preferred_contact_type
    • value — значение контакта. Для телефона состоит из четырех полей (country , city, number, formatted), для электронного адреса — строка.
    • preferred — предпочитаемый вид связи (true или false);
    • comment — комментарий к контакту;
  • site — присутствие на других сайтах. Состоит из полей:
    • type — тип сайта. Элемент справочника resume_contacts_site_type;
    • url — ссылка на профиль, либо идентификатор на стороннем сайте/сервисе;
  • title — желаемая должность;
  • professional_roles — профессиональные роли соискателя (список). Элемент справочника professional_roles;
  • salary — желаемая зарплата. Состоит из полей:
    • amount — сумма;
    • currency — идентификатор валюты;
  • employments — занятость. Элементы справочника employment
  • schedules — график работы. Список из элементов справочника schedule
  • education — образование. Состоит из полей:
    • elementary — среднее образование (список). Обычно заполняется только при отсутствии высшего образования. Состоит из полей:
      • year — год окончания;
      • name — название учебного заведения;
    • additional — курсы повышения квалификации (список). Состоит из полей:
      • organization — организация, проводившая курс;
      • name — название курса;
      • result — специальность / специализация;
      • year — год окончания;
    • attestation — тесты, экзамены (список):
      • organization — организация, проводившая тест или экзамен;
      • name — название тест или экзамена;
      • result — специальность / специализация;
      • year — год сдачи;
    • primary — образование выше среднего (список). Состоит из полей:
    • level — уровень образования. Элемент справочника education_level
  • language — владение языками (список).
    • id - значение из справочника languages
    • level - значение из справочника language_level
  • experience — опыт работы (список). Состоит из полей:
    • company — организация;
    • company_id — идентификатор организации, можно получить из подсказок по организациям;
    • area — регион расположения организации. Элемента справочника areas;
    • company_url — сайт компании;
    • industries — отрасли компании. Элемент справочника /industries
    • position — должность;
    • start — начало работы (ГГГГ-ММ-ДД);
    • end — окончание работы (ГГГГ-ММ-ДД);
    • description — обязанности, функции, достижения;
  • skills — дополнительная информация, описание навыков в свободной форме;
  • skill_set — ключевые навыки (список уникальных строк).
  • citizenship — гражданство (список). Элемента справочника areas;
  • work_ticket — разрешение на работу (список). Элемента справочника areas;
  • travel_time — желательное время в пути до работы. Элемент справочника travel_time;
  • recommendation — рекомендации (список). Состоит из полей:
    • name — имя;
    • position — должность;
    • organization — организация;
  • resume_locale — локаль резюме. Элемент справочника локали резюме.
  • driver_license_types - cписок категорий водительских прав соискателя. Элемент справочника тип водительских прав.
  • has_vehicle - наличие личного автомобиля у соискателя
  • hidden_fields - скрытые поля в резюме (список). Элемент справочника resume_hidden_fields.
  • access - видимость резюме
    • type - тип видимости. Элемент справочника resume_access_type

Параметры, берущиеся из подсказок (name_id, organization_id, result_id, company_id), являются опциональными. При этом, если данные параметры указаны, то в момент сохранения происходят проверки на их корректность. В случае ошибок заполнения, таких как передача несуществующих идентификаторов или не связанных друг с другом идентификаторов университета и факультета, будет возвращён статус HTTP 400 Bad Request с указанием родительского поля, в котором произошла ошибка (education, experience). Дополнительно, при указании в опыте работы company_id название компании будет подменено на название компании из подсказок.

Ответ

Успешный ответ на создание резюме приходит с кодом 201 Created, в заголовке Location при этом будет url созданного резюме:

Location: /resumes/0123456789abcdef

Успешный ответ на обновление резюме приходит с кодом 204 No Content и не содержит тела.

Ошибки

  • 403 Forbidden – запрос не от соискателя.
  • 400 Bad Request - ошибка в полях резюме. Дополнительно придет расширенная информация по ошибкам.
  • 404 Not Found – резюме не найдено или недоступно текущему пользователю (при обновлении)
  • 400 Bad Request - превышено допустимое количество резюме (при создании). Дополнительно будет указана ошибка с type=resumes, value=total_limit_exceeded.

Ошибки в использовании полей при создании и редактировании резюме

При создании и редактировании резюме значения в полях проходят проверки (валидация) - формат использования полей и значений (см. Параметры), существование данных, бизнес правила.

При ошибках в ответ придет 400 Bad Request с телом:

{
    "errors": [
        {
            "type": "bad_json_data",
            "value": "year",
            "reason": "min_value",
            "description": "Значение ниже допустимого",
            "pointer": "/education/additional/1/year"
        },
        {
            "type": "bad_json_data",
            "value": "access",
            "reason": "required",
            "description": "Идентификатор доступа к резюме является обязательным полем",
            "pointer": "/access/type/id"
        }
    ]
}
Имя Тип Описание
type string Класс ошибки (всегда принимает значение bad_json_data)
reason string Причина ошибки
value string Поле, в котором обнаружена ошибка
description string Описание ошибки для пользователя
pointer string Указатель на данные с ошибкой во входящем сообщении

Ошибка валидации расширяет стандартную ошибку API.

Возможные причины ошибок:

Код Пояснение
required поле является обязательным для заполнения
not_found не найдено значение по переданному id
faculty_without_university нельзя установить факультет без университета
not_in_dictionary не найдено значение по переданному id в справочнике
not_a_leaf значение не должно содержать потомков
end_date_before_start_date значение end меньше start
not_country значение area должно быть страной (см. справочник стран)
more_than_one_native_language указано более одного родного языка
must_contain_unique переданные значения должны быть уникальны
from_different_profareas переданные значения из разных отраслей
duplicate значение уже было использовано
bad_image_type переданное значение неправильного типа (для portfolio необходимы значения из get /artifacts/portfolio, для photo - get /artifacts/photo)
processing объект в процессе обработки
preferred_must_be_unique предпочитаемый тип связи должен быть уникальным
preferred_contact_not_specified предпочитаемый тип связи не указан или не указано значение контакта
need_country_city_number_or_formatted телефон в контактах указан в неверном формате (см. условия заполнения контактов в резюме)
invalid ошибка в значении поля (поля должны соответствовать условиям заполнения)
greater_than_max значение больше максимума
less_than_min значение меньше минимума
earlier_than_min указанная дата раньше минимально возможной
later_than_max указанная дата позже максимально возможной
length_less_than_min количество символов в поле меньше минимума
length_greater_than_max количество символов в поле больше максимума
size_less_than_min количество элементов меньше минимума
size_greater_than_max количество элементов больше максимума
send_metro_without_area не передано значение поля area при заполненном метро
not_belong_this_city указанного метро нет в указанном городе
required_with_not_started_career необходимо отправлять опыт работы, если специализация не начало карьеры
not_match_regexp значение не соответствует регулярному выражению
more_than_one передано более одного email
not_available недопустимое значение

pointer для указания использует формат JsonPointer RFC 6901. Например, /education/additional/1/year значит, что ошибка в поле из сообщения (year - должно быть числом):

{
    "title": "Программист Python",
    "education": {
        "additional": [
            {
                "name": "Курс начальной подготовки",
                "organization": "Проводившая организация",
                "result": "Общие знания Python",
                "year": 2006
            },
            {
                "name": "Курс повышения квалификации",
                "organization": "Проводившая организация",
                "result": "Углубленные знания Python",
                "year": "2012 - ошибка"
            }
        ]
    },
    "salary": {
        "amount": 100500,
        "currency": "RUR"
    }
}

Публикация резюме

POST /resumes/{resume_id}/publish

При первой публикации резюме оно становится доступно для использования.

Повторная публикация означает обновление даты резюме. Ключ next_publish_at у резюме указывает время, когда можно обновить резюме.

Ответ

В случае успешной публикации вернётся код ответа 204 No Content без тела.

Ошибки

  • 429 Too Many Requests - если обновление ещё недоступно.
  • 400 Bad Request - если публикация или продление невозможны. Возможные причины:
    • не заполнены обязательные поля (чтобы понять, что именно не заполнено, можно вызвать урл получения резюме и посмотреть поле mandatory),
    • не отредактированы поля после блокировки модератором,
    • резюме находится на проверке у модератора.
  • 403 Forbidden - если операция публикации резюме недоступна из-за отсутствия прав (например, для работодателя).

Информация о статусе резюме и готовности резюме к публикации

!! Данный метод доступен в OpenAPI

Клонирование резюме

!! Данный метод доступен в OpenAPI

Удаление резюме

!! Данный метод доступен в OpenAPI

Проверка возможности создания резюме

Запрос

GET /resumes/creation_availability

Ответ

Успешный ответ приходит с кодом 200 OK и содержит тело:

{
    "is_creation_available": true,
    "max": 20,
    "created": 2,
    "remaining": 18
}

где:

Имя Тип Описание
is_creation_available boolean Флаг, который показывает, доступно ли создание новых резюме для данного пользователя
max number Максимально возможное количество резюме
created number Количество уже созданных резюме
remaining number Количество доступных для создания резюме

Ошибки

  • 403 Forbidden – запрос не от соискателя.

Условия заполнения полей резюме

!! Данный метод доступен в OpenAPI

Условия заполнения полей нового резюме

!! Данный метод доступен в OpenAPI

Условия заполнения контактов в резюме

При заполнении контактов в резюме необходимо учитывать следующие условия:

  • В резюме обязательно должен быть указан email (и он может быть только один).

  • В резюме должен быть указан хотя бы один телефон, причём можно указывать только один телефон каждого типа.

  • Комментарий можно указывать только для телефонов, для email комментарий не сохранится.

  • В контакте типа 'email' value — это email, а для телефонов — объект.

Пример сообщения для изменения контактов в резюме:

{
    "contact": [
        {
            "type": {
                "id": "email"
            },
            "value": "[email protected]"
        },
        {
            "type": {
                "id": "cell"
            },
            "value": {
                "country": "7",
                "city": "123",
                "number": "4567890",
                "preferred": true
            }
        },
        {
            "type": {
                "id": "home"
            },
            "value": {
                "formatted": "+7(499)9078456"
            },
            "comment": "Звонить до 21:00"
        }
    ]
}

Обязательно указать либо телефон полностью в поле formatted, либо все три части телефона по отдельности в полях country, city и number. Если указано и то, и то, используются данные из разделенного телефона. В поле formatted допустимо указание дополнительных символов: пробелов, скобок, дефисов. В раздельных полях допустимы только цифры.

Дополнительные правила заполнения полей резюме

Существует ещё несколько правил заполнения резюме, которые не укладываются в представленный выше формат:

  • Нельзя создавать несколько резюме с одинаковым title.

  • Специализации должны быть из одной профессиональной области.

  • Город проживания должен быть из справочника /areas и при этом у выбранного города не должно быть потомков, т.е. нельзя указать город проживания «Россия».

  • Ближайшая станция метро должна находиться в городе проживания.

  • Для специализаций из профессиональной области Начало карьеры, студенты (id=15) можно не указывать опыт работы и навыки. Для остальных профобластей данные поля должны содержать хотя бы по одной записи.

  • Часть полей резюме являются read-only, их нельзя изменить при помощи POST/PUT на /resumes.

Статус резюме

Ключ status определяет текущее состояние резюме и содержит элемент справочника resume_status. После создания нового резюме оно находится в статусе 'not_published'. В этом статусе резюме никому не видно, пользователь начинает его наполнять и сохранять (незаполненные обязательные поля можно увидеть в списке progress.mandatory).

После того, как все обязательные поля будут заполнены, флаг can_publish_or_update будет установлен в true, и резюме можно будет опубликовать. Публикация резюме переводит его в статус published. В этом статусе резюме доступно для поиска, если это позволяет видимость резюме.

После перехода в статус published, резюме попадает в поле зрения модераторов и может быть заблокировано (статус blocked), если поля резюме некорректно или малоинформативно заполнены. Причины блокировки резюме можно найти в ключе moderation_note. Заблокированное резюме пропадает из поиска и не может быть использовано для отклика на вакансию.

После исправления, резюме можно отправить на повторное рассмотрение модератору. В этом случае резюме переходит в статус on_moderation, откуда может снова перейти в blocked или published, в зависимости от решения модератора.

После публикации резюме (статус установлен в published) его нельзя перевести обратно в not_published, но можно скрыть, настроив видимость резюме.

В статусе published резюме можно использовать для отклика на вакансию, а так же оно появится в списке подходящих для отклика, если им еще не откликались на эту вакансию.

Видимость резюме

У каждого резюме есть настройка видимости access, которая определяет, кому будет доступно резюме в поиске и по прямой ссылке. Формат поля в резюме:

{
    "access": {
        "type": {
            "id": "clients",
            "name": "видно всем компаниям, зарегистрированным на HeadHunter"
        }
    }
}

После публикации резюме доступно для поиска всем работодателям. Чтобы это изменить (например, работа найдена и нужно скрыть резюме из поиска), следует поменять видимость резюме. За это отвечает ключ access.type. Тип видимости — элемент справочника resume_access_type.

‼️ С первого сентября 2021 года тип видимости с id everyone (видно всему интернету) стал недоступен для сохранения из-за ограничений законодательства.

Код Описание
no_one Резюме такого типа никому не видно. Но им можно откликнуться на вакансию, при этом резюме сменит тип на whitelist.
whitelist Резюме не видно никому, кроме указанных компаний. Если откликнуться на вакансию компании, которая не входит в список, компания автоматически в него попадёт. См. списки видимости резюме.
blacklist Резюме доступно для поиска и просмотра всем компаниям, за исключением указанных. Если откликнуться на вакансию компании из черного списка, то компания вычеркивается из него автоматически. См. списки видимости резюме.
clients Резюме доступно всем зарегистрированным компаниям на hh.ru.
everyone Резюме доступно всем без исключения (всему интернету). Этот тип не доступен для сохранения.
direct Резюме доступно только по прямой ссылке (ссылка указана в ключе alternate_url).

Списки видимости резюме

Некоторые типы видимости, например whitelist и blacklist, подразумевают наличие списка работодателей, для которых резюме должно быть видимо или скрыто. См. управление списками видимости резюме.

Получение списка типов видимости резюме

Запрос

GET /resumes/{resume_id}/access_types

где:

  • resume_id — идентификатор резюме

Ответ

Успешный ответ приходит с кодом 200 OK и содержит тело:

{
    "items": [
        {
            "id": "everyone",
            "name": "видно всему интернету"
        },
        {
            "id": "no_one",
            "name": "не видно никому"
        },
        {
            "id": "clients",
            "name": "видно всем компаниям, зарегистрированным на HeadHunter"
        },
        {
            "id": "whitelist",
            "name": "видно выбранным компаниям",
            "list_url": "https://api.hh.ru/resumes/{resume_id}/whitelist",
            "total": 3,
            "limit": 2000
        },
        {
            "id": "blacklist",
            "name": "скрыто от выбранных компаний",
            "list_url": "https://api.hh.ru/resumes/{resume_id}/blacklist",
            "total": 5,
            "limit": 2000,
            "active": true
        },
        {
            "id": "direct",
            "name": "доступно только по прямой ссылке"
        }
    ],
    "auto_hide_time_options": [
        {
            "id": "month_12",
            "name": "1 год"
        },
        {
            "id": "month_10",
            "name": "10 месяцев",
            "active": true
        },
        {
            "id": "month_8",
            "name": "8 месяцев"
        }
    ]
}
Имя Тип Описание
items array Доступные типы видимости резюме.
items[].id string Идентификатор типа видимости.
items[].name string Имя типа видимости.
items[].active boolean или null Выбран ли тип видимости.
items[].list_url string Адрес списка (только для типов blacklist и whitelist).
items[].total number Количество компаний, добавленных в соответствующий список видимости (только для типов blacklist и whitelist).
items[].limit number Максимальное количество компаний в списке видимости (только для типов blacklist и whitelist).
auto_hide_time_options array Варианты времени автоскрытия резюме при неактивности пользователя, это поле возвращается только для пользователей rabota.by.
auto_hide_time_options[].id string Идентификатор варианта автоскрытия.
auto_hide_time_options[].name string Название варианта автоскрытия.
auto_hide_time_options[].active boolean или null Выбран ли вариант автоскрытия.

Ошибки

  • 403 Forbidden — пользователь не является соискателем.
  • 404 Not Found — резюме с указанным идентификатором не найдено или недоступно текущему пользователю.

См. также управление списками видимости резюме.

История просмотра резюме

!! Данный метод доступен в OpenAPI

Поиск по вакансиям, похожим на резюме

Данные доступны только автору резюме.

Запрос

!! Данный метод доступен в OpenAPI