{"name":"Robokassa API","vendor":"Robokassa","industry":"finance","summary":"Платёжный сервис Robokassa: магазин перенаправляет покупателя на платёжную страницу с подписанными параметрами, а результат оплаты получает уведомлением на ResultURL. Отдельные интерфейсы позволяют выставлять счета-ссылки, проверять состояние операции, подтверждать и отменять холдирование, проводить повторные (рекуррентные) платежи и возвраты.","docsUrl":"https://docs.robokassa.ru/ru/quick-start","coverage":{"included":[],"excluded":[]},"scenarios":[{"id":"prinyat-oplatu-cherez-platezhnuyu","title":"Принять оплату через платёжную страницу","summary":"Покупатель переходит на страницу Robokassa, платит и возвращается на сайт; магазин узнаёт об оплате серверным уведомлением.","steps":["В личном кабинете возьми MerchantLogin, Пароль#1 и Пароль#2, выбери алгоритм хэша (в примерах — MD5) и укажи ResultURL — адрес серверного уведомления.","Посчитай подпись: хэш строки MerchantLogin:OutSum:InvId:Пароль#1. Если передаёшь свои параметры Shp_*, добавь их в конец в алфавитном порядке в виде Shp_name=value.","Перенаправь покупателя: GET /Merchant/Index.aspx с MerchantLogin, OutSum (точка как разделитель, два знака), InvId, Description и SignatureValue. Для теста — IsTest=1 и тестовые пароли.","После оплаты Robokassa пришлёт на ResultURL OutSum, InvId и SignatureValue. Проверь подпись по формуле OutSum:InvId:Пароль#2[:Shp_*] и только после этого отметь заказ оплаченным.","Ответь на уведомление строкой OK + номер заказа (например, OK1042) — иначе Robokassa будет считать его недоставленным. Возврат покупателя на SuccessURL не подтверждает оплату."],"code":"import hashlib\nfrom urllib.parse import urlencode\n\nLOGIN, PASS1, PASS2 = \"demo-shop\", \"<Пароль#1>\", \"<Пароль#2>\"\n\ndef pay_url(inv_id: int, out_sum: str, description: str) -> str:\n    sig = hashlib.md5(f\"{LOGIN}:{out_sum}:{inv_id}:{PASS1}\".encode()).hexdigest()\n    q = {\"MerchantLogin\": LOGIN, \"OutSum\": out_sum, \"InvId\": inv_id, \"Description\": description, \"SignatureValue\": sig}\n    return \"https://auth.robokassa.ru/Merchant/Index.aspx?\" + urlencode(q)\n\ndef result_ok(form: dict) -> str | None:\n    \"\"\"Обработчик ResultURL: вернуть 'OK<InvId>' или None, если подпись неверна.\"\"\"\n    expected = hashlib.md5(f\"{form['OutSum']}:{form['InvId']}:{PASS2}\".encode()).hexdigest()\n    return f\"OK{form['InvId']}\" if expected.lower() == form[\"SignatureValue\"].lower() else None\n\nprint(pay_url(1042, \"1500.00\", \"Оплата заказа 1042\"))","language":"python","methods":["GET /Merchant/Index.aspx"]},{"id":"proverit-oplachen-li-zakaz","title":"Проверить, оплачен ли заказ","summary":"Узнать состояние операции, если уведомление не пришло или нужно перепроверить.","steps":["Посчитай подпись: хэш строки MerchantLogin:InvoiceID:Пароль#2.","Запроси состояние: GET /Merchant/WebService/Service.asmx/OpStateExt с MerchantLogin, InvoiceID и Signature.","Ответ — XML. Сначала смотри Result/Code: 0 — запрос выполнен. Затем State/Code: 100 — операция оплачена.","Интерфейс работает только в боевом режиме: тестовые платежи он не возвращает."],"code":"SIG=$(printf '%s' 'demo-shop:1042:<Пароль#2>' | md5sum | cut -d' ' -f1)\ncurl -G https://auth.robokassa.ru/Merchant/WebService/Service.asmx/OpStateExt \\\n  -d MerchantLogin=demo-shop -d InvoiceID=1042 -d Signature=$SIG","language":"bash","methods":["GET /Merchant/WebService/Service.asmx/OpStateExt"]},{"id":"dvuhstadiynaya-oplata-zablokirovat","title":"Двухстадийная оплата: заблокировать и списать позже","summary":"Деньги замораживаются при заказе, списываются после сборки или возвращаются при отмене.","steps":["Открой оплату с холдированием: GET /Merchant/Index.aspx с StepByStep=true. В подпись добавляется модификатор: MerchantLogin:OutSum:InvId:true:Пароль#1.","После оплаты операция окажется в состоянии HOLD — проверь это через OpStateExt.","Спиши деньги: POST /Merchant/Payment/Confirm с MerchantLogin, InvoiceID, OutSum и подписью MerchantLogin:OutSum:InvoiceID:Пароль#1. Вызывается один раз; новый Receipt может только уменьшить сумму и состав корзины.","Или отмени: POST /Merchant/Payment/Cancel. OutSum передаётся, но в подписи на месте суммы пустой сегмент: MerchantLogin::InvoiceID:Пароль#1.","Холдирование не работает в тестовом режиме."],"code":"SIG=$(printf '%s' 'demo-shop:1500.00:1042:<Пароль#1>' | md5sum | cut -d' ' -f1)\ncurl -X POST https://auth.robokassa.ru/Merchant/Payment/Confirm \\\n  -d MerchantLogin=demo-shop -d InvoiceID=1042 -d OutSum=1500.00 -d SignatureValue=$SIG","language":"bash","methods":["GET /Merchant/Index.aspx","POST /Merchant/Payment/Confirm","POST /Merchant/Payment/Cancel"]},{"id":"povtornye-platezhi-po-podpiske","title":"Повторные платежи по подписке","summary":"Списывать деньги регулярно без участия покупателя после первой оплаты.","steps":["Первую (материнскую) оплату проведи как обычно через GET /Merchant/Index.aspx, добавив Recurring=true. Покупатель соглашается на повторные списания.","Для каждого следующего списания вызови POST /Merchant/Recurring с MerchantLogin, InvoiceID (новый номер операции), PreviousInvoiceID (номер оплаченной материнской операции), OutSum и подписью MerchantLogin:OutSum:InvoiceID:Пароль#1. PreviousInvoiceID в подпись не входит.","Ответ вида OK156 значит, что запрос принят; итог списания придёт уведомлением на ResultURL, как у обычной оплаты.","Повторные платежи работают только в боевом режиме."],"code":"SIG=$(printf '%s' 'demo-shop:399.00:2001:<Пароль#1>' | md5sum | cut -d' ' -f1)\ncurl -X POST https://auth.robokassa.ru/Merchant/Recurring \\\n  -d MerchantLogin=demo-shop -d InvoiceID=2001 -d PreviousInvoiceID=1042 \\\n  -d OutSum=399.00 --data-urlencode 'Description=Подписка, ноябрь' -d SignatureValue=$SIG","language":"bash","methods":["GET /Merchant/Index.aspx","POST /Merchant/Recurring"]},{"id":"vystavit-schet-ssylkoy-i-vernut-dengi","title":"Выставить счёт ссылкой и вернуть деньги","summary":"Ссылка на оплату без корзины на сайте и возврат по завершённой операции — оба через services.robokassa.ru, тело запроса — JWT.","steps":["Создай счёт: POST /InvoiceServiceWebApi/api/CreateInvoice. Payload — MerchantLogin, InvoiceType (OneTime или Reusable), OutSum, Description и при необходимости InvoiceItems для чека; подпиши его HMAC с секретом MerchantLogin:Пароль#1. В ответе url — ссылка для клиента.","Ответ приходит с HTTP 200 и при ошибках — проверяй isSuccess.","Для возврата подключи API возвратов в кабинете и получи Password3. Отправь POST /RefundService/Refund/Create с OpKey — идентификатором завершённой операции — и RefundSum для частичного возврата (для полного не передаётся). JWT подписывается Password3 алгоритмом HS256, HS384 или HS512.","Проверь результат возврата: GET /RefundService/Refund/GetState с id = requestId из ответа на создание. Ошибка 401 значит, что Password3 неверный или API возвратов не подключён."],"code":"import jwt, requests  # pip install pyjwt requests\n\ntoken = jwt.encode({\"OpKey\": \"<OpKey операции>\", \"RefundSum\": 500.0}, \"<Password3>\", algorithm=\"HS256\")\n# Тело запроса — сама строка JWT\nr = requests.post(\"https://services.robokassa.ru/RefundService/Refund/Create\", data=token)\nprint(r.json())  # {\"success\": true, \"requestId\": \"...\"} — дальше Refund/GetState?id=<requestId>","language":"python","methods":["POST /InvoiceServiceWebApi/api/CreateInvoice","POST /RefundService/Refund/Create","GET /RefundService/Refund/GetState"]}],"baseUrls":[{"label":"Боевой (оплата, XML-интерфейсы, холдирование, рекурренты)","url":"https://auth.robokassa.ru"},{"label":"Боевой (счета, возвраты, фискализация)","url":"https://services.robokassa.ru"}],"auth":{"type":"other","description":"Стандартной схемы авторизации нет: каждый запрос подписывается контрольной суммой, состав которой зависит от метода. В личном кабинете магазина берутся `MerchantLogin`, Пароль#1, Пароль#2 (и Password3 для API возвратов), там же выбирается алгоритм хэша (в примерах документации — MD5). Пароль#1 используется для подписи запросов на оплату, Пароль#2 — для проверки уведомлений и XML-интерфейсов. Invoice API и Refund API принимают тело в виде JWT, подписанного HMAC.\n\nПодпись запуска оплаты: `MerchantLogin:OutSum:InvId:модификаторы:Пароль#1:Shp_*`. Пример из документации (PHP, MD5):","example":"$signature = md5(\"$merchantLogin:$outSum:$invId:$password1\");"},"methods":[{"id":"GET /Merchant/Index.aspx","title":"Открыть платежную страницу","httpMethod":"GET","path":"/Merchant/Index.aspx","description":"Создаёт операцию оплаты и открывает платёжную страницу. Тот же набор параметров можно отправить POST-формой (`application/x-www-form-urlencoded`). Для теста передайте `IsTest=1`. Ответ — HTML платёжной формы или 302 с адресом платёжной страницы; он не подтверждает оплату.","params":[{"name":"MerchantLogin","in":"query","type":"string","required":true,"description":"Идентификатор магазина"},{"name":"OutSum","in":"query","type":"string","required":true,"description":"Сумма к оплате, десятичный разделитель — точка"},{"name":"SignatureValue","in":"query","type":"string","required":true,"description":"Подпись запроса с Паролем#1"},{"name":"InvId","in":"query","type":"integer","required":false,"description":"Уникальный номер счёта; при 0 или отсутствии назначается автоматически"},{"name":"Description","in":"query","type":"string","required":false,"description":"Название товара или услуги без спецсимволов"},{"name":"Email","in":"query","type":"string","required":false,"description":"Email покупателя для чеков и уведомлений"},{"name":"IncCurrLabel","in":"query","type":"string","required":false,"description":"Предлагаемый способ оплаты из GetCurrencies"},{"name":"Culture","in":"query","type":"string","required":false,"description":"Язык платёжной страницы: ru, en"},{"name":"Encoding","in":"query","type":"string","required":false,"description":"Кодировка данных"},{"name":"IsTest","in":"query","type":"integer","required":false,"description":"Тестовый режим: 0, 1"},{"name":"ExpirationDate","in":"query","type":"string","required":false,"description":"Крайний срок оплаты, YYYY-MM-DDThh:mm"},{"name":"Receipt","in":"query","type":"string","required":false,"description":"Фискальные данные — минимизированный JSON в URL-кодировке"},{"name":"IsWithoutFreeSale","in":"query","type":"boolean","required":false,"description":"Не формировать автоматический чек «Свободная продажа» без Receipt"},{"name":"StepByStep","in":"query","type":"boolean","required":false,"description":"Двухстадийная оплата (холдирование)"},{"name":"PaymentMethods","in":"query","type":"array","required":false,"description":"Разрешённые способы оплаты, параметр можно повторять"},{"name":"ResultUrl2","in":"query","type":"string","required":false,"description":"Дополнительный адрес серверного уведомления"},{"name":"SuccessUrl2","in":"query","type":"string","required":false,"description":"Дополнительный адрес возврата после успешной оплаты"},{"name":"FailUrl2","in":"query","type":"string","required":false,"description":"Дополнительный адрес возврата после ошибки"},{"name":"Token","in":"query","type":"string","required":false,"description":"Токен сохранённой карты"},{"name":"Recurring","in":"query","type":"boolean","required":false,"description":"Признак периодического платежа"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /Merchant/WebService/Service.asmx/OpStateExt","title":"Состояние операции","httpMethod":"GET","path":"/Merchant/WebService/Service.asmx/OpStateExt","description":"Возвращает состояние оплаты и реквизиты операции в XML. Работает только в основном режиме, тестовые платежи не возвращает. Подпись: `MerchantLogin:InvoiceID:Пароль#2`.","params":[{"name":"MerchantLogin","in":"query","type":"string","required":true,"description":"Идентификатор магазина"},{"name":"InvoiceID","in":"query","type":"integer","required":true,"description":"Номер счёта магазина"},{"name":"Signature","in":"query","type":"string","required":true,"description":"Контрольная сумма в шестнадцатеричном формате"}],"requestExample":"","responseExample":"<OperationStateResponse>\n  <Result><Code>0</Code></Result>\n  <State>\n    <Code>100</Code>\n    <RequestDate>2026-07-22T10:00:00+03:00</RequestDate>\n    <StateDate>2026-07-22T09:59:00+03:00</StateDate>\n  </State>\n</OperationStateResponse>","docsUrl":""},{"id":"GET /Merchant/WebService/Service.asmx/GetCurrencies","title":"Доступные способы оплаты","httpMethod":"GET","path":"/Merchant/WebService/Service.asmx/GetCurrencies","description":"Справочный метод без контрольной суммы.","params":[{"name":"MerchantLogin","in":"query","type":"string","required":true,"description":"Идентификатор магазина"},{"name":"Language","in":"query","type":"string","required":false,"description":"Язык названий: ru, en"}],"requestExample":"","responseExample":"<CurrenciesList xmlns=\"http://merchant.roboxchange.com/WebService/\">\n  <Result><Code>0</Code></Result>\n  <Groups>\n    <Group Code=\"BankCard\" Description=\"Банковской картой\">\n      <Items>\n        <Currency Label=\"BankCardPSR\" Alias=\"BankCard\" Name=\"Банковская карта\" />\n      </Items>\n    </Group>\n  </Groups>\n</CurrenciesList>","docsUrl":""},{"id":"POST /InvoiceServiceWebApi/api/CreateInvoice","title":"Создать счёт","httpMethod":"POST","path":"/InvoiceServiceWebApi/api/CreateInvoice","description":"Создаёт одноразовую или многоразовую ссылку на оплату (хост `services.robokassa.ru`). Тело — строка JWT; секрет для HMAC — `MerchantLogin:Пароль#1` (для тестового счёта с `AdditionalParameters.IsTest=1` — тестовый Пароль#1). Ниже — поля payload.","params":[{"name":"MerchantLogin","in":"body","type":"string","required":true,"description":"Логин магазина"},{"name":"InvoiceType","in":"body","type":"string","required":true,"description":"OneTime или Reusable"},{"name":"Culture","in":"body","type":"string","required":false,"description":"ru, en"},{"name":"InvId","in":"body","type":"integer","required":false,"description":"Номер счёта"},{"name":"OutSum","in":"body","type":"number","required":false,"description":"Сумма"},{"name":"ExpirationDate","in":"body","type":"string","required":false,"description":"Окончание действия счёта"},{"name":"Description","in":"body","type":"string","required":false,"description":"Описание"},{"name":"InvoiceItems","in":"body","type":"array","required":false,"description":"Позиции для чека"},{"name":"Aliases","in":"body","type":"array","required":false,"description":"Доступные способы оплаты"},{"name":"Sno","in":"body","type":"string","required":false,"description":"Система налогообложения"},{"name":"AdditionalParameters","in":"body","type":"object","required":false,"description":"Доп. параметры формы: IsTest, IncCurrLabel, PaymentMethods, Email, ResultURL2, StepByStep и др."}],"requestExample":"","responseExample":"{\"id\":\"01234567-89ab-4cde-8f01-23456789abcd\",\"invId\":1234567890,\"url\":\"https://auth.robokassa.ru/merchant/Invoice/AbCdEfGhIjKlMnOpQrStUv\",\"isSuccess\":true}","docsUrl":""},{"id":"POST /Merchant/Payment/Confirm","title":"Подтвердить списание при холдировании","httpMethod":"POST","path":"/Merchant/Payment/Confirm","description":"Завершает двухстадийный платёж в состоянии HOLD. Вызывается один раз; новый `Receipt` может только уменьшить сумму и состав корзины. Подпись: `MerchantLogin:OutSum:InvoiceID:Пароль#1` (с чеком — `MerchantLogin:OutSum:InvoiceID:Receipt:Пароль#1`). Только основной режим.","params":[{"name":"MerchantLogin","in":"body","type":"string","required":true,"description":"Идентификатор магазина"},{"name":"InvoiceID","in":"body","type":"integer","required":true,"description":"Номер счёта"},{"name":"OutSum","in":"body","type":"string","required":true,"description":"Сумма"},{"name":"Receipt","in":"body","type":"string","required":false,"description":"Обновлённый JSON чека в URL-кодировке"},{"name":"SignatureValue","in":"body","type":"string","required":true,"description":"Подпись"}],"requestExample":"","responseExample":"success: true","docsUrl":""},{"id":"POST /Merchant/Payment/Cancel","title":"Отменить холдирование","httpMethod":"POST","path":"/Merchant/Payment/Cancel","description":"Отменяет платёж в состоянии HOLD. `OutSum` передаётся, но в подписи вместо суммы пустой сегмент: `MerchantLogin::InvoiceID:Пароль#1`. Итоговый статус проверяют через OpStateExt.","params":[{"name":"MerchantLogin","in":"body","type":"string","required":true,"description":"Идентификатор магазина"},{"name":"InvoiceID","in":"body","type":"integer","required":true,"description":"Номер счёта"},{"name":"OutSum","in":"body","type":"string","required":true,"description":"Сумма (не входит в подпись)"},{"name":"SignatureValue","in":"body","type":"string","required":true,"description":"Подпись"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /Merchant/Recurring","title":"Повторный платёж","httpMethod":"POST","path":"/Merchant/Recurring","description":"Дочерний платёж после успешной материнской операции с `Recurring=true`; списывает деньги без участия покупателя. `PreviousInvoiceID` в подпись не входит. Только основной режим.","params":[{"name":"MerchantLogin","in":"body","type":"string","required":true,"description":"Идентификатор магазина"},{"name":"InvoiceID","in":"body","type":"integer","required":true,"description":"Номер новой (дочерней) операции"},{"name":"PreviousInvoiceID","in":"body","type":"integer","required":true,"description":"Номер оплаченной материнской операции"},{"name":"OutSum","in":"body","type":"string","required":true,"description":"Сумма"},{"name":"Description","in":"body","type":"string","required":false,"description":"Описание"},{"name":"Receipt","in":"body","type":"string","required":false,"description":"JSON чека в URL-кодировке"},{"name":"SignatureValue","in":"body","type":"string","required":true,"description":"Подпись с Паролем#1"}],"requestExample":"","responseExample":"OK156","docsUrl":""},{"id":"POST /RefundService/Refund/Create","title":"Создать возврат","httpMethod":"POST","path":"/RefundService/Refund/Create","description":"Полный или частичный возврат по завершённой операции (хост `services.robokassa.ru`). Тело — JWT, подписанный Password3 (HS256, HS384 или HS512). Требует подключения API возвратов.\n\nПример ответа (ошибка 401):","params":[{"name":"OpKey","in":"body","type":"string","required":true,"description":"Идентификатор завершённой платёжной операции"},{"name":"RefundSum","in":"body","type":"number","required":false,"description":"Сумма частичного возврата; для полного не передаётся"},{"name":"InvoiceItems","in":"body","type":"array","required":false,"description":"Позиции чека возврата прихода"}],"requestExample":"{\"success\":false,\"message\":\"Signature key is not exists or partner have not access to API\",\"requestId\":null}","responseExample":"","docsUrl":""},{"id":"GET /RefundService/Refund/GetState","title":"Состояние возврата","httpMethod":"GET","path":"/RefundService/Refund/GetState","description":"","params":[{"name":"id","in":"query","type":"string","required":true,"description":"requestId, полученный при создании возврата"}],"requestExample":"","responseExample":"","docsUrl":""}],"codeExamples":[],"errors":[{"code":"400","description":"Refund API: некорректный JWT или невалидная подпись JWT"},{"code":"401","description":"Refund API: неверный Password3 или API возвратов не подключён"},{"code":"500","description":"Recurring: ошибка обработки рекуррентного платежа"}],"limits":"","gotchas":["После оплаты 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/"],"slug":"robokassa","version":2,"updatedAt":"2026-10-24T17:05:35.780Z","sources":[{"title":"OpenAPI-спецификация","url":"https://docs.robokassa.ru/ru/api-specification","kind":"research","addedAt":"2026-10-12T08:18:59.166Z"},{"title":"Файл спецификации YAML","url":"https://docs.robokassa.ru/openapi/robokassa.yaml","kind":"research","addedAt":"2026-10-12T08:18:59.166Z"},{"title":"Быстрый старт","url":"https://docs.robokassa.ru/ru/quick-start","kind":"research","addedAt":"2026-10-12T08:18:59.166Z"},{"title":"Интерфейс оплаты","url":"https://docs.robokassa.ru/ru/pay-interface","kind":"research","addedAt":"2026-10-12T08:18:59.166Z"},{"title":"Уведомления и переадресация","url":"https://docs.robokassa.ru/ru/notifications-and-redirects","kind":"research","addedAt":"2026-10-12T08:18:59.166Z"},{"title":"Robokassa MCP","url":"https://mcp.robokassa.ru/","kind":"research","addedAt":"2026-10-12T08:18:59.166Z"},{"title":"Вставленный текст","url":"","kind":"import","addedAt":"2026-10-12T08:18:59.166Z"},{"title":"scenarios-robokassa.md","url":"","kind":"import","addedAt":"2026-10-24T17:05:26.439Z"}],"logoUrl":null}