Skip to content

Payment methods

The payment method is the payment_method field of POST /api/v1/payments. All methods share the same request, statuses, callbacks and retry rules — what differs is the requisite the payer gets and how they pay.

All methods

payment_method Name What the payer gets (requisite) How they pay Page
sbp SBP a phone number: +79991234567 an SBP transfer by phone number SBP payments
card_transfer Card transfer a card number: 2200123456789010 a transfer by card number Card payments
cross_border_sbp Cross-border SBP a phone number in another country a transfer abroad by phone number Cross-border transfer
cross_border_card Cross-border card a card number in another country a transfer abroad to a card Cross-border transfer
nspk NSPK QR an NSPK QR link (and/or a QR image) scans the QR in the bank app NSPK QR
account_transfer Account transfer a bank account number a transfer by account number Account transfer
viet_qr Viet QR a VietQR string (and a link to the QR image) scans the QR in a Vietnamese bank app, pays in dong Viet QR
mobile_topup Mobile top-up a phone number, the operator in requisite_bank tops up the phone balance Mobile top-up
card_matching Card transfer (matching) a card number a card transfer, then you upload the receipt Matching
sbp_matching SBP (matching) a phone number an SBP transfer, then you upload the receipt Matching

payment_method takes only the values from this table. The by_map method is gone: it was a duplicate of card_transfer — use card_transfer.

Matching

card_matching and sbp_matching are matching methods: the provider credits the payment only by the payer's receipt. After the transfer, upload the receipt file to POST /api/v1/payments/{id}/receipt. Without a receipt the payment is canceled on expiry. Details are on the Matching page.

Request fields by method

All methods use one request — POST /api/v1/payments; the fields are described in SBP payments → Request fields. Required for every method: merchant_payment_id, amount, payment_method. The rest are optional.

payment_method What matters in the request What else is in the response besides requisite
sbp, card_transfer bank_code — the payer's bank, if you need a requisite for it requisite_bank, holder_name
cross_border_sbp, cross_border_card a Russian payment (RU, RUB); bank_code is the payer's bank in geo_code; the recipient country is not sent cross_border_country — the requisite's country
nspk — qrcode_link (https://qr.nspk.ru/…) and/or qrcode_image
account_transfer bank_code and is_intrabank: true — a transfer within one bank requisite_bank, holder_name
viet_qr a Russian payment (RU, RUB), amount in rubles qrcode_link — the QR image, requisite_bank, holder_name
mobile_topup — requisite_bank — the mobile operator
card_matching, sbp_matching as for card_transfer / sbp as for card_transfer / sbp; after payment — the receipt

deeplink_url — a link into the banking app — may come with any method when available. qrcode_link, deeplink_url, cross_border_country and qrcode_image are present only when they have a value. All response fields are in SBP payments → Response and in the API reference.

Countries and currencies

The country and currency are the geo_code and currency fields. Without them the payment is created for Russia in roubles (RU, RUB).

Country geo_code currency Methods
Russia RU RUB all methods above
Kazakhstan KZ KZT card_transfer — card transfer in tenge

amount is in the payment currency: tenge for KZT. A cross-border transfer is a Russian payment (RU, RUB): the payer pays in roubles and the requisite is issued in another country, see Cross-border transfer.

Payer bank and intrabank transfers

  • bank_code is the payer's bank, a name from the bank directory in the geo_code country. Requisites are picked for that bank. Empty means any bank.
  • is_intrabank: true together with bank_code means a transfer within one bank: the recipient's requisite is in the same bank as the payer's. For example, Promsvyazbank → Promsvyazbank.

Both fields are optional filters: the narrower the filter, the more likely no matching requisites are available (422 payment_not_routable).

What your project has enabled

GET /api/v1/project/limits shows which methods, countries, banks and amounts your project's contract accepts. A payment with a method outside the contract gets 422 payment_not_covered — ask your manager to enable it.

{
  "limits": [
    {"geo_code": "RU", "payment_method": "account_transfer", "currency": "RUB",
     "bank_code": "Промсвязьбанк", "is_intrabank": true, "min_amount": 1000, "max_amount": 300000},
    {"geo_code": "KZ", "payment_method": "card_transfer", "currency": "KZT",
     "bank_code": null, "is_intrabank": false, "min_amount": 10000, "max_amount": 500000}
  ]
}

See also