Ограничения по сотрудничеству с исполнителями (Блэклисты)
Ограничение — запрет работать с конкретным исполнителем, заведённый компанией по ИНН. Ограничение либо бессрочное, либо действует до названной даты; сам названный день считается ограниченным целиком, по московскому времени.
У ограничения есть источник (reason). Через этот API заводятся только ручные ограничения
(MANUAL) — их же и можно снять. Источник EX_EMPLOYEE зарезервирован под кадровые ограничения
(422-ФЗ: доходы от бывшего работодателя не подпадают под НПД в течение 24 месяцев после
увольнения); такие записи заводятся вне этого API и вручную не снимаются.
Записи не агрегируются: у одного ИНН может быть по одной записи на каждый источник, и в выдаче фильтра такой ИНН встретится дважды.
Все методы требуют доступ org.contractor-restrictions.read или
org.contractor-restrictions.write и scope contractor в токене.
Установка ограничения сотрудничества с исполнителем
Устанавливает ограничение по ИНН. Если ограничение для этого ИНН уже заведено — обновляет срок и
комментарий, повторный вызов ошибкой не является. Требует доступ org.contractor-restrictions.write.
Срок задаётся датой окончания. Без срока ограничение бессрочное.
Запрос
Метод: POST URL: https://b2b.selfwork.ru/openapi/v2/organisation/{organisationId}/contractor-restrictions
Path Parameters
| Параметр | Тип | Обязательное поле | Пример | Описание |
|---|---|---|---|---|
| organisationId | string (uuid) | Да | 550e8400-e29b-41d4-a716-446655440000 | ID организации |
Заголовки
| Заголовок | Тип | Обязательный | Описание |
|---|---|---|---|
| x-idempotency-key | string | Да | Ключ идемпотентности. Повтор с тем же ключом и телом вернёт сохранённый ответ |
Request Body
| Поле | Тип | Обязательное поле | Описание |
|---|---|---|---|
| inn | string | Да | ИНН исполнителя — 12 цифр (физическое лицо) |
| restrictedUntil | string | Нет | Дата окончания ограничения, ISO 8601. Ограничение действует весь названный день |
| comment | string | Нет | Комментарий |
restrictedUntilне передан — ограничение бессрочное. Повторный вызов по тому же ИНН перезаписывает срок и комментарий значениями из нового тела: не переданное поле станетnull, а не сохранит прежнее значение.
Пример запроса
curl -X 'POST' \
"https://b2b.selfwork.ru/openapi/v2/organisation/550e8400-e29b-41d4-a716-446655440000/contractor-restrictions" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-H "x-idempotency-key: 97c5678a-8c6a-4688-8452-68ab606fe049" \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ" \
-d '{
"inn": "123456789012",
"restrictedUntil": "2026-05-05T00:00:00.000Z",
"comment": "Расторжение договора по инициативе компании"
}'
Пример успешного ответа
{
"requestId": "97c5678a-8c6a-4688-8452-68ab606fe049",
"result": {
"id": "019d0abb-cccc-7fcc-94a7-873f55b527c3",
"organisationId": "550e8400-e29b-41d4-a716-446655440000",
"inn": "123456789012",
"reason": "MANUAL",
"restrictedUntil": "2026-05-05T00:00:00.000Z",
"comment": "Расторжение договора по инициативе компании",
"createdAt": "2026-05-01T10:30:00.000Z",
"updatedAt": "2026-05-01T10:30:00.000Z"
},
"success": true
}
Описание полей ответа
| Поле | Тип | Описание |
|---|---|---|
| requestId | string (uuid) | Уникальный идентификатор запроса |
| success | boolean | Статус выполнения запроса |
| result | object | Установленное ограничение |
| id | string (uuid) | Идентификатор ограничения |
| organisationId | string (uuid) | ID организации |
| inn | string | ИНН исполнителя |
| reason | string | Источник ограничения (см. справочник ниже) |
| restrictedUntil | string, null | Дата окончания ограничения. null — бессрочно |
| comment | string, null | Комментарий |
| createdAt | string | Дата создания |
| updatedAt | string | Дата последнего изменения |
Справочник источников (reason)
| Источник | Описание |
|---|---|
| MANUAL | Ограничение заведено компанией вручную. Только такое можно снять |
| EX_EMPLOYEE | Ограничение НПД, вычисленное по кадровому реестру. Истекает само |
Этот метод заводит только ограничения с источником MANUAL.
Возможные ошибки
| Code | Описание |
|---|---|
| VALIDATION_ERROR | Ошибка валидации параметров или тела запроса |
| FORBIDDEN_ERROR | В токене нет необходимого scope или доступа |
| IDEMPOTENCY_KEY_REQUIRED | Не передан заголовок x-idempotency-key |
| IDEMPOTENCY_CONFLICT | Ключ идемпотентности уже использован с другим телом |
| UNKNOWN_ERROR | Ошибка сервера |
Фильтр ограничений сотрудничества
Возвращает список ограничений организации. Записи не агрегируются: один ИНН может встретиться
дважды — ручным ограничением и кадровым. Требует доступ org.contractor-restrictions.read.
Запрос
Метод: POST URL: https://b2b.selfwork.ru/openapi/v2/organisation/{organisationId}/contractor-restrictions/filter
Общая структура запроса описана в разделе Фильтрация: общая структура.
Path Parameters
| Параметр | Тип | Обязательное поле | Пример | Описание |
|---|---|---|---|---|
| organisationId | string (uuid) | Да | 550e8400-e29b-41d4-a716-446655440000 | ID организации |
Доступные фильтры (filters)
| Имя (name) | Тип значения (value) | Пример значения | Описание |
|---|---|---|---|
| INN | array[string] | ["123456789012"] | Фильтрация по ИНН исполнителей |
| REASON | array[string] | ["MANUAL"] | Источник ограничения (см. справочник ниже) |
| ACTIVE | boolean | true | true — только действующие ограничения; false — только истёкшие |
Доступные сортировки
| Поле (field) | Описание |
|---|---|
| CREATED_AT | Дата создания ограничения |
| UPDATED_AT | Дата последнего изменения |
| RESTRICTED_UNTIL | Дата окончания ограничения |
| INN | ИНН исполнителя |
Поля, обрабатываемые по query
Текстовый поиск (query) выполняет поиск частичного совпадения по ИНН исполнителя.
Справочник источников (reason)
| Источник | Описание |
|---|---|
| MANUAL | Ограничение заведено компанией вручную |
| EX_EMPLOYEE | Ограничение НПД, вычисленное по кадровому реестру |
Пример запроса
curl --location "https://b2b.selfwork.ru/openapi/v2/organisation/550e8400-e29b-41d4-a716-446655440000/contractor-restrictions/filter" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ВАШ_API_КЛЮЧ" \
--data '{
"filters": [
{ "name": "REASON", "value": ["MANUAL"] },
{ "name": "ACTIVE", "value": true }
],
"order": [
{ "field": "CREATED_AT", "sort": "DESC" }
],
"pagination": {
"limit": 10,
"lastId": null
}
}'
Пример успешного ответа
{
"requestId": "97c5678a-8c6a-4688-8452-68ab606fe049",
"result": {
"lastId": "019d0abb-cccc-7fcc-94a7-873f55b527c3",
"items": [
{
"id": "019d0abb-cccc-7fcc-94a7-873f55b527c3",
"organisationId": "550e8400-e29b-41d4-a716-446655440000",
"inn": "123456789012",
"reason": "MANUAL",
"restrictedUntil": "2026-05-05T00:00:00.000Z",
"comment": "Расторжение договора по инициативе компании",
"createdAt": "2026-05-01T10:30:00.000Z",
"updatedAt": "2026-05-01T10:30:00.000Z"
},
{
"id": "019d0abb-dddd-7fcc-94a7-873f55b527d4",
"organisationId": "550e8400-e29b-41d4-a716-446655440000",
"inn": "210987654321",
"reason": "EX_EMPLOYEE",
"restrictedUntil": null,
"comment": "работал по 01.03.2024",
"createdAt": "2026-04-12T08:05:00.000Z",
"updatedAt": "2026-04-12T08:05:00.000Z"
}
]
},
"success": true
}
Описание полей ответа
| Поле | Тип | Описание |
|---|---|---|
| requestId | string (uuid) | Уникальный идентификатор запроса |
| success | boolean | Статус выполнения запроса |
| result | object | Контейнер с данными ответа |
| result.lastId | string, null | ID последнего элемента в текущем списке (для пагинации) |
| result.items | array[obj] | Массив найденных ограничений |
| id | string (uuid) | Идентификатор ограничения |
| organisationId | string (uuid) | ID организации |
| inn | string | ИНН исполнителя |
| reason | string | Источник ограничения |
| restrictedUntil | string, null | Дата окончания ограничения. null — бессрочно |
| comment | string, null | Комментарий |
| createdAt | string | Дата создания |
| updatedAt | string | Дата последнего изменения |
Возможные ошибки
| Code | Описание |
|---|---|
| VALIDATION_ERROR | Ошибка валидации тела запроса |
| FORBIDDEN_ERROR | В токене нет необходимого scope или доступа |
| UNKNOWN_ERROR | Ошибка сервера |
Получение ограничения сотрудничества
Возвращает одно ограничение по его идентификатору. Состав ответа тот же, что у элемента списка
в фильтре. Требует доступ org.contractor-restrictions.read.
Метод возвращает ровно одну запись, а у ИНН может быть несколько ограничений с разными источниками — полная картина по человеку собирается фильтром с условием по ИНН.
Запрос
Метод: GET URL: https://b2b.selfwork.ru/openapi/v2/organisation/{organisationId}/contractor-restrictions/{restrictionId}
Path Parameters
| Параметр | Тип | Обязательное поле | Описание |
|---|---|---|---|
| organisationId | string (uuid) | Да | ID организации |
| restrictionId | string (uuid) | Да | Идентификатор ограничения |
Пример запроса
curl -X 'GET' \
"https://b2b.selfwork.ru/openapi/v2/organisation/550e8400-e29b-41d4-a716-446655440000/contractor-restrictions/019d0abb-cccc-7fcc-94a7-873f55b527c3" \
-H "accept: application/json" \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ"
Пример успешного ответа
{
"requestId": "97c5678a-8c6a-4688-8452-68ab606fe049",
"result": {
"id": "019d0abb-cccc-7fcc-94a7-873f55b527c3",
"organisationId": "550e8400-e29b-41d4-a716-446655440000",
"inn": "123456789012",
"reason": "MANUAL",
"restrictedUntil": "2026-05-05T00:00:00.000Z",
"comment": "Расторжение договора по инициативе компании",
"createdAt": "2026-05-01T10:30:00.000Z",
"updatedAt": "2026-05-01T10:30:00.000Z"
},
"success": true
}
Описание полей ответа
| Поле | Тип | Описание |
|---|---|---|
| requestId | string (uuid) | Уникальный идентификатор запроса |
| success | boolean | Статус выполнения запроса |
| result | object | Ограничение |
| id | string (uuid) | Идентификатор ограничения |
| organisationId | string (uuid) | ID организации |
| inn | string | ИНН исполнителя |
| reason | string | Источник ограничения |
| restrictedUntil | string, null | Дата окончания ограничения. null — бессрочно |
| comment | string, null | Комментарий |
| createdAt | string | Дата создания |
| updatedAt | string | Дата последнего изменения |
Возможные ошибки
| Code | Описание |
|---|---|
| VALIDATION_ERROR | Ошибка валидации параметров запроса |
| FORBIDDEN_ERROR | В токене нет необходимого scope или доступа |
| CONTRACTOR_RESTRICTION_NOT_FOUND | Ограничение не существует |
| CONTRACTOR_RESTRICTION_FORBIDDEN | Ограничение принадлежит другой организации |
| UNKNOWN_ERROR | Ошибка сервера |
Снятие ограничения сотрудничества
Снимает ограничение. Снять разрешено только ручное ограничение (MANUAL): кадровое (EX_EMPLOYEE)
вычислено по реестру и истекает само. Требует доступ org.contractor-restrictions.write.
Запрос
Метод: DELETE URL: https://b2b.selfwork.ru/openapi/v2/organisation/{organisationId}/contractor-restrictions/{restrictionId}
Path Parameters
| Параметр | Тип | Обязательное поле | Описание |
|---|---|---|---|
| organisationId | string (uuid) | Да | ID организации |
| restrictionId | string (uuid) | Да | Идентификатор ограничения |
Заголовки
| Заголовок | Тип | Обязательный | Описание |
|---|---|---|---|
| x-idempotency-key | string | Да | Ключ идемпотентности. Повтор с тем же ключом и телом вернёт сохранённый ответ |
Request Body
Тело запроса не требуется (Empty Body).
Пример запроса
curl -X 'DELETE' \
"https://b2b.selfwork.ru/openapi/v2/organisation/550e8400-e29b-41d4-a716-446655440000/contractor-restrictions/019d0abb-cccc-7fcc-94a7-873f55b527c3" \
-H "accept: application/json" \
-H "x-idempotency-key: 97c5678a-8c6a-4688-8452-68ab606fe049" \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ"
Пример успешного ответа
{
"requestId": "97c5678a-8c6a-4688-8452-68ab606fe049",
"success": true
}
Описание полей ответа
| Поле | Тип | Описание |
|---|---|---|
| requestId | string (uuid) | Уникальный идентификатор запроса |
| success | boolean | Статус выполнения запроса |
Тела ответа у метода нет: снятое ограничение удаляется, возвращать нечего.
Возможные ошибки
| Code | Описание |
|---|---|
| VALIDATION_ERROR | Ошибка валидации параметров запроса |
| FORBIDDEN_ERROR | В токене нет необходимого scope или доступа |
| CONTRACTOR_RESTRICTION_NOT_FOUND | Ограничение не существует |
| CONTRACTOR_RESTRICTION_FORBIDDEN | Ограничение принадлежит другой организации |
| CONTRACTOR_RESTRICTION_NOT_MANUAL | Кадровое ограничение нельзя снять вручную |
| IDEMPOTENCY_KEY_REQUIRED | Не передан заголовок x-idempotency-key |
| IDEMPOTENCY_CONFLICT | Ключ идемпотентности уже использован с другим телом |
| UNKNOWN_ERROR | Ошибка сервера |