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.
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— anhttpslink 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_linkor a code rendered from therequisitestring. 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
amountis in rubles and need not be shown to the payer. - Recipient —
requisite_bankandholder_name, so the payer can check them in the app. - Deadline — a countdown from
created_atfor 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.