Skip to content

Viet QR

The payer in Vietnam pays by a VietQR code from their Vietnamese bank app: scans the code, and the app opens a transfer with the amount and account already filled in. The payment works like an SBP payment: the same API method, statuses, callbacks and retry rules. What differs is payment_method and what is issued instead of a phone number.

SBP Viet QR
payment_method sbp viet_qr
Payment country and currency RU, RUB RU, RUB
What the payer gets a phone number in requisite a QR code: the VietQR string in requisite and an image at qrcode_link
How the payer pays "SBP transfer" by phone number scans the QR in a Vietnamese bank app and pays in dong

Create a payment

POST /api/v1/payments with payment_method: "viet_qr". amount is in rubles, as in other Russian payments; geo_code and currency may be omitted (default RU, RUB). The request is signed the same way as for SBP.

{
  "merchant_payment_id": "order-1004",
  "amount": "5919.00",
  "payment_method": "viet_qr"
}

All fields and rules are in SBP payment → Request fields, allowed methods and amounts — in Contract limits. The method must be in your project's contract.

Response

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

  • requisite — the VietQR string (000201…): you can render the QR code from it yourself. The amount in dong is already inside the string;
  • qrcode_link — an https link to a ready image of this QR code;
  • requisite_bank — the recipient's Vietnamese bank, holder_name — the recipient.
{
  "id": "7c1f2e3d-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "merchant_payment_id": "order-1004",
  "status": "processing",
  "amount": 5919,
  "initial_amount": 5919,
  "currency": "RUB",
  "geo_code": "RU",
  "payment_method": "viet_qr",
  "requisite": "00020101021238600010A000000727013000069704360116QRS1072662728020208QRIBFTTA5303704540718467285802VN6304F15D",
  "qrcode_link": "https://api.qrserver.com/v1/create-qr-code/?size=450x450&margin=15&format=svg&data=00020101021238600010A000000727013000069704360116QRS1072662728020208QRIBFTTA5303704540718467285802VN6304F15D",
  "requisite_bank": "Vietcombank",
  "holder_name": "NGUYEN VAN A",
  "created_at": "2026-10-26T10:28:37Z",
  "updated_at": "2026-10-26T10:28:38Z"
}

Other response fields and the merchant_information settlement are as for SBP: Response and merchant_information settlement.

What to show the payer

  • QR code — the image at qrcode_link or a code rendered from the requisite string. The payer scans it with their bank app.
  • Amount — the payer pays in dong: the amount is already in the QR code, and the bank app shows it. The payment's amount is in rubles and need not be shown to the payer.
  • Recipient — requisite_bank and holder_name, so the payer can check them in the app.
  • Deadline — a countdown from created_at for your project's payment lifetime.

The QR code is for this payment only

Do not store or show the QR again. Create a new payment for a new pay-in.

Statuses and result

Statuses, callbacks and polling are the same as for SBP: Statuses and How to get the result.

Edge cases

Everything in SBP payment → Edge cases applies to Viet QR as well. In particular: if the response has neither a VietQR string in requisite nor qrcode_link, no requisites were issued — the payment closes with an error, as an SBP payment without a phone number.