Skip to main content
The GetQR API is in beta and is available to selected workspaces. Details may change before the general release.
A bulk creation turns a list of names and URLs into website QR codes with one shared design. It runs in the background: start it, poll its progress, then download the ZIP archive.

How it works

1

Start the bulk creation

Send your rows with Create from JSON or Create from a CSV file. The API answers 202 with the bulk creation and its id.
2

Poll its progress

Call Get a bulk creation every few seconds until status is completed or failed.
3

Download the archive

When status is completed, call Download the archive to get a ZIP of the QR code images.
  • Limit. Up to 100 rows per bulk creation.
  • One at a time. Only one bulk creation runs per workspace. Starting another while one is running returns the running one.
  • Idempotency. Every request needs an idempotencyKey. Repeating a request with the same key and the same body returns the bulk creation already started. The same key with a different body returns 422.
  • Rows. Each row needs a name and a url. See Rows.
  • Plan. Bulk creation isn’t available on the Single QR plan: the request returns 403 exceeded_limit.

Rows

  • Name. Becomes the QR code’s title. Trimmed and cut to 40 characters. Repeated names (ignoring case) get a number: Menu, Menu 2, Menu 3.
  • URL. Becomes the destination. It must be an http or https address with a real domain, such as example.com/menu, and contain no spaces. A URL without a scheme gets https://.
  • Empty rows. Rows with neither a name nor a URL are skipped. A row with only one of them is rejected.
Every QR code is a website QR code on a short link. See QR types.

Headers

string
required
Bearer followed by your API key. See Authentication.
string
application/json for Create from JSON, multipart/form-data for Create from a CSV file.

The bulk creation object

string
ID of the bulk creation, for example cm2k7x9qb0003ax8eb4f6gh2t.
string
queued, processing, packaging or completed. A failed or aborted bulk creation goes through rollingBack to failed.
string
Name of the source file.
integer
Number of rows.
integer
QR codes created so far.
integer
QR code images rendered so far.
integer
Overall progress, 0 to 100. Creating takes up to 40, rendering up to 90, packaging is 95, and completed is 100.
boolean
true when a running bulk creation hasn’t made progress for 2 minutes. Keep polling: Get a bulk creation restarts a stalled bulk creation.
object | null
When status is failed: code and message. An aborted bulk creation has the code cancelled_by_user. A failed bulk creation is rolled back, so none of its QR codes are kept.
string | null
Path of Download the archive, once status is completed.
string
Start date, ISO 8601.
string
Last update date, ISO 8601.
string | null
Completion date, ISO 8601.
string | null
Failure date, ISO 8601.

Get the current bulk creation

GET /api/v1/bulk-qr-creations Returns the bulk creation still running in your workspace. When none is running, it returns the latest finished one (completed or failed) until it’s dismissed: downloading its archive or dismissing it in the dashboard does that. Otherwise it returns null. Use it to resume tracking after a restart.

Create from JSON

POST /api/v1/bulk-qr-creations Starts a bulk creation from a list of rows. Answers 202 Accepted. The bulk creation runs in the background.
object[]
required
QR codes to create, up to 100. Each row is { "name": "...", "url": "..." } and takes no other fields. See Rows.
object
required
Design applied to every QR code: styles, frameOptions and logoOptions, all optional. Send {} for the default design. Other fields are rejected. See Customization.
string
required
Name shown in the dashboard and used for the archive, 1 to 255 characters.
string
required
Your own key for this bulk creation, 8 to 100 characters.

Create from a CSV file

POST /api/v1/bulk-qr-creations/csv Same as Create from JSON, but takes the rows as a CSV file sent as multipart/form-data. Answers 202 Accepted. The file must be a .csv of at most 1,000,000 bytes. Its header row must be exactly name,url, followed by up to 100 data rows. See CSV format.
file
required
The CSV file.
string
required
The design object, serialized as JSON, for example {"styles":{"dotsOptions":{"type":"rounded"}}}. Send {} for the default design.
string
required
Your own key for this bulk creation, 8 to 100 characters.
string
Name shown in the dashboard and used for the archive, up to 255 characters. Defaults to the uploaded file’s name.

Get a bulk creation

GET /api/v1/bulk-qr-creations/{id} Returns the status and progress of a bulk creation. Poll it while status is queued, processing or packaging. downloadUrl appears once the archive is ready.
string
required
ID of the bulk creation. Take it from the create or current-bulk-creation response.

Abort a bulk creation

DELETE /api/v1/bulk-qr-creations/{id} Stops a running bulk creation and deletes the QR codes it already created. The rollback runs during the request, so the response normally has status failed and error.code cancelled_by_user. Aborting a bulk creation that has already failed returns it unchanged.
A bulk creation that has completed can’t be aborted: the request returns 400. Delete its QR codes one by one with QR codes instead.
string
required
ID of the bulk creation.

Download the archive

GET /api/v1/bulk-qr-creations/{id}/download Returns a ZIP archive with one 1024 px JPEG per QR code, named after its row: 001-Menu.jpg, 002-Wine list.jpg and so on. The archive is named after sourceFilename. Available once status is completed. Downloading dismisses the bulk creation, so Get the current bulk creation stops returning it.
string
required
ID of the bulk creation.

Common issues

The message names the row. Each URL must be an http or https address with a real domain, such as example.com/menu. Fix the row and send the request again.
The first row of the CSV must be name,url, in that order and in lowercase, with no other columns.
Keys can’t be reused for a different batch. Send a new idempotencyKey.
The bulk creation hasn’t completed yet. Keep polling until status is completed.
The bulk creation has already completed, so it can’t be rolled back.
Your workspace is on the Single QR plan, which doesn’t include bulk creation. Upgrade the plan.
Another bulk creation is still running in your workspace, or you reused an idempotencyKey. Wait for it to finish, or use a new key.

What’s next

Customization

QR codes

Bulk create in the app

CSV format