Финансовый модуль

Сценарии

Пополнение баланса

  1. Пользователь выбирает маршрут пополнения баланса из списка (список задается в Настройке маршрутов, direction: 'deposit')
  2. Ввод суммы и показ суммы с комиссией
  3. Создание платежа
  4. (Отличается в зависимости от маршрута/метода оплаты, бекенд возвращает method)
  • OFFLINE - Открывается модальное окно с html из form.data (deprecated)
  • POST - Создается <form> с action = form.url и инпутами из form.data, сразу подтверждается (происходит переход) (deprecate)
  • GET и Остальные - Пользователя перенаправляет на страницу агрегатора (поле form.url)

Пополнение через Юр. лицо

  1. Для пополнения через юр. лицо необходимо сперва создать новый Счет юр. лица (счет может быть лишь один).
  2. Если счет существует, его можно изменить перед пополнением или указать текущий
  3. (Админ) Ручная модерация заявки на пополнение (api)

Список заявок на пополнение отображается пользователю на страницах Финансы и Счета юридических лиц (api)

Подключение автовывода

  1. Удовлетворять условиям подключения (на текущий момент мин. рейтинг 500)
  2. Отправить заявку на подключение автовывода
  3. (Админ) Ручная модерация заявки из списка одобрить/отклонить. При одобрении у юзера списываются средства за услугу

Автовывод

Услуга автовывода позволяет автоматически вывести денежные средства по заявке. Т.е. заявка не рассматривается в течение 24 часов администратором и не обрабатывается вручную, а автоматически одобряется сразу после подачи заявки на вывод при условии, что у пользователя нет открытых претензий, нет блокировок администратора на учетной записи и нет заказов, которые "ожидают покупки" или "на доработке". Дополнительно при выводе нигде ничего указывать не нужно, он работает автоматически для всех выводов Для отдельных платежных маршрутов автовывод может быть специально отключен (например крипта)

Создание кошелька для вывода

  1. Пользователь выбирает маршрут вывода (список задается в Настройке маршрутов, direction: 'withdraw')
  2. Заполнение полей кошелька и создание (валидация и свойства основного поля зависят от routes[].walletType .validator, .hint, .format)
  • Для sbp_rub вводится телефон, для остальных обычный input
  • Для kind === 'card' дополнительно вводится имя владельца карты (param_name) (обязательно, латиница до 255 символов)
  1. Подтвердить операцию (confirmation)

Вывод средств

  1. Выбрать существующий кошелек или создать новый
  2. Ввод суммы и показ суммы с комиссией
  • Для method === 'sbp_rub' необходимо выбрать банк
  1. Создание платежа. У юзера со счета списываются средства
  2. (Админ) Ручная модерация заявки из списка
  • Автовывод - с небольшой задержкой платеж автоматически одобряется
  • Подтверждение - Заявка не уходит в платежку и считается выполненной. Опционально можно указать причину (будет прислана в лс от юзера админа) (api)
  • Одобрение (Авто) - Одобрение заявки, далее она идет в платежку (api))
  • Отмена - Пользователю возвращаются средства на кошелек. Заявка не уходит в платежку. Опционально можно указать причину (будет прислана в лс от юзера админа) (api)

API

Список маршрутов платежей

GET /v1/payment/routes

Возвращается список включенных платежных маршрутов

Type
interface GetPaymentRoutesResponse {
  routes: PaymentRoute[];
}
Example
{
  "routes": [
    {
      "title": "Банковская карта",
      "direction": "withdraw",
      "method": "card_rub",
      "currency": "RUB",
      "icon": "card",
      "fee": "5% + 33 ₽",
      "description": "",
      "position": 10,
      "country": "ru",
      "methods": [
        {
          "system": "piastrix",
          "method": "card_rub",
          "direction": "withdraw",
          "limitMin": 200,
          "limitMax": 50000,
          "feeType": 1,
          "fixed": 50,
          "percent": 3,
          "feeAmountMin": 0,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "card_rub",
        "label": "Банковская карта",
        "kind": "card",
        "icon": "card",
        "validator": "^\\d{13,19}$",
        "currency": "RUB",
        "hint": "от 13 до 19 цифр, без пробелов",
        "format": "#### #### #### #### ###"
      }
    },
    {
      "title": "СБП",
      "direction": "deposit",
      "method": "sbp_rub",
      "currency": "RUB",
      "icon": "sbp",
      "fee": "1.5%",
      "description": "",
      "position": 10,
      "country": "ru",
      "methods": [
        {
          "system": "tinkoff",
          "method": "sbp_rub",
          "direction": "deposit",
          "limitMin": 50000,
          "limitMax": 300000,
          "feeType": 1,
          "fixed": 0,
          "percent": 0.4,
          "feeAmountMin": 0,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "sbp_rub",
        "label": "СБП",
        "kind": "purse",
        "icon": "sbp",
        "validator": "^(?!8)\\d{9,15}$",
        "currency": "RUB",
        "hint": "неверный номер телефона",
        "format": "# ### ### ## ## ## ##"
      }
    },
    {
      "title": "Банковская карта UAH",
      "direction": "withdraw",
      "method": "card_uah",
      "currency": "UAH",
      "icon": "card",
      "fee": "5% (мин. 190 ₽)",
      "description": "",
      "position": 15,
      "country": "ua",
      "methods": [
        {
          "system": "kassa",
          "method": "card_uah",
          "direction": "withdraw",
          "limitMin": 1000,
          "limitMax": 20000,
          "feeType": 1,
          "fixed": 0,
          "percent": 5,
          "feeAmountMin": 190,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "card_uah",
        "label": "Банковская карта UAH",
        "kind": "card",
        "icon": "card",
        "validator": "^\\d{16}$",
        "currency": "UAH",
        "hint": "16 цифр, без пробелов",
        "format": "#### #### #### ####"
      }
    },
    {
      "title": "СБП",
      "direction": "withdraw",
      "method": "sbp_rub",
      "currency": "RUB",
      "icon": "sbp",
      "fee": "3%",
      "description": null,
      "position": 20,
      "country": null,
      "methods": [
        {
          "system": "kassa",
          "method": "sbp_rub",
          "direction": "withdraw",
          "limitMin": 100,
          "limitMax": 100000,
          "feeType": 2,
          "fixed": 0,
          "percent": 3,
          "feeAmountMin": 0,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "sbp_rub",
        "label": "СБП",
        "kind": "purse",
        "icon": "sbp",
        "validator": "^(?!8)\\d{9,15}$",
        "currency": "RUB",
        "hint": "неверный номер телефона",
        "format": "# ### ### ## ## ## ##"
      }
    },
    {
      "title": "Tinkoff Pay",
      "direction": "deposit",
      "method": "tinkoff_pay_rub",
      "currency": "RUB",
      "icon": "tinkoff",
      "fee": "3%",
      "description": null,
      "position": 30,
      "country": null,
      "methods": [
        {
          "system": "kassa",
          "method": "tinkoff_pay_rub",
          "direction": "deposit",
          "limitMin": 15,
          "limitMax": 400000,
          "feeType": 2,
          "fixed": 200,
          "percent": 2,
          "feeAmountMin": 10,
          "feeAmountMax": 15000
        }
      ],
      "walletType": null
    },
    {
      "title": "Зарубежная карта",
      "direction": "withdraw",
      "method": "card_rub_foreign",
      "currency": "RUB",
      "icon": "card",
      "fee": "3.5% (мин. 190₽)",
      "description": null,
      "position": 30,
      "country": null,
      "methods": [
        {
          "system": "kassa",
          "method": "card_rub_foreign",
          "direction": "withdraw",
          "limitMin": 1000,
          "limitMax": 75000,
          "feeType": 2,
          "fixed": 0,
          "percent": 3.5,
          "feeAmountMin": 190,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "card_rub_foreign",
        "label": "Зарубежная карта",
        "kind": "card",
        "icon": "card",
        "validator": "^\\d{13,19}$",
        "currency": "RUB",
        "hint": "от 13 до 19 цифр, без пробелов",
        "format": "#### #### #### #### ###"
      }
    },
    {
      "title": "QIWI",
      "direction": "deposit",
      "method": "qiwi_rub",
      "currency": "RUB",
      "icon": "qiwi",
      "fee": "6%",
      "description": "",
      "position": 30,
      "country": "ru",
      "methods": [
        {
          "system": "piastrix",
          "method": "qiwi_rub",
          "direction": "deposit",
          "limitMin": 10,
          "limitMax": 15000,
          "feeType": 1,
          "fixed": 0,
          "percent": 5.6,
          "feeAmountMin": 0,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "qiwi_rub",
        "label": "QIWI",
        "kind": "purse",
        "icon": "qiwi",
        "validator": "^(?!8)\\d{9,15}$",
        "currency": "RUB",
        "hint": "номер телефона в международном формате, без пробелов и знака +",
        "format": "# ### ### ## ## ## ##"
      }
    },
    {
      "title": "ЮMoney",
      "direction": "withdraw",
      "method": "yamoney_rub",
      "currency": "RUB",
      "icon": "yoomoney",
      "fee": "3.5%",
      "description": "",
      "position": 50,
      "country": "ru",
      "methods": [
        {
          "system": "kassa",
          "method": "yamoney_rub",
          "direction": "withdraw",
          "limitMin": 100,
          "limitMax": 15000,
          "feeType": 1,
          "fixed": 0,
          "percent": 3.5,
          "feeAmountMin": 0,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "yamoney_rub",
        "label": "ЮMoney",
        "kind": "purse",
        "icon": "yoomoney",
        "validator": "^41001\\d{7,11}$",
        "currency": "RUB",
        "hint": "12-16 цифр, без пробелов",
        "format": "#### #### #### ####"
      }
    },
    {
      "title": "Webmoney",
      "direction": "withdraw",
      "method": "webmoney_rub",
      "currency": "RUB",
      "icon": "webmoney",
      "fee": "3%",
      "description": "",
      "position": 60,
      "country": "ru",
      "methods": [
        {
          "system": "piastrix",
          "method": "webmoney_rub",
          "direction": "withdraw",
          "limitMin": 100,
          "limitMax": 15000,
          "feeType": 1,
          "fixed": 0,
          "percent": 3,
          "feeAmountMin": 0,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "webmoney_rub",
        "label": "Webmoney",
        "kind": "purse",
        "icon": "webmoney",
        "validator": "^P\\d{12}$",
        "currency": "RUB",
        "hint": "латинская P и 12 цифр, без пробелов",
        "format": "P ### ### ### ###"
      }
    },
    {
      "title": "Webmoney",
      "direction": "withdraw",
      "method": "webmoney_usd",
      "currency": "USD",
      "icon": "webmoney",
      "fee": "3.3%",
      "description": "",
      "position": 65,
      "country": null,
      "methods": [
        {
          "system": "kassa",
          "method": "webmoney_usd",
          "direction": "withdraw",
          "limitMin": 1500,
          "limitMax": 100000,
          "feeType": 1,
          "fixed": 0,
          "percent": 3.3,
          "feeAmountMin": 0,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "webmoney_usd",
        "label": "Webmoney USD",
        "kind": "purse",
        "icon": "webmoney",
        "validator": "^Z\\d{12}$",
        "currency": "USD",
        "hint": "латинская Z и 12 цифр, без пробелов",
        "format": "Z ### ### ### ###"
      }
    },
    {
      "title": "Capitalist",
      "direction": "withdraw",
      "method": "capitalist_rub",
      "currency": "RUB",
      "icon": "capitalist",
      "fee": "3%",
      "description": null,
      "position": 70,
      "country": null,
      "methods": [
        {
          "system": "capitalist",
          "method": "capitalist_rub",
          "direction": "withdraw",
          "limitMin": 100,
          "limitMax": 15000,
          "feeType": 2,
          "fixed": 0,
          "percent": 3,
          "feeAmountMin": 3,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "capitalist_rub",
        "label": "Capitalist RUB",
        "kind": "purse",
        "icon": "capitalist",
        "validator": "^R\\d{6,8}$",
        "currency": "RUB",
        "hint": "номер кошелька в системе Capitalist, латинская R и от 6 до 8 цифр, без пробелов",
        "format": null
      }
    },
    {
      "title": "Юр. лицо",
      "direction": "deposit",
      "method": "bank_wire_rub",
      "currency": "RUB",
      "icon": "bank",
      "fee": "6%",
      "description": "от 300 000 ₽ комиссия 0%",
      "position": 110,
      "country": "ru",
      "methods": [
        {
          "system": "bank_no_fee",
          "method": "bank_wire_rub",
          "direction": "deposit",
          "limitMin": 300000,
          "limitMax": 1000000,
          "feeType": 3,
          "fixed": 0,
          "percent": 0,
          "feeAmountMin": 0,
          "feeAmountMax": 0
        },
        {
          "system": "bank",
          "method": "bank_wire_rub",
          "direction": "deposit",
          "limitMin": 10000,
          "limitMax": 299999,
          "feeType": 3,
          "fixed": 0,
          "percent": 6,
          "feeAmountMin": 0,
          "feeAmountMax": 0
        }
      ],
      "walletType": {
        "id": "bank_wire_rub",
        "label": "Банковский перевод",
        "kind": "bank",
        "icon": "bank",
        "validator": null,
        "currency": "RUB",
        "hint": null,
        "format": null
      }
    }
  ],
}

Подсчет комиссии

GET /v1/payment/{direction}/{method}/commission?amount={amount}

Получение комиссии для конкретного метода и направления. В зависимости от направления отличается логика применения комиссии. Для withdraw пользователю придет amount - commissionAmount. Для deposit на странице оплаты будет сумма amount + commissionAmount

Type
interface GetCommissionResponse {
  /**
   * Размер комиссии
   */
  commissionAmount: number;
}

Создание заявки на пополнение

POST /v1/payment/deposit/{method}

`BodyType`
interface CreateDepositPaymentPayload {
  /**
   * Сумма пополнения
   */
  amount: number;
}
`ResponseType`
interface CreateDepositPaymentResponse {
  form: {
    data: [] | string | Record<string, string>;
    method: 'GET' | 'POST' | 'OFFLINE';
    url: string;
  },
}

Получить счет юр. лица

GET /payment/org-wallet

Получить текущий счет юр. лица, если счета нет, вернет 404

Type
interface GetLegalAccountResponse {
  wallet: LegalAccount;
}

Создать счет юр. лица

POST /payment/org-wallet

Создать и вернуть счет юр. лица

BodyType
interface CreateLegalAccountPayload extends LegalAccount {}
ResponseType
interface CreateLegalAccountResponse {
  wallet: LegalAccount;
}

Изменить счет юр. лица

PUT /payment/org-wallet

Обновить и вернуть счет юр. лица

BodyType
interface UpdateLegalAccountPayload extends LegalAccount {}
ResponseType
interface UpdateLegalAccountResponse {
  wallet: LegalAccount;
}

Создать заявку на пополнение через юр. лицо

POST /payment/invoices-org

BodyType
interface CreateLegalInvoicePayload extends LegalAccount {
  /**
   * Сумма заявки (при пополнении будет вычтена комиссия)
   */
  amount: number | string;
}
ResponseType
interface CreateLegalInvoiceResponse {
  invoice: LegalAccountInvoice
}

Список заявок на пополнение юр. лица текущего пользователя

GET /payment/invoices-org/all

Type
interface GetSelfLegalInvoicesResponse {
  list: LegalAccountInvoice[];
  meta: CommonPagination;
}

Список заявок на пополнение юр. лица (админский, всех пользователей)

GET /payment/invoices-org

Type
interface AdminLegalAccountInvoice extends LegalAccountInvoice {
  user: BaseUser;
}

interface GetLegalInvoicesResponse {
  list: AdminLegalAccountInvoice[];
  meta: CommonPagination;
}

Создать заявку на подключение автовывода

POST /v1/user/me/withdraw

Список заявок на подключение автовывода

GET /v1/admin/user/withdrawals

QueryParams
interface GetAutoWithdrawRequestParams extends CommonPaginationParams {
  /**
   * Логин пользователя для фильтрации
   */
  login?: string;

  /**
   * Статус заявки, если не указан, вернет все статусы
   */
  status?: AutoWithdrawalRequestStatus;
}
ResponseType
interface GetAutoWithdrawRequestResponse {
  meta: CommonPagination;
  requests: AutoWithdrawRequest[];
}

Одобрение заявки на подключение автовывода

PATCH /v1/admin/user/{userId}/withdraw

При одобрении с пользователя списываются средства

Отклонить заявку на подключение автовывода

PATCH /v1/admin/user/{userId}/withdraw/reject

При отклонении пользователь не может повторно подать заявку

Удалить заявку на подключение автовывода

DELETE /v1/admin/user/{userId}/withdraw

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

Список своих кошельков

GET /v1/user/me/wallets

Type
interface GetSelfWalletsResponse {
  wallets: Wallet[];
}

Удалить кошелек

DELETE /v1/user/me/wallet/{id}

Type
interface DeleteWalletResponse {
  wallet: Wallet;
}

Создать кошелек

POST /v1/user/me/wallet

При вызове этого апи вернется 449 ошибка для подтверждения, после подтверждения будет возвращен обьект отсюда

BodyType
interface CreateWalletPayload {
  /**
   * Основное поле описываемое в `walletType.hint`
   */
  account: string;

  /**
   * Поле method из большинства апи
   */
  type: string;

  /**
   * Дополнительное обязательное поле для `walletType.kind === 'card'`, содержит имя владельца карты (латиница до 255 символов)
   */
  param_name?: string;
}
ResponseType
interface CreateWalletPayloadResponse {
  wallet: Wallet;
}

Список банков для СБП

GET /v1/payment/withdraw/sbp

QueryParams
interface GetSBPBanksParams {
  /**
   * Судя по ответам нет разницы что передавать, просто любой существующий метод
   */
  method: string;

  /**
   * Сумма платежа
   */
  amount: number;
}
ResponseType
interface GetSBPBanksResponse {
  members: SBPBank[];
}

Создать заявку на вывод

POST /v1/payment/withdraw/{method}

BodyType
interface CreateWithdrawInvoicePayload {
  /**
   * Сумма вывода, будет списана с баланса, на кошелек поступит `amount - commissionAmount`
   */
  amount: number;

  /**
   * Идентификатор кошелька
   */
  walletId: number;

  /**
   * Идентификатор банка для `sbp_rub`(обязательно), для остальных методов не нужен
   */
  memberId?: string;
}
ResponseType
interface CreateWithdrawInvoiceResponse {
  invoice: WithdrawInvoice;
}

Список заявок на вывод

GET /admin/transfers

QueryParams
interface GetWithdrawInvoicesParams extends CommonPaginationParams {
  /**
   * Логин пользователя (точное совпадение)
   */
  user?: string;

  /**
   * Method
   */
  payway?: string;

  /**
   * Точное значение account без пробелов (номер карты, номер телефон etc)
   */
  account?: string;
}
ResponseType
interface SummaryItem {
  /**
   * Сумма заявок по этому method
   */
  amount: number;

  /**
   * Method
   */
  type: string;

  name: string;
}

interface MethodItem {
  /**
   * Название файла отсюда `https://c5mdnuiqw2.a.trbcdn.net/img/payment-methods/{icon}.svg`
   *
   * @example `'card'`
   */
  icon: string;

  /**
   * Method
   */
  id: string;

  kind: string;

  title: string;
}

interface GetWithdrawInvoicesResponse {
  meta: CommonPagination;

  /**
   * Общая сумма заявок но вывод по выбранным фильтрам
   */
  total: number;

  summary: SummaryItem[];

  methods: MethodItem[];

  requests: WithdrawInvoice[];
}

Отмена заявки на вывод

PUT /admin/transfer/{requestId}/reject

Пользователю возвращаются средства на кошелек. Опционально можно указать причину (будет прислана в лс от юзера админа)

BodyType
interface RejectWithdrawInvoicePayload {
  /**
   * Причина отмены (отправляется в лс от текущего админа)
   */
  note?: string;
}
ResponseType
interface RejectWithdrawInvoiceResponse {
  invoice: WithdrawInvoice;
}

Подтверждение заявки на вывод

PUT /admin/transfer/{requestId}/confirm

Операция считается выполненной. Опционально можно указать причину (будет прислана в лс от юзера админа)

BodyType
interface ConfirmWithdrawInvoicePayload {
  /**
   * Причина ручного подтверждения (отправляется в лс от текущего админа)
   */
  note?: string;
}
ResponseType
interface ConfirmWithdrawInvoiceResponse {
  invoice: WithdrawInvoice;
}

Одобрение заявки на вывод (Авто)

PUT /admin/transfer/{requestId}/confirm-auto

Одобрение заявки, далее она идет в платежку

Type
// Не удалось в тестовом режиме получить ответ, вероятно он идентичен двум другим методам
interface ConfirmAutoWithdrawInvoiceResponse {
  invoice: WithdrawInvoice;
}

Сущности

Статус заявки на пополнение

`InvoiceStatus`
enum InvoiceStatus {
  /**
   * Заявка находится на одобрении админа
   */
  NEW = 'new',

  /**
   * Заявка исполнена
   */
  SUCCESS = 'success',

  /**
   * Одобрена и ждет исполнения пользователем
   */
  INPROGRESS = 'inprogress',

  ERROR = 'error',

  /**
   * Отклонена админом
   */
  CANCEL = 'cancel',
}

Счет юр. лица

`LegalAccount`
interface LegalAccount {
  /**
   * Рассчетный счет
   *
   * Валидация обязательно, 20 символов, целые цисла
   */
  bankAccount: string;

  /**
   * БИК
   *
   * Валидация обязательно, 9 символов, целые цисла
   */
  bankId: string;

  /**
   * Название банка
   *
   * Валидация обязательно, максимум 255 символов
   *
   * @example `"AO «Тинькофф банк»"`
   */
  bankName: string;

  /**
   * Дополнительные контакты организации
   *
   * Валидация максимум 255 символов
   *
   * @example `номер телефона, адрес почты`
   */
  contactInfo?: string;

  /**
   * Корреспондентский счeт
   *
   * Валидация обязательно, 20 символов, целые цисла
   */
  corrAccount: string;

  /**
   * ФИО ответственного лица
   *
   * Валидация обязательно, максимум 255 символов
   *
   * @example `"Иванов Иван Иванович"`
   */
  directorName: string;

  /**
   * Юридический адрес
   *
   * Валидация обязательно, максимум 256 символов
   *
   * @example `"119021, Москва, ул. Ленина 16, офис 1"`
   */
  legalAddress: string;

  /**
   * Название организации
   *
   * Валидация обязательно, максимум 128 символов
   *
   * @example `"OOO «Студенческие работы»"`
   */
  name: string;

  /**
   * Почтовый адрес
   *
   * Валидация обязательно, максимум 256 символов
   *
   * @example `"119021, Москва, ул. Ленина 16, офис 1"`
   */
  postAddress: string;

  /**
   * КПП
   *
   * Валидация обязательно, 9 символов, целые цисла
   */
  reasonId: string;

  /**
   * ОГРН или ОГРНИП
   *
   * Валидация обязательно, 13-15 символов, целые цисла
   */
  regId: string;

  /**
   * ИНН
   *
   * Валидация обязательно, 10-12 символов, целые цисла
   */
  taxId: string;
}

Используется

  • GET /payment/org-wallet Получение текущего счета, поле wallet (404 если его нет)
  • PUT /payment/org-wallet Изменение текущего счета, возвращает в поле wallet
  • POST /payment/org-wallet Создание счета если его нет, возвращает в поле wallet

Заявка на пополнение юр. лица

`LegalAccountInvoice`
interface LegalAccountInvoice extends LegalAccount {
  /**
   * Id заявки
   */
  id: number;

  status: InvoiceStatus;

  /**
   * Сумма выставленного счета
   */
  amount: number;

  /**
   * Сумма к зачислению на аккаунт
   */
  receiveAmount: number;

  /**
   * Дата создания заявки
   *
   * timestamp в секундах
   *
   * @example `1760091144` - Fri Oct 10 2025 13:12:24 GMT+0300
   */
  createdAt: number;
}

Используется

  • POST /payment/invoices-org Создание заявки на пополнение (тело это поля LegalAccount), возвращает поле invoice (нигде не используется)
  • GET /payment/invoices-org/all Список заявок на пополнение (возвращает { list: LegalAccountInvoice[], meta: CommonPagination })
  • GET /payment/invoices-org Список всех заявок на пополнение (админский) (ответ идентичен GET /payment/invoices-org/all но к заявкам добавляется поле user)

Направление платежа

`PaymentDirection`
enum PaymentDirection {
  /**
   * Вывод средств
   */
  WITHDRAW = 'withdraw',

  /**
   * Пополнение кошелька
   */
  DEPOSIT = 'deposit',
}

Платежный маршрут

`PaymentRoute`
interface PaymentRoute {
  /**
   * В сочетании с `direction` является уникальным идентификатором роута
   */
  method: string;

  direction: PaymentDirection;

  /**
   * Название роута
   */
  title: string;

  /**
   * Страна
   *
   * @example `'ua'`, `'ru'`
   * @deprecated Ранее использовалось для группировки пополнений по стране
   */
  country: string | null;

  /**
   * Валюта маршрута (в какой валюте будет списание при пополнении и соответственно в какой валюте будет пополнение при выводе)
   */
  currency: string;

  description: string;

  /**
   * Название файла картинки `https://c5mdnuiqw2.a.trbcdn.net/img/payment-methods/{icon}.svg`
   */
  icon: string;

  /**
   * Строка текстово описывающая комиссию, в рассчет не применяется
   */
  fee: string;

  /**
   * Поле отвечающее за сортировку роутов, чем меньше число, тем ближе к началу. Сортировка происходит бекендом
   */
  position: number;

  /**
   * Дополнительная полустатичная информация о маршруте (связь с route по `method`)
   */
  walletType: typeof import('@kb/data/wallet-types')[number];

  /**
   * Список доступных платежных методов
   */
  methods: PaymentMethod[];
}

Платежный метод

`PaymentMethod`
interface PaymentMethod {
  system: string;
  method: string;
  direction: PaymentDirection;

  /**
   * Принцип начисления комиссий [подробнее](https://github.com/educorg/studwork-knowledge-base/blob/master/shared/data/payment-fee-types.yml)
   */
  feeType: typeof import('@kb/data/payment-fee-types')[number].value;

  /**
   * Фиксированный размер комисси в ₽
   */
  fixed: number;

  /**
   * Процентный размер комисси
   *
   * @example `3`
   */
  percent: number;

  /**
   * Максимальный размер комиссии в ₽
   * Если указан 0, то лимита нет
   */
  feeAmountMax: number;

  /**
   * Минимальный размер комиссии в ₽
   * Если указан 0, то лимита нет
   */
  feeAmountMin: number;

  /**
   * Максимальная сумма пополнения/вывода(комиссии не учитываются) в ₽
   */
  limitMax: number;

  /**
   * Минимальная сумма пополнения/вывода(комиссии не учитываются) в ₽
   */
  limitMin: number;
}

Статус заявки на подключение автовывода

AutoWithdrawalRequestStatus
enum AutoWithdrawalRequestStatus {
  APPROVED = 1,
  MODERATED = 2,
  REJECTED = 3,
}

Заявка на подключение автовывода

AutoWithdrawalRequest
interface AutoWithdrawRequest {
  /**
   * Количество открытых претензий
   */
  activeArbitrageCount: number;

  /**
   * Количество претензий
   */
  arbitrageCount: number;

  /**
   * Дата аппрува запроса (null если не аппрувнута) (ISO-8601)
   */
  approvedAt: null | string;

  /**
   * Текущий баланс пользователя доступный к выводу
   */
  balance: number;

  /**
   * Рейтинг исполнителя
   */
  executorRating: number;

  /**
   * Дата регистрации (ISO-8601)
   */
  signedUpAt: string;

  /**
   * Статус запроса
   */
  status: AutoWithdrawalRequestStatus;
}

Кошелек

Wallet
interface WalletCardParams {
  name: string;
  bank?: string;
  country_code?: string;
  brand?: string;
}

interface Wallet {
  id: number;

  /**
   * Дата создания (ISO-8601)
   */
  createdAt: string;

  /**
   * Основной параметр метода к которому привязан кошелек
   * Для sbp это телефон, для карт номер карты
   */
  account: string;

  /**
   * method из платежного маршрута
   */
  type: string;

  /**
   * Дополнительные параметры кошелька
   */
  params: null | WalletCardParams;
}

Заявка на вывод

WithdrawInvoice
interface IdenticalItem {
  account: string;
  /**
   * Method
   */
  type: string;
  user: BaseUser;
}

interface WithdrawInvoice {
  id: number;

  /**
   * Банк если это `'sbp_rub'` и `null` в остальных случаях
   */
  bank: SBPBank | null;

  user: BaseUser;

  /**
   * Связанный админ (вероятно сделавший последнее изменение)
   */
  admin: BaseUser | null;

  /**
   * Текст ошибки
   */
  error: string | null;
  errorOnWithdraw: string | null;

  /**
   * Сумма выплаты
   */
  sum: number;

  /**
   * Заметка админа
   */
  note: string | null;

  /**
   * Совпадения платежных данных
   */
  identical: IdenticalItem[];

  /**
   * System
   */
  paysys: string;

  /**
   * Method
   */
  payway: string;

  status: 'error' | 'new' | 'cancel' | 'success';

  /**
   * Id транзакции со стороны платежной системы
   */
  transactionId: number | null;

  /**
   * Timestamp / 1000
   *
   * @example `1737442712`
   */
  updatedAt: number;

  /**
   * Timestamp / 1000
   *
   * @example `1737442712`
   */
  createdAt: number;
}

Банк СБП

SBPBank
interface SBPBank {
  /**
   * Код банка в системе сбп
   */
  id: string;

  name: string;

  /**
   * Относительный путь к иконке на статичном бакете (студворк https://c5mdnuiqw2.a.trbcdn.net)
   *
   * @example `'/img/banks/vkpay.svg'`
   */
  iconPath: string;
}