Skip to content

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 units
  • currency (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 to
  • payment_method_amount → Exact amount the payer must transfer, as returned by the provider
  • payment_method_bank_name → Bank of the recipient
  • payment_method_recipient → Name of the recipient
  • payment_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 full
  • mispaid → the transfer was received, but the amount differs from the requested one. Use received_amount instead of amount
  • failed → 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.