Card payments¶
The payer transfers money to the recipient's card number from their bank app.
The payment works like an SBP payment: the same API method, statuses,
callbacks and retry rules. What differs is payment_method and what requisite holds.
| SBP | Card | |
|---|---|---|
payment_method |
sbp |
card_transfer |
requisite |
phone number: +79991234567 |
card number: 2200123456789010 |
| How the payer pays | "SBP transfer" by phone number | "Card transfer" by card number |
Create a payment¶
POST /api/v1/payments with payment_method: "card_transfer". The request is
signed the same way as for SBP.
{
"merchant_payment_id": "order-1002",
"amount": "12500.00",
"payment_method": "card_transfer",
"bank_code": "sber"
}
All fields and rules are in SBP payments → Request fields.
bank_code is the payer's bank, a code from our bank catalog (not a BIC): requisites are
picked for it. is_intrabank: true together with bank_code means a transfer within that
bank: the recipient card is at the same bank as the payer's. Both are rare filters: without
them, requisites come from any bank.
Response 201 Created:
{
"id": "7a2d4c1e-9b3f-4e8a-b1c2-3d4e5f6a7b8c",
"merchant_payment_id": "order-1002",
"flow": "runtime_live",
"status": "processing",
"amount": 12500,
"initial_amount": 12500,
"currency": "RUB",
"geo_code": "RU",
"payment_method": "card_transfer",
"bank_code": "sber",
"is_intrabank": false,
"callback_url": null,
"is_test": false,
"merchant_information": {
"course": 100.00,
"rate": 11.00,
"amount_usdt": "125.0000",
"amount_rate": "11125.0000",
"amount_usdt_rate": "111.2500"
},
"requisite": "2200123456789010",
"holder_name": "Мария П.",
"created_at": "2026-09-29T09:30:00Z",
"updated_at": "2026-09-29T09:30:01Z"
}
Response fields and merchant_information are the same as for SBP:
Response and Settlement.
What to show the payer¶
- Card number from
requisite— in groups of four (2200 1234 5678 9010), with a "Copy" button that copies the number without spaces. - Recipient from
holder_name— the bank shows this name before the transfer. - Amount — exactly
amount. Warn that bank fees are paid on top: what arrives on the card is what gets credited. - Deadline — a countdown from
created_atover your project's payment lifetime (15 minutes by default).
The card number is for this payment only
Do not store the card 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. Once a card is issued,
the payment ends only as completed or canceled, each with a callback; error means no
card was issued and shows in the create response.
Edge cases¶
Everything in SBP payments → Edge cases applies to cards too. Card-specific:
- Transfer with a fee. If the payer's bank deducts a fee from the transfer, less
arrives on the card. The actual amount may be confirmed on a payment re-check; the
callback then says
completedwith a newamount. - No cards of the requested bank. With
bank_codethe choice is narrower; if nothing fits, the payment closes withprovider_no_requisitesor the answer is422 payment_not_routable. Try withoutbank_code.