# Robokassa API: POST /RefundService/Refund/Create — Создать возврат

Полный или частичный возврат по завершённой операции (хост `services.robokassa.ru`). Тело — JWT, подписанный Password3 (HS256, HS384 или HS512). Требует подключения API возвратов.

Пример ответа (ошибка 401):

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `OpKey` | body | string | да | Идентификатор завершённой платёжной операции |
| `RefundSum` | body | number | нет | Сумма частичного возврата; для полного не передаётся |
| `InvoiceItems` | body | array | нет | Позиции чека возврата прихода |

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

```
{"success":false,"message":"Signature key is not exists or partner have not access to API","requestId":null}
```

## Базовые URL

- Боевой (оплата, XML-интерфейсы, холдирование, рекурренты): `https://auth.robokassa.ru`
- Боевой (счета, возвраты, фискализация): `https://services.robokassa.ru`

## Авторизация

Тип: Другое

Стандартной схемы авторизации нет: каждый запрос подписывается контрольной суммой, состав которой зависит от метода. В личном кабинете магазина берутся `MerchantLogin`, Пароль#1, Пароль#2 (и Password3 для API возвратов), там же выбирается алгоритм хэша (в примерах документации — MD5). Пароль#1 используется для подписи запросов на оплату, Пароль#2 — для проверки уведомлений и XML-интерфейсов. Invoice API и Refund API принимают тело в виде JWT, подписанного HMAC.

Подпись запуска оплаты: `MerchantLogin:OutSum:InvId:модификаторы:Пароль#1:Shp_*`. Пример из документации (PHP, MD5):

```
$signature = md5("$merchantLogin:$outSum:$invId:$password1");
```

## Нюансы

- После оплаты Robokassa отправляет на ResultURL поля `OutSum`, `InvId`, `Fee`, `EMail`, `SignatureValue`, `PaymentMethod`, `IncCurrLabel` и параметры `Shp_*`. Подпись проверяют по формуле `OutSum:InvId:Пароль#2:Shp_*` и только потом меняют статус заказа.
- Обработчик ResultURL должен ответить строкой `OK` + номер заказа (например `OK12`), иначе уведомление считается недоставленным.
- Пользовательские параметры с префиксом `Shp_` возвращаются в уведомлениях без изменений и включаются в подпись в алфавитном порядке.
- При холдировании (`StepByStep=true`) в строку подписи добавляется модификатор `true`: `MerchantLogin:OutSum:InvId:true:Пароль#1`.
- Сумму передают с точностью до двух знаков после запятой, все данные — в UTF-8.
- Ошибка подписи обычно означает неверный порядок параметров или неверный пароль.
- XML-интерфейсы и Invoice API возвращают HTTP 200 и при прикладных ошибках; результат смотрят в `Result.Code` или `isSuccess`.
- OpStateExt, холдирование, рекурренты и возвраты не работают в тестовом режиме.
- У Robokassa есть публичный MCP-сервер для ИИ-ассистентов: https://mcp.robokassa.ru/

## Сценарии с этим методом

- [Выставить счёт ссылкой и вернуть деньги](https://mcp-everything.ru/integrations/robokassa/scenarios/vystavit-schet-ssylkoy-i-vernut-dengi.md)

---

Если этого недостаточно — официальная документация: https://docs.robokassa.ru/ru/quick-start
Вся интеграция одним документом: https://mcp-everything.ru/integrations/robokassa.md
