Payment Docs
Payouts

SBP (RUB)

How to create payouts using SBP phone numbers

Payouts allow you to send funds from your merchant account to phone numbers via SBP.

Creating an SBP payout is a two-step process:

  1. Get the list of banks available for the recipient's phone number.
  2. Create the payout, passing the selected bank's id as account.bankName.

Before you start

How to authorize requests

Before making requests, ensure that your merchant account has sufficient funds for the payout.

Depending on the payment method, the phone number format may differ. Some methods require the number without the +7 or 7 prefix (for example, 9117883630 instead of 79117883630). Check the format expected by the method you use.


Step 1. Get the list of banks

Before creating a payout, request the list of banks that can receive an SBP transfer for the recipient's phone number:

GET /v1/payouts/banks?account=79117883630

Request example

curl -X GET "https://api.1capital.capital/v1/payouts/banks?account=79117883630" \
-H "X-Api-Token: YOUR_API_TOKEN"

Query parameters

FieldTypeRequiredDescription
accountstring✅ YesRecipient phone number

Response example

[
  { "id": "100000000004", "name": "T-Bank - Т-Банк" },
  { "id": "100000000111", "name": "Sberbank - Сбербанк" }
]

Pick the bank the recipient wants to receive funds at and use its id as the account.bankName value in the next step.


Step 2. Create a payout

Send a POST request to create a new payout:

POST /v1/payouts

Request example

curl -X POST "https://api.1capital.capital/v1/payouts" \
-H "Content-Type: application/json" \
-H "X-Api-Token: YOUR_API_TOKEN" \
-d '{
  "amount": 1000,
  "currency": "RUB",
  "paymentType": "SBP",
  "account": {
    "name": "John Doe",
    "requisites": "79117883630",
    "bankName": "100000000004",
    "userId": "user_12345"
  },
  "note": "Payout for order #1234"
}'

Request parameters

Main parameters

FieldTypeRequiredDescription
amountnumber✅ YesPayout amount
currencystring✅ YesCurrency code
paymentTypestring✅ YesPayment type
accountobject✅ YesRecipient details
notestring❌ NoNote for the payout
externalIdstring❌ NoPayout identifier in your system
callbackUrlstring❌ NoWebhook notification address for the payout

Account object

FieldTypeRequiredDescription
namestring✅ YesRecipient name
requisitesstring✅ YesAccount details (phone number)
bankNamestring✅ YesBank id from GET /v1/payouts/banks (for example, 100000000004)
userIdstring✅ YesUser ID in your system

Supported currencies

ValueDescription
RUBRussian Ruble

Payment types

ValueDescription
SBPSBP transfer

Successful response example

{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "merchantId": "123e4567-e89b-12d3-a456-426614174000",
  "amount": "1000",
  "account": {
    "name": "John Doe",
    "requisites": "79117883630",
    "bankName": "100000000004",
    "userId": "user_12345"
  },
  "status": "CREATED",
  "type": "SBP",
  "requisites": {},
  "statusMessage": null,
  "metadata": null,
  "callbackUrl": null,
  "createdAt": "2023-03-21T12:34:56Z",
  "updatedAt": "2023-03-21T12:34:56Z",
  "completedAt": null
}

Response fields

FieldTypeDescription
idstringPayout UUID
merchantIdstringYour merchant UUID
amountstringPayout amount
accountobjectRecipient details
statusstringCurrent payout status
typestringPayment type
requisitesobjectAdditional requisites
statusMessagestring / nullStatus message (if any)
metadataobject / nullAdditional metadata
callbackUrlstring / nullWebhook notification address for this payout (null — merchant settings are used)
createdAtstringCreation time
updatedAtstringLast update time
completedAtstring / nullCompletion time

Payout statuses

StatusDescription
CREATEDPayout created
PENDINGPayout is being processed
COMPLETEDPayout completed successfully
FAILEDPayout failed
CANCELEDPayout canceled
EXPIREDPayout expired

Checking payout status

To check the current status of a payout, send a GET request:

GET /v1/payouts/{payoutId}

Request example

curl -X GET "https://api.1capital.capital/v1/payouts/123e4567-e89b-12d3-a456-426614174000" \
-H "X-Api-Token: YOUR_API_TOKEN"

Payout status updates are also delivered via webhooks: pass callbackUrl in the request body or specify it in your merchant settings. Polling the status by ID may be used as a fallback (for example, every 30 minutes).

Payout Webhooks


Recommendations

  • Always check your merchant balance before creating payouts
  • Fetch the list of banks first and pass the selected bank id as account.bankName
  • Mind the phone number format required by the method (some require it without +7 / 7)
  • Save the payout id from the response for status tracking
  • Use webhook notifications (callbackUrl) and verify the X-Signature header; polling the status by ID is a fallback
  • Handle all possible status values in your integration

See also

On this page