# NSPK QR

The payer pays by an NSPK (SBP) QR code from their bank app: scans the code or opens the
payment link. The payment works like an [SBP payment](sbp.md): the same API method, statuses,
callbacks and retry rules. What differs is `payment_method` and what is issued instead of a
phone number.

| | SBP | NSPK QR |
| --- | --- | --- |
| `payment_method` | `sbp` | `nspk` |
| What the payer gets | a phone number in `requisite` | a `qrcode_link` and/or a `qrcode_image` |
| How the payer pays | "SBP transfer" by phone number | scans the QR code or opens the link in the bank app |

## Create a payment { #create }

`POST /api/v1/payments` with `payment_method: "nspk"`. The request is [signed](signing.md) the
same way as for SBP; the other fields are the same as for SBP.

```json
{
  "merchant_payment_id": "order-1003",
  "amount": "4800.00",
  "payment_method": "nspk"
}
```

All fields and rules are in [SBP payments → Request fields](sbp.md#request-fields); allowed
methods and amounts are in [Contract limits](sbp.md#contract-limits). The method must be in
your project's contract.

## Response { #response }

Instead of a phone number the response carries a QR code:

- `qrcode_link` — the payment link `https://qr.nspk.ru/…`;
- `qrcode_image` — the QR picture: `data:image/png;base64,…` or an `https` link to the image.

One of them or both are present. `requisite` holds the same link, or the string `qr_image`
when only the picture was issued. `qrcode_image` is in the create response and in
[`GET /api/v1/payments/{id}`](api-reference.md#getPayment), not in the payment list.

```json
{
  "id": "5b8e1d2a-3c4f-4a6b-9d7e-1f2a3b4c5d6e",
  "merchant_payment_id": "order-1003",
  "status": "processing",
  "amount": 4800,
  "initial_amount": 4800,
  "currency": "RUB",
  "geo_code": "RU",
  "payment_method": "nspk",
  "requisite": "https://qr.nspk.ru/AD10006M8KH9GJ81FR8Q1RMB1KAT3RDB",
  "qrcode_link": "https://qr.nspk.ru/AD10006M8KH9GJ81FR8Q1RMB1KAT3RDB",
  "requisite_bank": null,
  "holder_name": null,
  "created_at": "2026-10-13T09:30:00Z",
  "updated_at": "2026-10-13T09:30:01Z"
}
```

The other response fields and `merchant_information` are the same as for SBP:
[Response](sbp.md#response) and [`merchant_information`](sbp.md#merchant-information).

## What to show the payer { #payer-screen }

- **On a phone** — a "Pay" button with the `qrcode_link`: it opens the bank app with the payment
  already filled in.
- **On a computer** — the QR code: the `qrcode_image` picture or a code drawn from `qrcode_link`.
  The payer scans it with the phone camera.
- **Amount** — exactly `amount`; it is already in the QR code.
- **Time limit** — a countdown from `created_at` for your project's payment lifetime
  (15 minutes by default).

!!! warning "The QR code is for this payment only"
    Do not store or show the link or the picture again. Create a new payment for a new
    transfer.

## Statuses and result { #result }

Statuses, callbacks and polling are the same as for SBP:
[Statuses](sbp.md#statuses) and [Getting the result](sbp.md#result).

## Edge cases { #edge-cases }

Everything in [SBP payments → Edge cases](sbp.md#edge-cases) applies to NSPK QR as well.
In addition: if the response has neither `qrcode_link` nor `qrcode_image`, no requisites were
issued — the payment closes with an error, like SBP without a phone number.