#Ошибки и идемпотентность
#Коды ошибок
| HTTP | Code | Когда |
|---|---|---|
| 400 | VALIDATION_ERROR | Поле отсутствует или невалидно |
| 400 | INVALID_BANK | bank_id не найден в banks (PayOut) |
| 400 | NO_RATE_FOR_AMOUNT | Сумма вне диапазона тарифа |
| 400 | DUPLICATE_ORDER | merchant_transaction_id уже занят |
| 400 | INSUFFICIENT_FUNDS | Не хватает USDT (PayOut) |
| 400 | MISSING_TRANSACTION_ID | /status без параметра |
| 401 | UNAUTHORIZED | Нет / невалидный Bearer |
| 404 | NOT_FOUND | Tx не существует или не ваша |
#Идемпотентность
merchant_transaction_id UNIQUE per merchant в БД. Повторная отправка с тем же ID → 400 DUPLICATE_ORDER.
Webhook'и приходят at-least-once — храните статус по merchant_transaction_id и игнорируйте повторы.