Перейти к основному содержимому

Ограничения по сотрудничеству с исполнителями (Блэклисты)

Ограничение — запрет работать с конкретным исполнителем, заведённый компанией по ИНН. Ограничение либо бессрочное, либо действует до названной даты; сам названный день считается ограниченным целиком, по московскому времени.

У ограничения есть источник (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​

ПараметрТипОбязательное полеПримерОписание
organisationIdstring (uuid)Да550e8400-e29b-41d4-a716-446655440000ID организации

Заголовки​

ЗаголовокТипОбязательныйОписание
x-idempotency-keystringДаКлюч идемпотентности. Повтор с тем же ключом и телом вернёт сохранённый ответ

Request Body​

ПолеТипОбязательное полеОписание
innstringДаИНН исполнителя — 12 цифр (физическое лицо)
restrictedUntilstringНетДата окончания ограничения, ISO 8601. Ограничение действует весь названный день
commentstringНетКомментарий

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
}

Описание полей ответа​

ПолеТипОписание
requestIdstring (uuid)Уникальный идентификатор запроса
successbooleanСтатус выполнения запроса
resultobjectУстановленное ограничение
idstring (uuid)Идентификатор ограничения
organisationIdstring (uuid)ID организации
innstringИНН исполнителя
reasonstringИсточник ограничения (см. справочник ниже)
restrictedUntilstring, nullДата окончания ограничения. null — бессрочно
commentstring, nullКомментарий
createdAtstringДата создания
updatedAtstringДата последнего изменения

Справочник источников (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​

ПараметрТипОбязательное полеПримерОписание
organisationIdstring (uuid)Да550e8400-e29b-41d4-a716-446655440000ID организации

Доступные фильтры (filters)​

Имя (name)Тип значения (value)Пример значенияОписание
INNarray[string]["123456789012"]Фильтрация по ИНН исполнителей
REASONarray[string]["MANUAL"]Источник ограничения (см. справочник ниже)
ACTIVEbooleantruetrue — только действующие ограничения; 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
}

Описание полей ответа​

ПолеТипОписание
requestIdstring (uuid)Уникальный идентификатор запроса
successbooleanСтатус выполнения запроса
resultobjectКонтейнер с данными ответа
result.lastIdstring, nullID последнего элемента в текущем списке (для пагинации)
result.itemsarray[obj]Массив найденных ограничений
idstring (uuid)Идентификатор ограничения
organisationIdstring (uuid)ID организации
innstringИНН исполнителя
reasonstringИсточник ограничения
restrictedUntilstring, nullДата окончания ограничения. null — бессрочно
commentstring, nullКомментарий
createdAtstringДата создания
updatedAtstringДата последнего изменения

Возможные ошибки​

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​

ПараметрТипОбязательное полеОписание
organisationIdstring (uuid)ДаID организации
restrictionIdstring (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
}

Описание полей ответа​

ПолеТипОписание
requestIdstring (uuid)Уникальный идентификатор запроса
successbooleanСтатус выполнения запроса
resultobjectОграничение
idstring (uuid)Идентификатор ограничения
organisationIdstring (uuid)ID организации
innstringИНН исполнителя
reasonstringИсточник ограничения
restrictedUntilstring, nullДата окончания ограничения. null — бессрочно
commentstring, nullКомментарий
createdAtstringДата создания
updatedAtstringДата последнего изменения

Возможные ошибки​

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​

ПараметрТипОбязательное полеОписание
organisationIdstring (uuid)ДаID организации
restrictionIdstring (uuid)ДаИдентификатор ограничения

Заголовки​

ЗаголовокТипОбязательныйОписание
x-idempotency-keystringДаКлюч идемпотентности. Повтор с тем же ключом и телом вернёт сохранённый ответ

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
}

Описание полей ответа​

ПолеТипОписание
requestIdstring (uuid)Уникальный идентификатор запроса
successbooleanСтатус выполнения запроса

Тела ответа у метода нет: снятое ограничение удаляется, возвращать нечего.

Возможные ошибки​

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Ошибка сервера