Get scan analytics
Scan analytics of a code for a range of days.
Totals, a daily series and the top countries, cities, devices, systems, browsers and referrers. The range is clamped to how long the plan keeps analytics. With limit above 0 the response also lists individual scans, newest first: pass the response's nextBefore as before for the next page.
oauth2 codes:readAuthorizationBearer <token>An OAuth 2.0 access token, sent as Authorization: Bearer <token>. Register an app in Settings → Developers, send the user through authorization (PKCE S256), then exchange the code for a token. Access tokens last 1 hour; refresh tokens 30 days. Step by step.
Scope: codes:read
id*stringThe code's id
1 <= length <= 64range?stringDays to cover; defaults to 30 days, or the longest range the plan keeps
"7d""30d""90d""365d""1095d"limit?integerIndividual scans to include (0–500; 0 = totals only)
0 <= value <= 5000before?stringOnly scans before this time: the previous nextBefore
date-timeAnalytics for the range
application/json- response
data*curl -X GET 'https://api.qrdx.dev/v1/codes/cm5code0spring0menu00001/scans'{ "data": { "codeId": "cm5code0spring0menu00001", "range": "7d", "retentionDays": 30, "from": "2026-01-06T00:00:00.000Z", "days": 7, "total": 42, "unique": 37, "series": [ { "date": "2026-01-06", "count": 3 }, { "date": "2026-01-07", "count": 9 } ], "countries": [ { "value": "DE", "count": 30 } ], "cities": [ { "city": "Berlin", "country": "DE", "count": 21 } ], "devices": [ { "value": "mobile", "count": 39 } ], "os": [ { "value": "iOS", "count": 25 } ], "browsers": [ { "value": "Safari", "count": 24 } ], "referrers": [ { "value": null, "count": 42 } ] }}Last updated on