PAY by square QR Code

PAY by square is a standardized QR code payment format developed by the Slovak Banking Association to simplify and unify the initiation of bank transfers via QR codes. The format encodes all required payment details into a compact, machine-readable structure that can be scanned by supported mobile banking applications to prefill a payment order accurately and securely.

PAY by square is widely used in Slovakia and the Czech Republic for invoicing, retail payments, donations, and e-commerce scenarios. It supports structured payment data such as beneficiary account (IBAN/BIC), amount, currency, payment references, messages, and optional metadata, reducing manual entry errors and accelerating payment workflows.

An example PAY by square QR Code with which 10 EUR will be donated to the Czech Red Cross:

An example of a PAY by square QR code that donates 10 EUR to the Czech Red Cross

Endpoints

The API can be called via POST method. The endpoint returns an PNG image.

POST/v1/pay-by-square-qr-code

curl -X POST https://api.apistax.io/v1/pay-by-square-qr-code \
    -o 'qr-code.png' \
    -H 'Authorization: Bearer API_KEY_HERE' \
    -H 'Content-Type: application/json' \
    -d '{
          "payments": [
            {
              "type": "PAYMENT_ORDER",
              "accounts": [
                {
                  "iban": "CZ14 2700 0000 0000 0033 3999"
                }
              ],
              "recipient": {
                "name": "Czech Red Cross Humanity Fund"
              }
            }
          ]
        }'

Parameters

The following parameters can be used as JSON fields in the POST request.

size: Integer = 300

The size of the QR code in pixels. The value must be between 100 and 2000 pixels.

invoice: String

The corresponding invoice number

payments: Array<Object>

The payments. At least one payment must be specified.

type: String

The payment type. Possible values are STANDING_ORDER, PAYMENT_ORDER and DIRECT_DEBIT.

accounts: Array<Object>

The recipient's bank accounts. At least one account must be specified.

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.

amount: Float

The amount to be paid with a maximum of two decimal places. The value is optional, but recommended.

currency: String

The currency according to ISO 4217 (USD, EUR etc.).

dueDate: Date

The due date in the format YYYY-MM-DD, for example 2020-01-31

recipient: Object

The recipient's details

name: String

The name of the recipient

street: String

The street of the recipient

city: String

The city of the recipient

standingOrder: Object

The standing order details are required if STANDING_ORDER was selected as the type.

day: Integer

The day on which the payment should occur.

month: Integer

The month on which the payment should occur. Must be specified if period is set to one of the following values: WEEKLY, BIWEEKLY, MONTHLY, BIMONTHLY

period: String

The periodicity of the payment. Possible values are: DAILY, WEEKLY, BIWEEKLY, MONTHLY, BIMONTHLY, QUARTERLY, SEMIANNUALLY, ANNUALLY

lastDate: Date

Defines the day of the last payment of the standing order. After this date, standing order is cancelled. The format is YYYY-MM-DD, for example 2020-01-31

directDebit: Object

The direct debit details are required if DIRECT_DEBIT was selected as the type.

scheme: String

The direct debit scheme. SEPA value, if direct debit is using SEPA direct debit scheme or OTHER when an ordinary direct debit is defined

type: String

Can be ONE_OFF for one time debit or RECURRENT for repeated debit until cancelled

variableSymbol: String

The direct debit reference. Can be combined with specificSymbol variable.

specificSymbol: String

The direct debit reference. Can be combined with variableSymbol variable.

reference: String

The direct debit reference

mandate: String

The direct debit reference. Must be combined with creditor and contract.

creditor: String

The direct debit reference. Must be combined with mandate and contract.

contract: String

The direct debit reference. Must be combined with mandate and creditor.

maxAmount: Integer

The maximum amount that can be pre-filled for the user.

validTill: Date

The date after which direct debit is cancelled in the format YYYY-MM-DD, for example 2020-01-31.

variableSymbol: String

The reference. Can be combined with variable constantSymbol and specificSymbol.

constantSymbol: String

The reference. Can be combined with variable specificSymbol and variableSymbol.

specificSymbol: String

The reference. Can be combined with variable constantSymbol and variableSymbol.

reference: String

The SEPA payment reference

note: String

The payment note. The recommended structure is as follows: Issuer - Subject - Term, for example Law Firm - legal services - 2020-01

If most parameters are utilized, an example curl request could look like this:

curl -X POST https://api.apistax.io/v1/pay-by-square-qr-code \
    -o 'qr-code.png' \
    -H 'Authorization: Bearer API_KEY_HERE' \
    -H 'Content-Type: application/json' \
    -d '{
          "size": 300,
          "invoice": "2020-009",
          "payments": [
            {
              "type": "PAYMENT_ORDER",
              "accounts": [
                {
                  "iban": "CZ14 2700 0000 0000 0033 3999",
                  "bic": "BACXCZPP"
                }
              ],
              "amount": 10,
              "currency": "EUR",
              "recipient": {
                "name": "Czech Red Cross Humanity Fund",
                "street": "Thunovská 18",
                "city": "Praha"
              },
              "reference": "Donation",
              "note": "Donates 10 EUR to the humanity fund."
            }
          ]
        }'

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.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.currencyMustBeValid Parameter currency must be valid and provided as an ISO 4217 currency code.
message.accountsMustNotBeEmpty Parameter accounts must not be empty.
message.paymentsMustNotBeEmpty Parameter payments must not be empty.
message.typeMustNotBeNull Parameter type must not be null.
message.nameMustNotBeBlank Parameter name of a recipient must not be blank.
message.recipientMustNotBeNull Parameter recipientmust not be null.
message.dayMustBeBetween1And31 Parameter day must be between 1 and 31.
message.monthMustBeBetween1And12 Parameter month must be between 1 and 12.
message.periodMustNotBeNull Parameter period must not be null.

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.

PAY by square QR Code costs
Create PAY by square QR codes for invoices, retail, and donations, enabling quick bank transfers through supported banking apps.
1
Credits spent
Credit cost per REST call
0,0040
EUR per call
Price depends on your subscription