Account transfer¶
The payer sends money to the recipient's bank account by account number. The payment works
like an SBP payment: the same API method, statuses, callbacks and retry rules. What
differs is payment_method and the requisite.
| Card transfer | Account transfer | |
|---|---|---|
payment_method |
card_transfer |
account_transfer |
| What the payer gets | a card number in requisite |
an account number in requisite |
| How the payer pays | a transfer by card number | a transfer by account number in the bank app |
Create a payment¶
POST /api/v1/payments with payment_method: "account_transfer". The request is
signed the same way as for SBP.
{
"merchant_payment_id": "order-1004",
"amount": "30000.00",
"payment_method": "account_transfer",
"bank_code": "Промсвязьбанк",
"is_intrabank": true
}
All fields and rules are in SBP payments → Request fields; allowed methods, banks and amounts are in Contract limits. The method must be in your project's contract.
bank_code is the payer's bank, a name from the bank directory (not a BIC).
is_intrabank: true together with bank_code means a transfer within that bank: the recipient
account is in the same bank as the payer's (for example, Promsvyazbank → Promsvyazbank).
Without these fields the account is picked from all available banks. Transfers within
Promsvyazbank, the link into the bank app and what to show the payer are on the
Promsvyazbank page.
Response¶
Response 201 Created:
{
"id": "9c4e2f1a-6b7d-4c8e-a1f2-3b4c5d6e7f80",
"merchant_payment_id": "order-1004",
"status": "processing",
"amount": 30000,
"initial_amount": 30000,
"currency": "RUB",
"geo_code": "RU",
"payment_method": "account_transfer",
"bank_code": "Промсвязьбанк",
"is_intrabank": true,
"requisite": "40817810000000000001",
"requisite_bank": "Промсвязьбанк",
"holder_name": "Иван С.",
"created_at": "2026-10-13T09:30:00Z",
"updated_at": "2026-10-13T09:30:01Z"
}
requisite— the recipient's account number;holder_name— the recipient as the payer will see them in the bank;requisite_bank— the account's bank.
The other response fields and merchant_information are the same as for SBP:
Response and merchant_information.
What to show the payer¶
- Account number — the whole
requisite, with a "Copy" button. Do not shorten it, and if you group digits with spaces, let the payer copy the number without them. - Recipient and bank —
holder_nameandrequisite_bank: the payer checks the transfer against them. - Amount — exactly
amount, in one transfer. - Time limit — a countdown from
created_atfor your project's payment lifetime (15 minutes by default).
The account is for this payment only
Do not store the account number or show it again. Create a new payment for a new transfer.
Statuses and result¶
Statuses, callbacks and polling are the same as for SBP: Statuses and Getting the result.
Edge cases¶
Everything in SBP payments → Edge cases applies to account transfers as well. In addition:
- No accounts in the requested bank.
bank_codeandis_intrabanknarrow the choice; if nothing fits, the response is422 payment_not_routable. Retry without these fields. - The method is not in the contract —
422 payment_not_covered: ask your manager to enableaccount_transfer.