Payouts from an escrow account by card number
To make payouts by card number, you must comply with the PCI DSS standard. Before a payout, identify the beneficiary.
How to enable a webhook to get notified on your escrow account top-ups >
Step 1. Create a payment session
Create a session using the session/multi/create/nominal method. You will receive the payment session identifier in response. You will need it in the subsequent steps.
Alternatively, you can use the
session/multi/init/payment/nominalmethod to create a session and a payout at the same time. In this case, specify all the payout parameters and skip the next step. This option is not recommended.
Request example
curl -X POST \
https://demo.bank131.ru/api/v1/session/multi/create/nominal \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"metadata": "good"
}'
Step 2. Send the payout
Send a session/multi/start/payment/nominal request, specifying the session identifier alongside the payout parameters.
Example of a payout by card number
curl -X POST \
https://demo.bank131.ru/api/v1/session/multi/start/payment/nominal \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3230",
"payment_details": {
"type": "internal_transfer",
"internal_transfer": {
"type": "transfer_from_nominal_account",
"transfer_from_nominal_account": {
"description": "Transfer under the offer agreement"
}
}
},
"payment_method": {
"type": "card",
"card": {
"type": "bank_card",
"bank_card": {
"number": "5536********8371"
}
}
},
"participant_details": {
"sender": {
"full_name": "Vector LLC",
"beneficiary_id": "1234567890"
},
"recipient": {
"full_name": "Ivanov Ivan Ivanovich"
}
},
"amount_details": {
"amount": 293400,
"currency": "RUB"
},
"customer": {
"reference": "123456789012"
}
}'
Step 3. Wait for a webhook showing that the Bank is ready to perform the payout
Bank 131 will send you a ready_to_confirm webhook. This means that the payout can be performed and the Bank is waiting for you to confirm or cancel.
The webhook body will contain the confirm_information object. Save it, as you will need this object to confirm or cancel the transaction.
Webhook example
curl -X POST \
https://partner.ru \
-H 'content-type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "ready_to_confirm",
"session": {
"id": "ps_3230",
"status": "in_progress",
"created_at": "2025-09-14T09:32:19.891392Z",
"updated_at": "2025-09-14T09:32:20.494410Z",
"payments": [{
"id": "po_7639847",
"status": "pending",
"created_at": "2025-09-14T09:32:20.100149Z",
"customer": {
"reference": "123456789012"
},
"payment_method": {
"type": "card",
"card": {
"brand": "mastercard",
"last4": "8371",
"country_iso3": "RUS"
}
},
"amount_details": {
"amount": 293400,
"currency": "RUB"
},
"participant_details": {
"sender": {
"full_name": "Vector LLC",
"beneficiary_id": "1234567890"
},
"recipient": {
"full_name": "Ivanov Ivan Ivanovich"
}
}
}],
"acquiring_payments": [{
"id": "pm_6933973",
"status": "pending",
"created_at": "2025-09-14T09:32:20.099952Z",
"customer": {
"reference": "123456789012"
},
"payment_details": {
"type": "internal_transfer",
"internal_transfer": {
"type": "transfer_from_nominal_account",
"transfer_from_nominal_account": {
"description": "Transfer under the offer agreement",
"card_mask": "553691******8371"
}
}
},
"amount_details": {
"amount": 293400,
"currency": "RUB"
},
"participant_details": {
"sender": {
"full_name": "Vector LLC",
"beneficiary_id": "1234567890"
},
"recipient": {
"full_name": "Ivanov Ivan Ivanovich"
}
}
}],
"next_action": "confirm"
},
"confirm_information": {
"transfer_details": {
"payment_method": {
"type": "card",
"card": {
"brand": "mastercard",
"last4": "8371",
"country_iso3": "RUS"
}
},
"customer": {
"account_number": "40702810700200000000",
"name": "Vector LLC",
"bank_name": "Bank 131",
"bik": "049205131",
"correspondent_account_number": "30101810822000000000"
},
"recipient": {
"account_number": "30233810000000000000",
"name": "Ivanov Ivan Ivanovich",
"bank_name": "Bank 131",
"bik": "049205123",
"correspondent_account_number": "30101810822000000974"
},
"purpose": "Transfer under the offer agreement",
"amount": {
"amount": 293400,
"currency": "RUB"
}
}
}
}'
Step 4. Confirm or cancel the payout
Check the payout details and confirm (session/confirm) or cancel (session/cancel) the payout passing the confirm_information object.
Confirming a payout
curl -X POST \
https://demo.bank131.ru/api/v1/session/confirm \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3230",
"confirm_information": {
"transfer_details": {
"payment_method": {
"type": "card",
"card": {
"brand": "mastercard",
"last4": "8371",
"country_iso3": "RUS"
}
},
"customer": {
"account_number": "40702810700200000000",
"name": "Vector LLC",
"bank_name": "Bank 131",
"bik": "049205131",
"correspondent_account_number": "30101810822000000000"
},
"recipient": {
"account_number": "30233810000000000000",
"name": "Ivanov Ivan Ivanovich",
"bank_name": "Bank 131",
"bik": "049205123",
"correspondent_account_number": "30101810822000000974"
},
"purpose": "Transfer under the offer agreement",
"amount": {
"amount": 293400,
"currency": "RUB"
}
}
}
}'
Canceling a payout
curl -X POST \
https://demo.bank131.ru/api/v1/session/cancel \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3230",
"confirm_information": {
"transfer_details": {
"payment_method": {
"type": "card",
"card": {
"brand": "mastercard",
"last4": "8371",
"country_iso3": "RUS"
}
},
"customer": {
"account_number": "40702810700200000000",
"name": "Vector LLC",
"bank_name": "Bank 131",
"bik": "049205131",
"correspondent_account_number": "30101810822000000000"
},
"recipient": {
"account_number": "30233810000000000000",
"name": "Ivanov Ivan Ivanovich",
"bank_name": "Bank 131",
"bik": "049205123",
"correspondent_account_number": "30101810822000000974"
},
"purpose": "Transfer under the offer agreement",
"amount": {
"amount": 293400,
"currency": "RUB"
}
}
}
}'
Step 5. Wait for a webhook with the results of the payout
Bank 131 will send you a payment_finished webhook. The result of the payout can be found in the status field of the payments/payout_list array.
The succeeded status means the payout has been successful. The failed status means the payout has not been completed because of an error.
Handling the webhook using SDK
use Bank131\SDK\Client;
use Bank131\SDK\Config;
use Bank131\SDK\Services\WebHook\Hook\WebHookTypeEnum;
$config = new Config(
'https://demo.bank131.ru',
'your_project_name',
file_get_contents('/path/to/your/private_key.pem'),
file_get_contents('/path/to/bank131/public_key.pem')
);
$client = new Client($config);
$hook = $client->handleWebHook('sign from headers', 'request body');
if ($hook->getType() === WebHookTypeEnum::PAYMENT_FINISHED) {
$session = $hook->getSession();
//do your logic here
}
Sequence diagram

More about the payout statuses >