pending ──▶ waiting_trader ──▶ in_progress ──▶ success
│ │
└────────┬────────┘
▼
fail ──▶ возврат средств на баланс| Статус | Что значит |
|---|---|
pending | Списано, заявка ещё не подтверждена сервисом выплат. Живёт секунды |
waiting_trader | В очереди, ждём исполнителя. Отмена возможна только здесь |
in_progress | Исполнитель взял заявку |
success | Рубли отправлены получателю |
fail | Не выполнена, средства возвращены на баланс |
Каждая смена статуса приезжает вебхуком payout.status_changed — см. Webhooks. Параллельно статус всегда можно спросить сами:
curl 'https://b2b.lumowallet.io/payouts/{id}' -H 'X-API-Key: YOUR_API_KEY'Провал заявки возвращает списанное на баланс автоматически и ровно один раз. Признак — поле refundedAt: пока оно заполнено, деньги у вас. Ориентируйтесь на него, а не на сам факт fail.
Возвращается вся списанная сумма (chargedUsdt), в USDT, по курсу заявки. Курс за это время мог измениться — вас это не касается, вернётся ровно столько, сколько списали.
POST /payouts/{id}/cancelВозможна, только пока заявку не взял исполнитель, то есть в статусе waiting_trader. Заявка уходит в fail с failReason: cancelled_by_merchant, средства возвращаются сразу.
Если исполнитель уже взял заявку, придёт PAYOUT_NOT_CANCELABLE — дальше только спор.
POST /payouts/{id}/dispute
Content-Type: multipart/form-dataСпор — про «деньги не дошли». Разбирательство ведёт сервис выплат: он хранит вложения, опрашивает исполнителя и выносит вердикт, а мы передаём обращение и показываем состояние.
| Поле | Описание |
|---|---|
comment | Суть претензии, обязательно |
files | До 3 файлов, каждый не больше 5 МБ |
curl -X POST 'https://b2b.lumowallet.io/payouts/{id}/dispute' \
-H 'X-API-Key: YOUR_API_KEY' \
-F 'comment=Получатель не видит зачисление, прошло 40 минут' \
-F '[email protected]'Состояние спора приезжает в карточке заявки:
"dispute": {
"id": "025127ce-5a76-46e8-89ef-8ccf422248fb",
"status": "open",
"resolution": null,
"comment": "Получатель не видит зачисление, прошло 40 минут",
"openedAt": "2026-08-26T11:34:11.596Z",
"resolvedAt": null
}Когда спор решают в вашу пользу, заявка приходит в fail с failReason: dispute_lost, а resolution становится user_won — средства возвращаются обычным путём. Решение в пользу исполнителя оставляет заявку в success.
Когда спор открыть нельзя (PAYOUT_DISPUTE_NOT_ALLOWED):
- заявку ещё никто не взял — её проще отменить и получить деньги сразу;
- заявка уже провалилась — средства и так вернулись;
- спор по этой заявке уже открыт.
GET /payouts?status=&search=&limit=&offset=search ищет по вашему externalId (в том числе по части) или по нашему id — целиком либо по первым символам.
{ "payouts": [ /* … */ ], "total": 42 }Заявку может признать провалившейся, вернуть вам деньги, а потом подтвердить исполнение — например, если спор решили в пользу исполнителя после ложного таймаута. Тогда сумма списывается повторно, а вы получаете отдельное событие payout.recharged: из поля status (снова success) повторное списание не видно никак.