POST /v1/payment/refund.
Главное: адрес указывать НЕ обязательно
Самое частое заблуждение — что для возврата нужно где‑то раздобыть адрес покупателя и передать его в запросе. Не нужно. Шлюз запоминаетpayer_address — адрес, с которого реально пришли деньги, — и
по умолчанию возвращает средства именно туда.
Поэтому минимальный полный возврат выглядит так:
address, ни amount не нужны: вернётся вся полученная сумма на адрес плательщика.
Когда address всё-таки нужен
Почему UTXO — исключение. В сетях вроде Bitcoin у транзакции нет одного однозначного отправителя:
она собирается из нескольких входов, которые могут принадлежать разным адресам (в том числе адресам
биржи или чужого кошелька). «Адреса плательщика» там попросту не существует как надёжного понятия —
поэтому шлюз не угадывает, а требует указать адрес явно.
Полный возврат
Не указывайтеamount — вернётся вся полученная сумма:
Частичный возврат
Укажитеamount — вернётся только эта часть:
В какой валюте вернутся деньги
Возврат деноминирован в той монете, которая фактически пришла. Если покупатель заплатил 100 USDT — вернутся USDT, а не «эквивалент по текущему курсу». Курс заново не пересчитывается. Это важно понимать: если цена была в фиате ("currency": "USD"), а
за время до возврата курс монеты изменился, то в долларах покупатель получит не ровно то, что заплатил.
Шлюз возвращает монету, а не фиатную стоимость — фиат он вообще не хранит. →
Модель баланса
Кто платит и что подтверждается
- Адрес плательщика vs произвольный. По умолчанию возврат уходит на записанный адрес
плательщика (
payer_address). Возврат, инициированный по API‑ключу, авто‑одобряется и уходит сразу на любой адрес — ключ несёт ту же полноту полномочий, что и при обычной выплате; отдельного подтверждения (POST /v1/payout/approve) не требуется. Поэтому перепроверяйтеaddress, если передаёте его явно: остановить отправленный возврат нельзя. - Наша комиссия при возврате. Кто её несёт — клиент (получает net) или мерчант (клиент получает
gross) — задаётся настройкой
refund-fee-config. Шлюз свою комиссию при возврате не покрывает.
Отслеживание возврата
Есть два способа, и первый удобнее.По самому платежу (рекомендуется)
POST /v1/payment/info возвращает состояние возвратов прямо в объекте
платежа:
Это самый простой способ ответить на вопрос «а мы вообще возвращали деньги по этому заказу и сколько?» —
не нужно ничего сопоставлять руками.
По операции возврата
Ответ метода возврата содержитuuid операции и её status (как у выплаты). Следить за движением
конкретной операции можно через POST /v1/payout/info или по вебхукам —
это уровень «дошла ли транзакция в блокчейне».
Автоматический возврат vs ручной
Не путайте два механизма:
Про автоматический сценарий — Недоплата, переплата и автовозврат.
Идемпотентность
Возврат идемпотентен по тройке(платёж, адрес, сумма). Повтор с той же тройкой вернёт уже созданную
операцию, а не отправит средства дважды. Дополнительно отправляйте HTTP‑заголовок Idempotency-Key —
он защитит от дубля при ретрае после таймаута. →
Устойчивый клиент
Массовые возвраты (до 5000 за раз) — POST /v1/refund/batch, см.
Массовые операции.
Ошибки
Связанные страницы
POST /v1/payment/refund
Объект платежа
Кто платит комиссию возврата
Массовые операции
POST /v1/refund/batch, до 5000 возвратов.Сплит‑платежи
почему возврат влияет на расчёты с партнёрами.