SBP payouts
Creating a payout, verifying the recipient via PAM, confirming the operation and receiving the final status.
The merchant creates a request via POST /out/sbp-transfer. VEPAY requests the PAM from the bank and verifies the full name. Until the check completes, the merchant polls POST /out/state. Confirmation is allowed only on the MATCH result.
On this page
Creating a request
The merchant creates an SBP payout operation.
{
"client": {
"firstName": "Ivan",
"middleName": "Ivanovich",
"lastName": "I"
},
"phone": "79000000000",
"bic": "044525225",
"amount": 100000,
"extid": "string"
}Recipient verification
VEPAY requests the PAM from the bank and compares the masked full name with the request data.
- MerchantCreates the requestPOST /out/sbp-transfer
- VEPAYRequests the PAMphone + bic → bank
- BankReturns the PAMmasked full name
- VEPAYVerifies the namerequest name ↔ PAM
Full-name verification flowchartShow the flowchartHide the flowchart
PAM and full-name verification
VEPAY receives the masked full name from the bank, matches it against the request data and returns the result to the merchant via POST /out/state.
Flowchart: the merchant creates a request, VEPAY registers the operation, requests the PAM from the bank, receives the masked full name, compares it with the request name and returns MATCH or MISMATCH. In parallel the merchant repeats the status request until the check completes.
- MerchantCreates the payout requestPOST /out/sbp-transfer: client, phone, bic, amount, extid
- VEPAYRegisters the operation
- VEPAY → BankRequests the PAMphone, bic
- Bank → VEPAYReturns the PAMmasked full name: Ivan Ivanovich I
- VEPAYVerifies the name and PAMIvan Ivanovich I ↔ Ivan Ivanovich I
In parallel with the check
↻ While the check is running, the POST /out/state request repeats.
readyToConfirm = true. On MISMATCH: readyToConfirm = false.The merchant polls the status
Until the result is ready, the merchant repeats the POST /out/state request with the operation ID.
{
"id": 12345
}| Result | VEPAY response | Merchant action |
|---|---|---|
| CHECKING | Full-name check in progress. readyToConfirm = false. | Repeat POST /out/state. |
| MATCH | Names match. VEPAY returns pam and readyToConfirm = true. | Call POST /out/sbp-confirm. |
| MISMATCH | Names do not match. readyToConfirm = false. | Do not confirm the payout. Create a new request with correct data. |
Confirming the payout
The merchant confirms the payout only after receiving the MATCH result.
- MerchantReceived
MATCHvia/out/state - Merchant → VEPAYSends the confirmation:
POST /out/sbp-confirm - VEPAY → Acquiring bankForwards the payout confirmation request
- Acquiring bankConfirms and executes the payout
{
"id": 12345
}Final status
After confirmation the merchant keeps polling POST /out/state.
| sbpCode | Meaning | Merchant action |
|---|---|---|
| RCVD | Payout is being processed. | Keep polling POST /out/state. |
| ACWP | Payout completed. | Record the successful payout. |
| RJCT | Payout rejected. | Record the rejection and handle the error. |
Sample response with the final status
An example of the full VEPAY response to POST /out/state.
[
'body' => '{"id":"2321645546"}',
'return' => [
'status' => 1,
'serviceName' => 'Выплата через СБП',
'message' => 'Успех',
'rc' => null,
'channel' => 'TKB',
'cardNumber' => null,
'cardType' => null,
'issuingBank' => 'Сбербанк',
'paymentDate' => '29.09.2026 16:57:32',
'uuid' => '79ad3f64-f52b-42e2-a2fd-af906f5dc758',
'sbpOperId' => 'A62721357254590Y0B10040011851301',
'sbpCode' => '',
'rrn' => null,
'memberId' => '100000000111',
'inn' => null,
'card' => null,
'sndPhone' => '79000000000',
'pam' => 'Иван Иванович И',
'additionalFields' => [
'field1' => null,
'field2' => null,
'field3' => null,
],
],
]