Programmatic access to QR codes, scan analytics, and workspace metadata. Authenticate with an API key from the API Keys page. Machine-readable OpenAPI 3.1 spec is available at /openapi.json.
All requests need a Bearer token in the Authorization header. Generate keys from the API Keys page; the raw key is shown once at creation, then only the prefix is visible. Keys are scoped to a single workspace.
Authorization: Bearer qrf_live_...
Per-workspace per-minute limits (shared across all of a workspace's keys). Every response carries the headers below; exceeding the limit returns HTTP 429 with a Retry-After header (seconds until the window resets).
X-RateLimit-Plan: pro X-RateLimit-Limit: 300 X-RateLimit-Remaining: 297 X-RateLimit-Reset: 1718724000 # When exceeded: HTTP/1.1 429 Too Many Requests Retry-After: 42
https://www.qra.cc/api/v1/qrPaginated list of QR codes in your workspace.
| Name | In | Type | Description |
|---|---|---|---|
page | query | integer | · default 1 |
limit | query | integer | · default 20 |
curl -X GET "https://www.qra.cc/api/v1/qr?page=1&limit=20" \
-H "Authorization: Bearer qrf_live_..."{
"data": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"slug": "abc123xyz",
"name": "Riyadh Mall — counter sticker",
"type": "url",
"destination": "https://example.com/menu",
"status": "active",
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}
],
"pagination": {
"page": 0,
"limit": 0,
"total": 0,
"pages": 0
}
}/qrCreate a new dynamic QR code — subject to your plan’s code-count limit.
| Field | Type | Description |
|---|---|---|
name* | string | · e.g. Q4 catalogue insert |
type | string | |
destination | string | · e.g. https://example.com/catalogue |
curl -X POST "https://www.qra.cc/api/v1/qr" \
-H "Authorization: Bearer qrf_live_..." \
-H "Content-Type: application/json" \
-d '{"name":"Q4 catalogue insert","type":"url","destination":"https://example.com/catalogue"}'{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"slug": "abc123xyz",
"name": "Riyadh Mall — counter sticker",
"type": "url",
"destination": "https://example.com/menu",
"status": "active",
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}/qr/{id}Fetch a single QR code by its id.
| Name | In | Type | Description |
|---|---|---|---|
id* | path | string (uuid) |
curl -X GET "https://www.qra.cc/api/v1/qr/{id}" \
-H "Authorization: Bearer qrf_live_..."{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"slug": "abc123xyz",
"name": "Riyadh Mall — counter sticker",
"type": "url",
"destination": "https://example.com/menu",
"status": "active",
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}/qr/{id}Update a QR code’s name, destination, or status (active / paused / expired).
| Name | In | Type | Description |
|---|---|---|---|
id* | path | string (uuid) |
| Field | Type | Description |
|---|---|---|
name | string | |
destination | string | |
status | string | · active · paused · expired |
curl -X PATCH "https://www.qra.cc/api/v1/qr/{id}" \
-H "Authorization: Bearer qrf_live_..." \
-H "Content-Type: application/json" \
-d '{"name":"string","destination":"string","status":"active"}'{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"slug": "abc123xyz",
"name": "Riyadh Mall — counter sticker",
"type": "url",
"destination": "https://example.com/menu",
"status": "active",
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-01T12:00:00Z"
}/qr/{id}Permanently delete a QR code and all of its scans.
| Name | In | Type | Description |
|---|---|---|---|
id* | path | string (uuid) |
curl -X DELETE "https://www.qra.cc/api/v1/qr/{id}" \
-H "Authorization: Bearer qrf_live_..."/qr/{id}/scansRaw per-scan log — timestamp, country, device, OS, browser, referrer. Filter with since / until.
| Name | In | Type | Description |
|---|---|---|---|
id* | path | string (uuid) | |
page | query | integer | · default 1 |
limit | query | integer | · default 50 |
since | query | string (date-time) | |
until | query | string (date-time) |
curl -X GET "https://www.qra.cc/api/v1/qr/{id}/scans?page=1&limit=50" \
-H "Authorization: Bearer qrf_live_..."{
"data": [
{
"id": 0,
"ts": "2026-04-01T12:00:00Z",
"country": "SA",
"city": "Riyadh",
"device": "mobile",
"os": "iOS",
"browser": "Safari",
"referrer": "string"
}
],
"pagination": {
"page": 0,
"limit": 0,
"total": 0,
"pages": 0
}
}