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

Перевод баланса

Перевод баланса

POST https://gptunnel.ru/api/v1/balance/transfer

Списывает amount с баланса организации, которой принадлежит ключ, и зачисляет ту же сумму получателю. Получатель задаётся ровно одним полем:

  • user_id — деньги приходят на личный счёт пользователя;
  • org_id — деньги приходят на счёт организации.

Операция атомарна: либо списание и зачисление проходят вместе, либо не проходит ничего. Перевод виден отправителю в разделе «Журнал» кабинета организации, получателю — в истории операций как «Перевод».

Headers

ПараметрТипОписание
Authorization*stringAPI ключ организации
Idempotency-Key*stringУникальный ключ операции, 8–64 символа A-Za-z0-9_-
Content-Type*stringapplication/json

Параметры запроса

ПараметрТипОписание
user_idstringID пользователя-получателя, 24 hex-символа строчными. Ровно одно из user_id и org_id
org_idstringID организации-получателя, 24 hex-символа строчными. Ровно одно из user_id и org_id
amount*numberСумма в рублях, больше 0 и не более 100 000, до 2 знаков после запятой

Пример запроса

Окно терминала
curl --request POST \
--url https://gptunnel.ru/api/v1/balance/transfer \
--header 'Authorization: YOUR_API_KEY' \
--header 'Idempotency-Key: order-2026-10-20-000153' \
--header 'Content-Type: application/json' \
--data '{
"user_id": "6ad72133269dc8d9f75a33bc",
"amount": 500
}'

Ответ

Поля ответа

ПараметрТипОписание
codenumber0 при успехе
transaction_idstringВаш Idempotency-Key из запроса — по нему перевод ищется в истории операций и в журнале
org_idstringОрганизация-отправитель
recipient_user_idstring | nullПользователь-получатель, если переводили по user_id
recipient_org_idstring | nullОрганизация-получатель, если переводили по org_id
recipient_createdbooleanВсегда false при переводе по id
amountnumberСумма, зачисленная получателю, в рублях
currencystringВсегда RUB
discount_percentnumberПартнёрская скидка на перевод в процентах, 0 если не назначена
discount_amountnumberСумма скидки, возвращённая на баланс отправителя отдельной операцией
created_atstringВремя операции, ISO 8601
replayedbooleantrue, если это повтор по тому же Idempotency-Key
{
"code": 0,
"transaction_id": "order-2026-10-20-000153",
"org_id": "6ad5e0c3269dc8d9f75a1f07",
"recipient_user_id": "6ad72133269dc8d9f75a33bc",
"recipient_org_id": null,
"recipient_created": false,
"amount": 500,
"currency": "RUB",
"discount_percent": 0,
"discount_amount": 0,
"created_at": "2026-10-20T09:15:42.000Z",
"replayed": false
}

Партнёрская скидка

Если организации назначена скидка на переводы, получатель всё равно получает полную сумму amount. С отправителя списывается полная сумма, а скидка возвращается на его баланс отдельной операцией «Скидка на перевод» — её размер приходит в discount_amount. Так в истории операций видны и оборот, и размер скидки.

Ошибки

HTTPcodeКогда
4003Тело не по схеме: нет получателя, указаны оба, сумма вне диапазона. Подробности — в поле details
40018Получатель совпадает с организацией-отправителем
40021Нет заголовка Idempotency-Key или он не по формату
40316Тумблер на ключе включён, но организация не может переводить: переводы выключены, организация удалена или обслуживается через дистрибьютора
40322На ключе выключен тумблер «Переводы»; ключ личного аккаунта тоже получает этот код
40417Пользователь по user_id не найден
40423Аккаунт пользователя удалён
40424Организация по org_id не найдена
40425Организация-получатель удалена
40920Idempotency-Key уже использован с другим телом
42219Не хватает средств с учётом кредитного лимита

Одновременные переводы одной организации выполняются по очереди, отдельного кода ошибки для них нет. Если два запроса с одним Idempotency-Key пришли одновременно, второй дождётся первого и вернёт его результат с replayed: true (или 409, код 20, если тело другое).

Полный список кодов и ответ 401 на неверный ключ — в справочнике ошибок.