API documentation
Create QR codes, change where they point and read scans and leads from your own systems. Included from the Plus plan.
Authentication
Create a key under Dashboard → API keys and send it with every request. Base URL: https://qrgurus.com/api/v1. Limit: 60 requests per minute per key (HTTP 429 with Retry-After when exceeded).
curl https://qrgurus.com/api/v1/codes \
-H "Authorization: Bearer qrg_your_key" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/spring","name":"Spring flyer","template":0,
"variables":{"machine_id":"VM-1023"}}'
Endpoints
| GET | /me | Your plan and dynamic-code usage. |
| GET | /codes | List codes. Query: project_id, limit (≤100), page. |
| POST | /codes | Create a code. Body: url (or type + content), kind (dynamic|static), name, template or design, project_id, flow_id, variables. |
| GET | /codes/{id} | One code. |
| PATCH | /codes/{id} | Update name, status (active|paused), destination, variables, flow_id, project_id, design. |
| DELETE | /codes/{id} | Delete a code. Printed copies stop working. |
| GET | /codes/{id}/image.svg | The styled QR code as SVG. |
| GET | /codes/{id}/scans | Scan stats. Query: days (1–365). Totals, per day, countries, cities, OS, devices, latest 50 scans. |
| GET | /leads | Form submissions. Query: code_id, since (ISO date), limit, page. |
| GET | /projects | List projects. |
| POST | /projects | Create a project. Body: name. |
| GET | /flows | List routing flows (to use as flow_id). |
Errors
Errors return a 4xx status and {"error": {"code": "invalid", "message": "…"}}. Codes: unauthorized, plan_required, rate_limited, not_found, invalid, static_code, bad_json.
Webhooks
Add a webhook URL to a flow in the Routing studio. Each lead is POSTed as JSON with event, qr_code, fields, variables, country, city and created_at. Failed deliveries are retried up to 6 times over about two hours.