Skip to main content
The GetQR API is in beta and is available to selected workspaces. Details may change before the general release.
Reports summarize scans per QR code for a completed day, week or month. Export one right away, or schedule a report that is emailed on a regular basis.

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 a scope: 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
all, selected or single. See Scope.
string
required
daily, weekly or monthly. See Period.
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.
A report with the 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
all, selected or single. See Scope.
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.
Deleting a scheduled report can’t be undone.
string
required
ID of the scheduled report.

Common issues

With the selected or single scope, none of the qrIds matched a QR code with a short link in your workspace. Check the IDs.
One of the qrIds isn’t a QR code in your workspace, or it was deleted. Check the IDs with List QR codes.
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.
The id doesn’t match a scheduled report in your workspace. Take it from List scheduled reports.
Reports cover only the last completed period. Use Analytics for live numbers.

What’s next

Analytics

Scheduled reports in the app

Reading reports

Errors