HCT QR Code
The HCT QR Code is a standardized payment QR format defined for Hungary’s instant payment system, enabling near-real-time bank transfers via QR scanning. It is part of the domestic instant payment ecosystem developed under the auspices of the Magyar Nemzeti Bank (MNB) and associated clearing infrastructure and has become known locally as the Instant Payment Code used for retail and online checkout flows.
In Hungary’s instant payment context, scanning a HCT QR Code with a compatible mobile banking app automatically populates a payment order that is executed within seconds through the Azonnali Fizetési Rendszer (Instant Payment System). This QR-based mechanism is supported across banks and facilitates instant transfers (typically within ~5 seconds) without transaction fees for the payer.
An example HCT QR Code with which 4000 HUF will be donated to the Hungarian Red Cross:

Endpoints
The API can be called via POST method. The endpoint returns an PNG image.
POST/v1/hct-qr-code
curl -X POST https://api.apistax.io/v1/hct-qr-code \
-o 'qr-code.png' \
-H 'Authorization: Bearer API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"iban": "HU70 1040 5004 0002 6542 0000 0005",
"bic": "OKHBHUHB",
"validTill": "2030-12-31T23:59:59"
}'
Parameters
The following parameters can be used as JSON fields in the POST request.
iban: String
The international bank account number of the recipient. Any spaces between the blocks are removed.
bic: String
The bank identifier code of the recipient's bank. Often known as SWIFT code.
recipient: String
The recipients name. The name can be maximum 70 characters long.
currency: String = HUF
The currency according to ISO 4217 (USD, EUR etc.).
amount: Integer
The amount to be paid with no decimal places. The value is optional, but recommended. If the amount is not specified, the payer must enter it in the banking app itself. The amount must be between 0 and 1,000,000,000,00.
size: Integer = 300
The size of the QR code in pixels. The value must be between 100 and 2000 pixels.
validTill: Datetime
The date time until which the code is valid in the format YYYY-MM-DDThh:mm:ss, for example 2020-01-31T10:20:00
remittanceInformation: String
The remittance information, which may be a maximum of 70 characters long.
shopId: String
The identifier may be a maximum of 35 characters long. In case of physical retail purchases to identify the point of sale.
merchantId: String
The identifier may be a maximum of 35 characters long. In case of physical retail purchases to identify the corresponding device like cash register or POS terminal.
invoiceId: String
The identifier of the bill or invoice to be paid, which may be a maximum of 35 characters long.
customerId: String
The potential customer identifier of a service provider for bill payments, which may be a maximum of 35 characters long.
internalId: String
The internal identifier, which may be a maximum of 35 characters long.
loyaltyId: String
The potential identifier for linked specific discounts or loyalty card numbers, which may be a maximum of 35 characters long.
navVerificationCode: String
The National Tax and Customs Administration (NAV) verification code in the case of retail purchases, which may be a maximum of 35 characters long.
If most parameters are utilized, an example curl request could look like this:
curl -X POST https://api.apistax.io/v1/hct-qr-code \
-o 'qr-code.png' \
-H 'Authorization: Bearer API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"iban": "HU70 1040 5004 0002 6542 0000 0005",
"bic": "OKHBHUHB",
"amount": 4000,
"size": 300,
"currency": "HUF",
"recipient": "Hungarian Red Cross",
"validTill": "2030-12-31T23:59:59",
"remittanceInformation": "Donation"
}'
Possible errors
| Identifier | Description |
|---|---|
message.ibanMustBeValid |
Parameter iban must be a valid IBAN according to ISO 13616-1:2020. |
message.bicMustBeValid |
Parameter bic must be a valid BIC according to ISO 9362. |
message.bicMustNotBeBlank |
Parameter bic mut not be blank. |
message.ibanMustNotBeBlank |
Parameter iban mut not be blank. |
message.sizeMustMotBeBiggerThan2000Pixels |
Parameter size must be between 100 and 2000 pixels. |
message.sizeMustNotBeSmallerThan100Pixels |
Parameter size must be between 100 and 2000 pixels. |
message.amountIsTooHigh |
Parameter amount must be between 0 and 1 000 000 000 000. |
message.amountIsTooLow |
Parameter amount must be between 0 and 1 000 000 000 000. |
message.recipientMustNotBeBlank |
Parameter recipient mut not be blank. |
message.recipientMustNotBeLongerThan70Characters |
Parameter recipient must be maximum 70 characters long. |
message.currencyMustBeValid |
Parameter currency must be valid and provided as an ISO 4217 currency code. |
message.validTillMustNotBeNull |
Parameter validTill must not be null. |
message.remittanceInformationMustNotBeLongerThan70Characters |
Parameter remittanceInformation must be maximum 70 characters long. |
message.shopIdMustNotBeLongerThan35Characters |
Parameter shopId must be maximum 35 characters long. |
message.merchantIdMustNotBeLongerThan35Characters |
Parameter merchantId must be maximum 35 characters long. |
message.invoiceIdMustNotBeLongerThan35Characters |
Parameter invoiceId must be maximum 35 characters long. |
message.customerIdMustNotBeLongerThan35Characters |
Parameter customerId must be maximum 35 characters long. |
message.internalIdMustNotBeLongerThan35Characters |
Parameter internalId must be maximum 35 characters long. |
message.loyaltyIdMustNotBeLongerThan35Characters |
Parameter loyaltyId must be maximum 35 characters long. |
message.navVerificationCodeMustNotBeLongerThan35Characters |
Parameter navVerificationCode must be maximum 35 characters long. |
It should be noted that there are a number of common error messages, which can be found in the "Possible errors" section of the general documentation.