#Ошибки и идемпотентность

#Коды ошибок

HTTPCodeКогда
400VALIDATION_ERRORПоле отсутствует или невалидно
400INVALID_BANKbank_id не найден в banks (PayOut)
400NO_RATE_FOR_AMOUNTСумма вне диапазона тарифа
400DUPLICATE_ORDERmerchant_transaction_id уже занят
400INSUFFICIENT_FUNDSНе хватает USDT (PayOut)
400MISSING_TRANSACTION_ID/status без параметра
401UNAUTHORIZEDНет / невалидный Bearer
404NOT_FOUNDTx не существует или не ваша

#Идемпотентность

merchant_transaction_id UNIQUE per merchant в БД. Повторная отправка с тем же ID → 400 DUPLICATE_ORDER.

Webhook'и приходят at-least-once — храните статус по merchant_transaction_id и игнорируйте повторы.