Our services SBP payouts

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
  1. Creating a request
  2. Recipient verification
  3. Confirming the payout
  4. Final status
  5. Sample response with the final status
01

Creating a request

The merchant creates an SBP payout operation.

POST /out/sbp-transfer
{
  "client": {
    "firstName": "Ivan",
    "middleName": "Ivanovich",
    "lastName": "I"
  },
  "phone": "79000000000",
  "bic": "044525225",
  "amount": 100000,
  "extid": "string"
}
02

Recipient verification

VEPAY requests the PAM from the bank and compares the masked full name with the request data.

  1. MerchantCreates the requestPOST /out/sbp-transfer
  2. VEPAYRequests the PAMphone + bic → bank
  3. BankReturns the PAMmasked full name
  4. VEPAYVerifies the namerequest name ↔ PAM
Full-name verification flowchartShow 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.

  1. MerchantCreates the payout requestPOST /out/sbp-transfer: client, phone, bic, amount, extid
  2. VEPAYRegisters the operation
  3. VEPAY → BankRequests the PAMphone, bic
  4. Bank → VEPAYReturns the PAMmasked full name: Ivan Ivanovich I
  5. VEPAYVerifies the name and PAMIvan Ivanovich I ↔ Ivan Ivanovich I

In parallel with the check

Merchant → VEPAYRepeats POST /out/state

↻ While the check is running, the POST /out/state request repeats.

VEPAY → MerchantPOST /out/state response: MATCH or MISMATCHOn MATCH: readyToConfirm = true. On MISMATCH: readyToConfirm = false.
In parallel with the check

The merchant polls the status

Until the result is ready, the merchant repeats the POST /out/state request with the operation ID.

{
  "id": 12345
}
Verification result in the POST /out/state response
ResultVEPAY responseMerchant action
CHECKINGFull-name check in progress. readyToConfirm = false.Repeat POST /out/state.
MATCHNames match. VEPAY returns pam and readyToConfirm = true.Call POST /out/sbp-confirm.
MISMATCHNames do not match. readyToConfirm = false.Do not confirm the payout. Create a new request with correct data.
03

Confirming the payout

The merchant confirms the payout only after receiving the MATCH result.

POST /out/sbp-confirm
  1. MerchantReceived MATCH via /out/state
  2. Merchant → VEPAYSends the confirmation: POST /out/sbp-confirm
  3. VEPAY → Acquiring bankForwards the payout confirmation request
  4. Acquiring bankConfirms and executes the payout
{
  "id": 12345
}
04

Final status

After confirmation the merchant keeps polling POST /out/state.

POST /out/state
Payout execution statuses
sbpCodeMeaningMerchant action
RCVDPayout is being processed.Keep polling POST /out/state.
ACWPPayout completed.Record the successful payout.
RJCTPayout rejected.Record the rejection and handle the error.
05

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,
        ],
    ],
]