Request for QR Code
API URL = https://api.qrstart.eu
Method = POST

{
	"type": "bank",
	"apikey": "ApiKey",
	"amount": 1000,
	"currency": "CZK",
	"date": "20210101",
	"account": "123456789/6666",
	"note": "QR Platba",
	"variable": "20210001"
}

Response for QR Code

{
  "success": true,
  "url": "https://api.qrstart.eu/files/abcdefghijklmn.png"
}

Request for PDF upload
API URL = https://upload.qrstart.eu
Method = POST multipart/form-data

curl -F "apiKey=ApiKey" -F "file=@/var/www/your-site/file.pdf" https://upload.qrstart.eu

Response for PDF upload

{
  "success": true,
  "fingerprint": "315add676b4eeb3f606cfe8903448ed8c2ac468d"
}

Input parameters
  • type - type of code

    • possible values are bank, ean13, code128, text (default bank)

    • type bank:

      • amount - the amount (int or float)
        • required
      • currency - CZK or EUR
        • required for CZ/SK bank
        • for SEPA bank, the currency is automatically EUR
      • bank - CZ or SK or SEPA
        • CZ for czech QR code, SK for slovak QR code (it means CZ for czech bank app, SK for slovak bank app)
        • SEPA means EPC SEPA format
        • if empty, CZ for CZK currency and SK for EUR currency will be used
      • account - whole account number include bank code (123-456789123/4567)
        • for CZK currency
      • iban - IBAN
        • required for EUR currency (or for CZK, if you don't want to fill account)
      • swift - SWIFT code (BIC)
      • variable - variable symbol
      • constant - constant symbol
      • specific - specific symbol
      • note - note for the payer
      • date - due date (format YYYYMMDD)
      • size - size of generated png image in pixels (min. 50, max. 600, default 150)
        • for pdf the size is the width in points (min. 50, max. 600, default 150)
      • margin - image margin in pixels (default 2)
      • tag - internal note (visible in the dashboard, max. 50 chars)
      • reference - payer reference
        • for SK bank EUR currency (variable and constant and specific must be empty)
        • for SEPA bank
      • beneficiary - beneficiary name (max. 70 chars)
        • required for SEPA bank
        • recommended for SK bank (required by PAY by square specification 1.2.0), longer text is cut to 70 chars
      • remittance - remittance text
        • for SEPA bank only (reference must be empty)
      • instant 0-1 (int) (default 0)
        • use 1 for instant payment
        • for CZ bank only
    • type ean13:

      • code - EAN-13 code
        • required
      • size - 1-5 (int) (default 2)
        • for pdf the size is the width in points (min. 50, max. 600, default 150)
      • tag - internal note (visible in the dashboard, max. 50 chars)
    • type code128:

      • code - some text
        • required
      • size - 1-5 (int) (default 2)
        • for pdf the size is the width in points (min. 50, max. 600, default 150)
      • tag - internal note (visible in the dashboard, max. 50 chars)
    • type text:

      • code - some text
        • required
      • size - size of generated png image in pixels (min. 50, max. 600, default 150)
        • for pdf the size is the width in points (min. 50, max. 600, default 150)
      • margin - image margin in pixels (default 2)
      • tag - internal note (visible in the dashboard, max. 50 chars)
  • if you want put QR Code to you pdf file (max. size 2 MB), add following parameters

    • file - location of pdf file on server
    • top - position from top in points
    • bottom - position from bottom in points
      • in one request use top or bottom
    • left - position from left in points
    • right - position from right in points
      • in one request use left or right
    • page - the page on which the image is saved (default 1)
      • for last page use value -1
    • all sizes and positions in the PDF are in points (1 pt = 1/72 inch ≈ 0.35 mm, 10 mm ≈ 28 pt)
  • by default the QR code image is generated as PNG, but you can also generate it as JPG/WEBP

    • output - jpg or webp
      • jpg value creates an image in JPG format
      • webp value creates an image in WEBP format
You can also generate a QR code with a GET request
Request for QR Code
API URL = https://api.qrstart.eu
Method = GET

https://api.qrstart.eu/?type=bank&apikey=XXXXXX&amount=10&currency=EUR&iban=SK3112000000198742637541

The result, if the input is valid, is the URL of the qr code image. Otherwise, error text and http code 400.
If you put &image=1 as another parameter in the URL, the image itself will be sent instead of the URL of the image.
  • image - output as image with header Content-Type image/png (or image/jpeg or image/webp)
    • the only possible value is 1
Signed request – without exposing the API key
If you want to put the QR code directly into a public page or an e-mail (<img src="...">), do not put the apikey parameter into the URL. Send your KID (Key ID) and a signature of the parameters instead. The API key is not visible in the URL and nobody can change any parameter or create a new request.
API URL = https://api.qrstart.eu
Method = GET

https://api.qrstart.eu/?type=bank&amount=10&currency=EUR&iban=SK3112000000198742637541&image=1&kid=a1b2c3d4&signature=3f8a...e91c

  • kid - KID (Key ID) of your API key
    • you can find it next to your API key in the dashboard my.qrstart.eu
  • signature - HMAC-SHA256 signature (lowercase hex)
    • all request parameters except kid and signature are signed, sorted by name and encoded like the PHP function http_build_query() (space as +)
    • the signing key is your API key
  • if any parameter is changed, the API returns the error wrong signature
  • for e-mails and web pages (<img src="..."> or a clickable link) always use image=1, the URL then returns the image itself
    • without image=1 it returns only the text address of a temporary file that is deleted after one hour
    • image=1 must be signed together with the other parameters, it cannot be added to the URL afterwards
  • expires - optional, Unix timestamp until which the URL works
    • after that the API returns the error link expired, without it the URL never expires
    • it is part of the signature, so it cannot be changed
    • for e-mails leave enough time, the recipient may open the e-mail weeks later
  • with image=1 the image is generated and counted as a request on the first load, repeated loads of the same URL within 24 hours are served from cache and are not counted, after 24 hours the next load is counted again
  • without image=1 every load is counted
  • instead of the apikey parameter, the signature can also be used for POST requests and for upload.qrstart.eu
  • in the PHP SDK use the method signedUrl()

$params = [
	'type' => 'bank',
	'amount' => 10,
	'currency' => 'EUR',
	'iban' => 'SK3112000000198742637541',
	'image' => 1
];
ksort($params);
$params['signature'] = hash_hmac('sha256', http_build_query($params), 'ApiKey');
$params['kid'] = 'KID';
$url = 'https://api.qrstart.eu/?' . http_build_query($params);