SBP
"paymentMethodName": "SBP"
Payment Method Features
Payment Method | SBP (Система Быстрых Платежей) |
---|---|
Country | Russia |
Processing Currencies | RUS |
Payments | Yes |
-- Min per transaction amount | 1 RUB |
-- Max per transaction amount | Vary, depends on your contract |
Disbursements | Later |
-- Disbursement Limits | -- |
Refunds | Full & Partial |
Chargebacks | No |
Possible Payment Scenarios:
Our API will provide you with all the necessary information to execute on of the following scenarios:
Name | Steps |
---|---|
Displaying a QR Code in a Web Browser |
The payment status is returned via a callback. |
Payment via Mobile Application |
|
Workflow: Payment & Refund

Download in high resolution
Section “QR Generation”
[Step 1.3] You need to create a new intent
- Use the following API method to create an intent:
*POST /processing/api/v1/intents*
. - When creating the intent, complete the
Payment
object. - Most fields are common across all payment methods and are thoroughly described in the API Reference section.
- Method-specific parameters ( please make sure you provided them correctly):
-
"countryIsoCode": "RU"
← always “RU” for SBP payment method -
"paymentMethodName": "SBP"
← always “SBP” for SBP payment method -
"incomingDetails":
{ "successUrl": "Some Url", "failUrl": "Some Url", "returnUrl": "Some Url" }
-
- Ensure these all the required fields are completed accurately so that we can process your request correctly.
Request Example
{
"clientReferenceId": "1234",
"payments": [
{
"payer": {
"countryIsoCode": "RU"
},
"paymentInstrument": {
"paymentMethodName": "SBP",
"incomingDetails": {
"successUrl": "Some Url",
"failUrl": "Some Url",
"returnUrl": "Some Url"
}
},
"description": "Purchase description",
"webhookUrl": "webhookUrl",
"submittedAmount": {
"value": 100.05,
"currency": "RUB"
},
"authCurrencyCode": "RUB"
}
]
}
Fields description
Field | Required | Type | Description | Example |
---|---|---|---|---|
clientReferenceId | Required | String | The client/merchant intent reference. Aka, Transaction Reference | 1234 |
payments | Required | Array | The list of payments | n/a |
-- payer | Required | Object | The payer details | n/a |
---- countryIsoCode | Required | String | Payer’s country of residence in ISO 3166-1 alpha-2 format | RU |
-- paymentInstrument | Required | Object | The receiver payment instrument | n/a |
---- paymentMethodName | Required | String | Payment method name | SBP |
---- incomingDetails | Required | Object | Additional data related to payment method | n/a |
------ successUrl | Required | String | Some Url | |
------ failUrl | Required | String | Some Url | |
------ returnUrl | Required | String | Some Url | |
-- description | Required | String | The payment description (arbitrary string) | Purchase description |
-- webhookUrl | Optional | String | The URL to which the payment charge state changes will be notified | webhookUrl |
-- submittedAmount | Required | Object | n/a | |
---- submittedAmount.value | Required | Number | Transaction amount | 100.40 |
---- currency | Required | String | The original currency of the transaction. Can vary, will be converted into auth currency during the processing | KZT |
-- authCurrencyCode | Required | String | The currency the transaction will be processed. Always RUB for this method | RUB |
[Step 1.7] Return the QR in response
- In the response, you will receive an additional object
payments.additionalData
. It contains the following fields**:**QR_BASE64
– a QR code encoded in Base64QR_LINK
– a link that is converted into a QR codeREDIRECT_URL
– a URL for redirection
Response Example
{
"intentId": "232510340021612544",
"payments": [
{
"id": "232510340646563840",
"submittedAmount": {
"value": 100.05,
"currency": "RUB"
},
"authAmount": {
"value": 100.05,
"currency": "RUB"
},
"payer": {
"countryIsoCode": "RU"
},
"paymentInstrument": {
"id": "PI204264628196626432",
"paymentMethodId": "PM199507277233246209",
"paymentMethodName": "SBP",
"storedDetails": {
"successUrl": "Some Url",
"failUrl": "Some Url",
"returnUrl": "Some Url"
}
},
"status": "ACCEPTED",
"additionalData": {
"qrBase64": "qrBase64",
"qrLink": "qrLink",
"redirectUrl": "redirectUrl"
}
}
],
"disbursements": [],
"clientReferenceIntentId": "123456789",
"paymentCreationErrors": [],
"disbursementCreationErrors": [],
"intentStatus": "CREATED"
}
Section “QR Payment”
[2.7] Receive the webhook with the transaction status
More about Payment Callbacks on the dedicated page
- After the transaction was processed and reached its final status (CAPTURED or DECLINED)
- The Platform will notify you about the latest status change via the callback
SIMPLE WEBHOOK WITH TRANSACTION STATUS
{
"status": "AUTHORIZED",
"errorCode": "CODE_PT0000",
"errorMessage": "string"
}
REFUNDS
- They cannot exceed the total value of the original transaction
- Refund can be full or partial
[Step 5.1] Send a Refund Request
- To initiate the refund (full or partial) to the payer's original payment instrument, you must send a separate Refund request.
- If the payment involved FX and there two currencies involved, then you can use any these two currencies here.
- There is no difference between currencies, because we will use the historical rate that was used during the payment processing and the payer will receive the exact amount they spent.
- However you must fill in only one object paymentSubmittedAmount or paymentAuthAmount
- paymentSubmittedAmount must be filled in the currency specified in field during the payment creation in
submittedAmount.curency
- paymentAuthAmount must be filled in the currency specified in field during the payment creation in
authCurrencyCode
- paymentSubmittedAmount must be filled in the currency specified in field during the payment creation in
- Use the following endpoint: Create Refund inside existing Intent and specify the following parameters:
Example:
//For full refund
{
"paymentId": 204264682781298700
}
//For partial refund
{
"paymentId": 204264682781298700,
"partial": true,
"paymentSubmittedAmount": {
"value": 100.05,
"currency": "RUB"
},
"webhookUrl": "webhookUrl"
}
Field | Type | Required | Description |
---|---|---|---|
paymentId | int64 | Required | • You must to let us know what payment transaction this refund must be linked to. • Input here the ID of a Payment transaction your received during the Intent Creation from us. |
partial | boolean | Optional | • true - for partial refunds. If the refund is partial, then you need to specify the amount and currency • fasle - for full refunds. You don't need to specify the amount. If the filed is not specified at all, the platform will try to issue the refund for the full available amount • if not specified - the platform will initiate a full refund |
paymentSubmittedAmount | object | Optional | • Need to specify this object OR |
-- value | number | Optional | |
-- currency | string | Optional | |
paymentAuthAmount | object | Optional | • Need to specify this object OR |
-- value | number | Optional | |
-- currency | string | Optional | |
reason | string | Optional | Reason for the refund |
webhookUrl | string | Optional | Webhook URL that will receive notifications about refund status updates |
- After the creation of the refund request you must wait for the callback, that will provide you with the latest transaction status
[5.5] Receive the webhook with the transaction status
More about Refund Callbacks on the dedicated page
- After the transaction was processed and reached its final status (REFUNDED or DECLINED)
- The Platform will notify you about the latest status change via the callback
SIMPLE WEBHOOK WITH TRANSACTION STATUS
{
"status": "REFUNDED",
"errorCode": "CODE_PT0000",
"errorMessage": "string"
}
Updated about 2 hours ago