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

Выплаты

Выплата — заявка на перечисление партнёру заработанного вознаграждения. Через внешний API заявку можно посмотреть, создать и провести по статусам — например, если решение о выплате принимает ваша бухгалтерская система, а не администратор в интерфейсе.

Все пути ниже даны относительно базового адреса /api/external, каждый запрос требует заголовок x-api-key — см. Внешний API.

СтатусЧто означает
Requestedзаявка создана, ждёт решения
Approvedподтверждена, ждёт перечисления
Paidденьги перечислены партнёру
Rejectedотклонена
Canceledпартнёр отменил заявку сам, в личном кабинете

Заявка создаётся сразу в статусе Requested. Перевести её в Approved, Paid или Rejected можно и через внешний API, и из админки — этим методом или соответствующей кнопкой в карточке заявки. Статус Canceled доступен только партнёру: ни администратор, ни внешний API отменить чужую заявку не могут.

GET /api/external/payout
x-api-key: ваш-ключ

Метод возвращает все заявки контура одним списком — без пагинации и без фильтра по статусу, в отличие от списка в админке. Заявки отсортированы по дате создания, от новых к старым.

[
{
"id": "7c1f…",
"number": 42,
"partner": { "id": "3d21…", "firstName": "Иван", "lastName": "Иванов", "middleName": null, "email": "partner@example.com" },
"amount": 15000,
"status": "Paid",
"requisiteId": "9b3e…",
"requisite": { "type": "BankAccount" },
"innSnapshot": "500100732259",
"partnerComment": null,
"adminComment": "Ежемесячная выплата",
"processedBy": { "id": "a001…", "email": "admin@example.com", "firstName": "Пётр", "lastName": "Петров", "middleName": null },
"createdAt": "2026-08-01T10:00:00.000Z",
"updatedAt": "2026-08-03T09:00:00.000Z",
"processedAt": "2026-08-03T09:00:00.000Z"
}
]
ПолеЧто означает
numberномер заявки для людей — его видят администратор и партнёр в интерфейсе и он печатается в акте
partnerпартнёр, которому предназначена выплата
amountсумма выплаты в копейках: 15000 — это 150 рублей
requisiteIdидентификатор реквизитов, по которым заявка должна быть оплачена; null, если контур реквизиты не собирает
requisite.typeспособ выплаты: BankAccount — банковский счёт, Sbp — перевод по номеру телефона
innSnapshotИНН партнёра на момент создания заявки; может быть null, если проверка ИНН в контуре выключена
partnerCommentкомментарий партнёра — заполняется, когда он сам создаёт или отменяет заявку в личном кабинете
adminCommentкомментарий администратора либо ваш комментарий при создании или смене статуса через API
processedByадминистратор, который перевёл заявку в Paid из админки; null, если заявка ещё не выплачена или выплачена через API
processedAtдата перевода в Paid; null, пока заявка не выплачена
POST /api/external/payout
x-api-key: ваш-ключ
Content-Type: application/json
{
"partnerId": "3d21…",
"amount": 15000,
"adminComment": "Ежемесячная выплата"
}
ПолеОбязательноеОписание
partnerIdдаid партнёра из списка партнёров
amountдасумма выплаты в копейках, целым числом: 15000 — это 150 рублей, максимум — 2 000 000 рублей (200000000)
adminCommentнеткомментарий к заявке

Реквизиты в теле запроса не передаются: заявка берёт актуальные реквизиты партнёра и запоминает их. Заполнить реквизиты через внешний API нельзя — это делает либо сам партнёр в личном кабинете, либо администратор в его карточке.

Перед созданием заявки метод проверяет: партнёр существует и не заблокирован, у него нет другой активной заявки (в статусе Requested или Approved), сумма не меньше минимальной, заданной в настройках контура, и не превышает баланс, доступный партнёру к выводу, ИНН партнёра заполнен и проходит проверку по контрольным цифрам, а реквизиты выплаты указаны.

Если в контуре включён выпуск актов по выплатам, у самозанятого, ИП и юрлица ИНН проверяется всегда — даже при выключенном Требовать ИНН для выплат: он печатается в акте. Принятия оферты партнёрской программы метод не требует — это проверяется только у заявок, которые партнёр подаёт сам из кабинета.

Проверку ИНН можно отключить для всего контура переключателем Требовать ИНН для выплат в общих настройках — он включён по умолчанию. Пока он включён, ИНН партнёра сохраняется в заявку: значение фиксируется на момент создания и не меняется, даже если позже ИНН в профиле исправят.

В ответ приходит созданная заявка со статусом Requested и историей статусов из одной записи:

{
"id": "7c1f…",
"number": 43,
"partner": { "id": "3d21…", "firstName": "Иван", "lastName": "Иванов", "middleName": null, "email": "partner@example.com" },
"amount": 15000,
"status": "Requested",
"requisiteId": "9b3e…",
"requisite": { "type": "BankAccount" },
"innSnapshot": "500100732259",
"partnerComment": null,
"adminComment": "Ежемесячная выплата",
"processedBy": null,
"createdAt": "2026-09-08T10:00:00.000Z",
"updatedAt": "2026-09-08T10:00:00.000Z",
"processedAt": null,
"allocations": [
{
"amount": 15000,
"entry": { "id": "l001…", "type": "Accrual", "amount": 20000, "availableAt": "2026-08-20T00:00:00.000Z", "createdAt": "2026-08-06T12:00:00.000Z", "leadId": "d4e5…" }
}
],
"act": null,
"history": [
{
"id": "e001…",
"status": "Requested",
"comment": "Ежемесячная выплата",
"createdAt": "2026-09-08T10:00:00.000Z",
"changedByAdmin": null,
"changedByApiKey": { "id": "k001…", "title": "CRM", "admin": { "id": "a001…", "email": "admin@example.com", "firstName": "Пётр", "lastName": "Петров", "middleName": null } }
}
]
}

Ответ на создание и смену статуса содержит два поля, которых нет в списке:

ПолеЧто означает
allocationsсостав заявки: из каких начислений собрана сумма. amount — сколько взято из начисления, entry.amount — его полная сумма: начисление может войти в заявку частично. entry.type — Accrual (начисление за лида, leadId заполнен) или Adjustment (ручная корректировка)
actакт по выплате: { "id", "number", "issuedAt", "signedOutsideAt", "partnerSignedAt" }. Появляется после перевода в Paid, если в контуре включён выпуск актов и акт выпустился. number — строка вида "2026-17", signedOutsideAt — когда администратор отметил акт подписанным вне платформы, иначе null; partnerSignedAt — когда партнёр подписал акт простой электронной подписью в кабинете, иначе null. Заполнено не больше одного из двух. До выплаты и без акта — null

Скачать PDF акта через внешний API нельзя — он доступен в админке и в кабинете партнёра.

GET /api/external/payout/{id}/requisites
x-api-key: ваш-ключ

Списки и карточка заявки реквизитов не содержат — только requisiteId и способ выплаты. Значения отдаёт отдельный метод, и отдаёт их целиком: он и нужен затем, чтобы ваша бухгалтерская система сформировала платёж.

{
"requisite": {
"id": "9b3e…",
"type": "BankAccount",
"recipientName": "Иванов Иван Иванович",
"accountNumber": "40702810638050013199",
"bic": "044525225",
"phone": null,
"sbpBankName": null,
"createdAt": "2026-09-01T10:00:00.000Z",
"archivedAt": null,
"masked": false
}
}
ПолеЧто означает
typeBankAccount — заполнены accountNumber и bic; Sbp — заполнен phone
recipientNameимя получателя платежа так, как оно указано в банке
accountNumberномер счёта, 20 цифр; null у Sbp
bicБИК банка получателя, 9 цифр; null у Sbp
phoneномер телефона в формате +7XXXXXXXXXX; null у BankAccount
sbpBankNameбанк получателя, если партнёр его указал
archivedAtмомент, когда партнёр заменил эти реквизиты новыми; null, если они всё ещё актуальны
maskedвсегда false — этот метод отдаёт полное значение

Возвращаются реквизиты из заявки, а не текущие реквизиты партнёра: если он успел их заменить, archivedAt будет заполнен, но платить нужно по тому, что отдал метод. Если контур реквизиты не собирает, в requisite придёт null.

PUT /api/external/payout/{id}/status
x-api-key: ваш-ключ
Content-Type: application/json
{ "status": "Approved", "comment": "Проверено" }
ПолеОбязательноеОписание
statusдаApproved, Paid или Rejected
commentнеткомментарий к смене статуса

Допустимый переход зависит от текущего статуса заявки:

Новый статусИз какого статуса
Approvedтолько из Requested
Paidтолько из Approved
Rejectedиз Requested или Approved

В ответ приходит заявка целиком, в том же формате, что и при создании. По history видно, кто и когда менял статус: changedByAdmin заполнен, если статус сменили из админки, changedByApiKey — если через внешний API; второе поле пары при этом равно null.

ОтветСообщениеЧто делать
400Партнер обязателенпередайте partnerId
400Сумма выплаты обязательна и указывается в копейках целым числомпередайте amount целым числом копеек — без дробной части
400Сумма выплаты должна быть больше нуляминимум — одна копейка (1)
400Партнер заблокировану заблокированного партнёра заявку не создать
400Уже есть активная заявка на выплатудождитесь решения по прежней заявке или её отмены партнёром
400Некорректная сумма выводасумма должна быть положительным числом
400Минимальная сумма вывода: …увеличьте сумму до указанной в сообщении; в тексте ошибки сумма приводится в рублях, а передаётся в копейках
400Доступно для вывода: …сумма превышает баланс, доступный партнёру к выводу
400Для вывода средств заполните ИНН в профилеу партнёра не заполнен ИНН — внесите его в карточке партнёра или через интерфейс администратора
400ИНН в профиле указан некорректно…ИНН не проходит проверку по контрольным цифрам: 12 знаков у физлица, самозанятого и ИП, 10 у юридического лица
400Для акта по выплате у партнёра нужен корректный ИНН — заполните его в карточке партнёравключён выпуск актов, а у самозанятого, ИП или юрлица ИНН не заполнен или не подходит статусу — переключатель «Требовать ИНН для выплат» эту проверку не снимает
400Для вывода средств заполните реквизиты выплаты в профилепартнёр не указал, куда переводить деньги — это делает он сам или администратор в его карточке
400Допустимые статусы: Approved, Paid, Rejectedпередайте один из этих трёх статусов
404Партнер не найденпроверьте partnerId
409Недопустимый переход статусазаявки с таким id нет, либо её текущий статус не допускает такой переход — см. таблицу переходов выше
  • Внешний API — базовый адрес, ключи и остальные методы
  • Партнёры — список партнёров, которым можно создать выплату
  • Выплаты — тот же список и карточка заявки в интерфейсе администратора