The GetQR API is in beta and is available to selected workspaces. Details may change before the general release.
For a ready-made summary per QR code, see Reports.
What the numbers mean
- Scans. Every count is in the
clicksfield. A scan is counted each time someone opens the QR code’s short link. - Unique scans. With
unique=true, each visitor is counted once in the date range. - Scope. Numbers come from the QR code’s short link. A QR code without a short link has no scans to count.
- History. Analytics can’t be reset through the API. Deleting a QR code doesn’t purge its historical scan data.
Headers
string
required
Bearer followed by your API key. See Authentication.Query parameters
Both endpoints take these parameters. All of them are optional.string
default:"count"
Breakdown dimension.
count returns the total. See Breakdowns for every value and its response shape.string
default:"30d"
Preset date range:
24h, 7d, 30d, 90d, 1y, mtd, qtd, ytd or all. See Date ranges. Ignored when you send start.string
Start of a custom range, ISO 8601, for example
2026-08-01 or 2026-08-01T00:00:00Z. Takes precedence over interval. Must be earlier than end.string
End of a custom range, ISO 8601. Defaults to the end of today. Used together with
start or interval=all, and ignored with the other intervals.string
default:"UTC"
IANA timezone used to align
timeseries buckets, for example America/New_York. An unknown timezone returns 422.boolean
default:"false"
true counts unique scans instead of total scans.Date ranges
For a custom range, send
start and optionally end. Ranges of up to 2 days use hourly buckets, ranges over 180 days use monthly buckets, and everything in between uses daily buckets.
Dimension filters
Narrow the results to scans that match a filter. Different filters are combined with AND. Where a filter takes several values, separate them with commas: the values are combined with OR.
An unknown country or continent code returns
422. Device, browser and OS names are matched with a capital first letter, so mobile works like Mobile.
For example, scans from the US or Canada on mobile devices: ?country=US,CA&device=Mobile.
Breakdowns
count returns an object. Every other value returns an array, sorted by clicks from highest to lowest (timeseries is sorted by time).
An unknown
groupBy returns 422 with the list of valid values.
Response when groupBy=count:
groupBy=countries:
Get analytics for a QR code
GET /api/v1/qrs/{qrId}/analytics
Returns scan statistics for one QR code, scoped to its short link. Takes the query parameters and dimension filters above.
Get workspace analytics
GET /api/v1/analytics
Returns scan statistics across all QR codes in your workspace. Takes the query parameters and dimension filters above, plus these scoping parameters.
string
With
key, limits the results to the short link with this domain, for example getqr.sh. The domain must belong to your workspace.string
Short link slug, for example
x7Kd2p1. Use it together with domain. Both are in the QR code object.string
Comma-separated QR code types to include:
website, pdf, image, video, whatsapp, social, wifi, app, feedback, vcard, sms, payment, location, multilink, email or event. See QR types.Common issues
400 "QR has no associated link."
400 "QR has no associated link."
The QR code has no short link, so there are no scans to count.
404 when filtering by domain and key
404 when filtering by domain and key
No short link with that domain and slug exists in your workspace. Copy
domain and key from the QR code object.422 on groupBy, interval or a filter
422 on groupBy, interval or a filter
The value isn’t supported. The error message names the parameter and lists the valid values.
Numbers don't match the dashboard
Numbers don't match the dashboard
Check that you use the same date range and timezone, and whether you count unique scans (
unique=true) or total scans.