The GetQR API is in beta and is available to selected workspaces. Details may change before the general release.
Headers
string
required
Bearer followed by your API key. See Authentication.string
application/json. Required on POST and PATCH requests.Scope
One-off and scheduled reports both take ascope:
A report lists at most 50 QR codes. With
all, these are the most recently created active QR codes; paused codes are left out. With selected and single, paused codes are included. QR codes without a short link have no scans and are skipped.
Period
The period is always the last completed one, so a report never includes today’s partial data. Its boundaries are midnight in the report’s timezone.Export a report
POST /api/v1/reports
Builds a report for the last completed period and returns it in the response.
string
required
json returns the report in the response body. csv and pdf return a file download.string[]
QR codes to cover. Required for
selected (one or more IDs) and single (exactly one ID). Omit it for all.string
default:"UTC"
IANA timezone the period boundaries are aligned to, for example
America/New_York. An unknown timezone returns 422.string
default:"en"
Language of the PDF, for example
en or de. An unsupported value falls back to English. Ignored by csv and json.string
Title shown on the PDF, up to 40 characters. Ignored by
csv and json.JSON response
string
First day of the period,
YYYY-MM-DD.string
First day after the period,
YYYY-MM-DD. The period ends at midnight at the start of this day.object[]
One entry per QR code.
CSV and PDF responses
The body is the file.Content-Disposition names it after the period, for example report-2026-08-10_2026-08-17.csv. The CSV has one row per QR code with the columns QR ID, QR name, QR type, Total scans, Unique scans, Top geography, Top device, Top OS and Top browser.
The scheduled report object
A scheduled report is emailed to the account that created it, at midnight in its timezone.string
ID of the scheduled report.
string | null
Label shown in the email subject and in the dashboard.
string
daily, weekly or monthly.string
all, selected or single.string[] | null
QR codes the report covers with the
selected and single scopes. null when no IDs were sent.null
Always
null. Reserved.boolean
Whether a PDF is attached to the email.
string
active or paused.string
IANA timezone the send time and the period are aligned to.
string
Language of the email and the PDF.
string
When the next email is due, ISO 8601: the next midnight (
daily), the next Monday (weekly) or the 1st of the next month (monthly), in the report’s timezone.string | null
When the last email was sent, ISO 8601.
string
Creation date, ISO 8601.
string
Last update date, ISO 8601.
List scheduled reports
GET /api/v1/reports/schedules
Returns the scheduled reports of your workspace, including those created by other members, newest first. The list is paginated: see Pagination.
integer
default:"1"
Page to return, 1 or higher.
integer
default:"100"
Results per page, 1 to 100.
Schedule a report
POST /api/v1/reports/schedules
Creates a report that is emailed on a regular basis. nextRunAt is calculated from the frequency and the timezone.
A QR code can belong to only one scheduled report per frequency. An overlapping schedule returns
409 conflict.all scope overlaps every other report of the same frequency. Paused reports still count.
string
required
How often the report is sent:
daily, weekly or monthly. Also sets the period it covers. See Period.string
required
IANA timezone the send time and the period are aligned to, for example
America/New_York. An unknown timezone returns 422.string
required
Language of the email and the PDF, for example
en or de. An unsupported value falls back to English. PDFs in zh, ja, ko and ar are rendered in English.string[]
QR codes to cover. Required for
selected (one or more IDs) and single (exactly one ID). Every ID must be a QR code in your workspace, or the request returns 404.string
Label shown in the email subject and in the dashboard, up to 40 characters.
boolean
default:"false"
Attach a PDF version of the report to the email.
Update a scheduled report
PATCH /api/v1/reports/schedules/{id}
Changes a scheduled report, or pauses and resumes it. Send only the fields you want to change, at least one. Changing the frequency or the timezone, or resuming a paused report, recalculates nextRunAt. The one-report-per-frequency rule still applies, so an overlapping change returns 409.
string
required
ID of the scheduled report. Take it from the list or create response.
string
paused stops the emails without deleting the schedule. active resumes them.string
Label, up to 40 characters.
string
daily, weekly or monthly.string
all, selected or single.string[]
QR codes to cover. Every ID must be a QR code in your workspace.
boolean
Attach a PDF to the email.
string
IANA timezone.
string
Language of the email and the PDF.
Delete a scheduled report
DELETE /api/v1/reports/schedules/{id}
Deletes the schedule and stops all further emails.
string
required
ID of the scheduled report.
Common issues
404 when exporting a report
404 when exporting a report
With the
selected or single scope, none of the qrIds matched a QR code with a short link in your workspace. Check the IDs.404 "QR not found." when scheduling a report
404 "QR not found." when scheduling a report
One of the
qrIds isn’t a QR code in your workspace, or it was deleted. Check the IDs with List QR codes.409 when scheduling a report
409 when scheduling a report
One of the QR codes already belongs to a scheduled report with the same frequency, or a report of that frequency uses the
all scope. Edit or delete that report, or choose a different frequency.404 "Scheduled report not found."
404 "Scheduled report not found."
The
id doesn’t match a scheduled report in your workspace. Take it from List scheduled reports.The report is missing today's scans
The report is missing today's scans
Reports cover only the last completed period. Use Analytics for live numbers.