QR code API
Free, no key. Anonymous requests are rate-limited per IP. Version v1 will never break.
Image
GET https://quickqr.page/api/v1/qr?data=… returns an image. Works anywhere an image URL does, including Markdown: 
| Param | Default | |
|---|---|---|
data | Required. Up to 2000 characters, URL-encoded. | |
format | png | png or svg |
size | 512 | 64–2048 px. PNG is the largest whole-pixel scale that fits. |
margin | 4 | Quiet zone in modules, 0–16 |
ecc | M | Error correction: L, M, Q, H |
fg, bg | 000000, ffffff | Hex colors |
Editable codes
Create a code whose destination you can change later. By creating one you agree to the Terms and Acceptable Use Policy.
curl -X POST https://quickqr.page/api/v1/codes \
-H 'Content-Type: application/json' \
-d '{"url":"https://example.com/menu"}'
Returns id, url (what to encode), secret and edit_url. The secret is shown once: store it.
GET /api/v1/codes/{id} # destination, scans
GET /api/v1/codes # the code this secret belongs to
PATCH /api/v1/codes/{id} # {"url": "https://…"}
DELETE /api/v1/codes/{id}
Authorization: Bearer {secret}
Destinations are checked with Google Web Risk and our own rules (no shorteners, IP addresses or look-alike domains). If the check is unavailable, the request fails with 503: retry later. Changes reach scanners within a minute.
Check a link
Before opening a link from a scanned code, ask whether it's known to be unsafe. We don't store the link.
POST /api/v1/check # {"url": "https://…"}
→ {"url", "host", "safe": false, "warning": "Google Web Risk flags this link as unsafe."}
Errors
JSON {"error": "…"} with 400 bad input, 403 browser request without our bot check (call the API from a server or app, not a web page), 404 unknown code or wrong secret, 409 code disabled, 422 destination not allowed, 429 rate limited, 503 safety check unavailable.