# Payment methods

The payment method is the `payment_method` field of [`POST /api/v1/payments`](sbp.md#create).
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 { #all }

| `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](sbp.md) |
| `card_transfer` | Card transfer | a card number: `2200123456789010` | a transfer by card number | [Card payments](card.md) |
| `cross_border_sbp` | Cross-border SBP | a phone number in another country | a transfer abroad by phone number | [Cross-border transfer](cross-border.md) |
| `cross_border_card` | Cross-border card | a card number in another country | a transfer abroad to a card | [Cross-border transfer](cross-border.md) |
| `nspk` | NSPK QR | an NSPK QR link (and/or a QR image) | scans the QR in the bank app | [NSPK QR](nspk.md) |
| `account_transfer` | Account transfer | a bank account number | a transfer by account number | [Account transfer](account.md) |
| `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](viet-qr.md) |
| `mobile_topup` | Mobile top-up | a phone number, the operator in `requisite_bank` | tops up the phone balance | [Mobile top-up](mobile-topup.md) |
| `card_matching` | Card transfer (matching) | a card number | a card transfer, then you upload the **receipt** | [Matching](matching.md) |
| `sbp_matching` | SBP (matching) | a phone number | an SBP transfer, then you upload the **receipt** | [Matching](matching.md) |

`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`.

!!! tip "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`](matching.md#upload). Without a receipt the payment is
    canceled on expiry. Details are on the [Matching](matching.md) page.

## Request fields by method { #request-fields }

All methods use one request — `POST /api/v1/payments`; the fields are described in
[SBP payments → Request fields](sbp.md#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](matching.md#upload) |

`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](sbp.md#response) and in
the [API reference](api-reference.md#createPayment).

## Countries and currencies { #countries }

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](kazakhstan.md) |

`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](cross-border.md).

## Payer bank and intrabank transfers { #bank }

- `bank_code` is the **payer's** bank, a name from the [bank directory](banks.md) 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](psb.md).

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 { #enabled }

[`GET /api/v1/project/limits`](sbp.md#contract-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.

```json
{
  "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 { #see-also }

- [Kazakhstan](kazakhstan.md) — card transfers in tenge.
- [Promsvyazbank](psb.md) — intrabank account transfers and other options for PSB.
- [Matching](matching.md) — `card_matching`, `sbp_matching` and the payment receipt.
- [Mobile top-up](mobile-topup.md) — `mobile_topup`.
- [Viet QR](viet-qr.md) — `viet_qr`, a pay-in from Vietnam by QR.
- [Banks](banks.md) — the name directory for `bank_code`.
- [Statuses and errors](statuses.md).