QR code API
Create and manage QR codes, change what an editable code points to, and read scan statistics — from your own software. The API is free to use with your qrlama account.
Getting started
- Create an account (or sign in).
- Open Account → API access and create a token. Copy it immediately — it's shown only once.
- Send it with every request as a Bearer token.
curl https://qrlama.app/api/v1/me \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json"
All responses are JSON. Errors use standard status codes: 401 bad token, 403 not allowed, 404 not found, 422 invalid input (with a message and per-field errors), 429 too many requests (120 per minute).
Endpoints
| Method & path | What it does |
|---|---|
GET /api/v1/me | The signed-in user and their workspaces (personal + teams). |
GET /api/v1/types | The supported code types and their field names. |
GET /api/v1/codes | List codes. Filters: type, workspace_id (empty = personal), per_page (max 100). |
POST /api/v1/codes | Create a code. |
GET /api/v1/codes/{id} | Fetch one code. |
PATCH /api/v1/codes/{id} | Change a code's label or content. For an editable code the QR image never changes. |
DELETE /api/v1/codes/{id} | Delete a code (an editable code's printed copies stop working). |
GET /api/v1/codes/{id}/stats | Scan statistics for an editable code. Query: days = 7, 30 or 90. |
GET /api/v1/qr | A plain QR image. Query: data, format (svg or png), size, fg, bg, ecc (L, M, Q, H). |
Create an editable code
curl -X POST https://qrlama.app/api/v1/codes \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" -H "Accept: application/json" \
-d '{
"type": "url",
"label": "Spring menu",
"is_dynamic": true,
"fields": { "url-value": "https://example.com/menu" }
}'
The response contains scan_url — the permanent link to encode in your QR image (or fetch a ready-made image from /api/v1/qr?data=…). To change the destination later:
curl -X PATCH https://qrlama.app/api/v1/codes/CODE_ID \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" -H "Accept: application/json" \
-d '{ "fields": { "url-value": "https://example.com/summer-menu" } }'
Field names
Each code type has its own field names, the same ones used by the website forms:
| type | fields |
|---|---|
url | url-value |
text | text-value |
wifi | wifi-ssid, wifi-password, wifi-encryption, wifi-hidden |
email | email-to, email-subject, email-body |
phone | phone-value |
sms | sms-phone, sms-message |
contact | contact-first, contact-last, contact-phone, contact-email, contact-org, contact-url |
geo | geo-mode (coords|link), geo-lat, geo-lng, geo-label, geo-link |
event | event-title, event-start, event-end, event-location, event-description |
payment | payment-provider (paypal|venmo|cashapp|bitcoin|custom), payment-paypal-user, payment-venmo-user, payment-cashapp-tag, payment-bitcoin-address, payment-custom-url, payment-amount, payment-note |
Editable codes and scan statistics
An editable code's QR image contains a short link (https://qrlama.app/c/<short_code>) instead of your data. The short code is created once and never changes, so you can update the content at any time without reprinting. Every scan by a person is counted (robots are ignored); IP addresses are never stored.
Limits
- 120 requests per minute per token; 60 per minute for
/api/v1/qr. - Field values are limited to 2,000 characters; a code's content must fit in a QR code.
Questions or something missing? Get in touch.