Appearance
SBP Payments
SBP — Faster Payments System (Система Быстрых Платежей) — is a bank-to-bank instant transfer scheme. The payer receives the recipient credentials (phone number, bank and recipient name) and completes the transfer in their own banking application.
Use this page to create payments via SBP using the common Payment API endpoint. Authentication and base URL follow the Payment API docs.
- Base URL:
https://api.wirekassa.com/api/v1/payment/ - Endpoint:
POST /v1/payment/
All request and response bodies are flat: amount and currency are separate top-level fields and payment_method is the method type as a string.
The payment method identifier transmitted in the API is sbp.
This method can return the mispaid status — see the Mispaid instruction.
Supported Currencies
- RUB
Integration Models
SBP payments support two integration models:
- Redirect flow: The customer is redirected to our secure hosted page. Redirect the user using
redirect_url. - Server-to-Server: You will receive the recipient credentials in the
payment_method_*fields and display them yourself.
The model applied to a transaction depends on your channel configuration. If your channel is configured to collect payer personal data, the payer provides it on our hosted page and the recipient credentials are issued only afterwards. Ask us to confirm your channel's configuration.
Flow
Common fields (see Payment API):
channel(UUID, required)amount(string, required) → amount in major unitscurrency(ISO 4217, required)external_id(string, optional)return_url(string, recommended)callback_url(string, optional)payment_method(string, required) →"sbp"
SBP takes no additional method fields. Any extra top-level field is ignored.
Example Request
json
{
"channel": "550e8400-e29b-41d4-a716-446655440000",
"amount": "1000.00",
"currency": "RUB",
"payment_method": "sbp",
"external_id": "ORDER-10002",
"return_url": "https://your-company.com/return",
"callback_url": "https://your-company.com/callback"
}Example Response (Server to Server)
json
{
"status": "processing",
"transaction_id": "7d1c94b2-6f3a-4e58-9a21-15c0be7742d9",
"amount": "1000.0",
"currency": "RUB",
"redirect_url": "https://pay.wirekassa.com/7d1c94b2-6f3a-4e58-9a21-15c0be7742d9/",
"channel": "550e8400-e29b-41d4-a716-446655440000",
"external_id": "ORDER-10002",
"payment_method": "sbp",
"payment_method_phone": "+79997775544",
"payment_method_amount": "1000.00",
"payment_method_bank_name": "SBER",
"payment_method_recipient": "IVAN I.",
"create_date": "2025-10-15T23:54:13.008007+00:00",
"update_date": "2025-10-15T23:54:13.008007+00:00"
}Recipient Credentials
When the recipient credentials are issued, the response carries:
payment_method_phone→ Phone number of the recipient the payer must transfer topayment_method_amount→ Exact amount the payer must transfer, as returned by the providerpayment_method_bank_name→ Bank of the recipientpayment_method_recipient→ Name of the recipientpayment_method_qr→ QR payload for the transfer, when the provider issues one
All four fields are issued together. Show all of them to the payer: an SBP transfer is matched by the recipient phone, bank and the exact amount, so a transfer of a different amount is settled as mispaid.
Example Response (Hosted)
If your channel collects payer personal data on our hosted page, the create response contains no recipient credentials yet. Redirect the payer using redirect_url.
json
{
"status": "processing",
"transaction_id": "7d1c94b2-6f3a-4e58-9a21-15c0be7742d9",
"amount": "1000.0",
"currency": "RUB",
"redirect_url": "https://pay.wirekassa.com/7d1c94b2-6f3a-4e58-9a21-15c0be7742d9/",
"channel": "550e8400-e29b-41d4-a716-446655440000",
"external_id": "ORDER-10002",
"payment_method": "sbp",
"create_date": "2025-10-15T23:54:13.008007+00:00",
"update_date": "2025-10-15T23:54:13.008007+00:00"
}Completing the Payment
The payer performs the transfer in their banking application. There is no confirmation call for SBP — the provider reports the result and the transaction is settled on our side.
Poll GET /v1/payment/ or wait for the callback until the transaction reaches a final status:
completed→ the transfer was received in fullmispaid→ the transfer was received, but the amount differs from the requested one. Usereceived_amountinstead ofamountfailed→ the transfer was not received before the payment expired, or the provider declined the payment
Example Response (Completed)
json
{
"status": "completed",
"transaction_id": "7d1c94b2-6f3a-4e58-9a21-15c0be7742d9",
"amount": "1000.0",
"currency": "RUB",
"redirect_url": "https://pay.wirekassa.com/7d1c94b2-6f3a-4e58-9a21-15c0be7742d9/",
"channel": "550e8400-e29b-41d4-a716-446655440000",
"external_id": "ORDER-10002",
"create_date": "2025-10-15T23:54:13.008007+00:00",
"update_date": "2025-10-15T23:58:41.114902+00:00"
}Notes:
- The recipient credentials are issued per transaction. Do not cache them and do not reuse them for another payment.
- If the provider returns incomplete recipient credentials, the payment is declined. Create a new payment in that case.