Codes
List dynamic codes and create new ones.
Plan: Starter and up.
The code object
{
"id": "0b8f6c2e-3f7a-4d0e-9a61-2f4c7f1d9b10",
"name": "Spring menu flyer",
"kind": "dynamic",
"status": "active",
"type": "url",
"destination": "https://example.com/menu",
"content": { "type": "url", "url": "https://example.com/menu" },
"shortUrl": "https://qrmgr.link/k7Pq2x",
"tags": ["spring"],
"createdAt": "2026-11-01T10:15:00.000Z",
"updatedAt": "2026-11-10T08:02:41.000Z"
}
| Field | Type | Notes |
|---|---|---|
id | string (UUID) | Use it in /codes/{id} |
name | string | Internal name |
kind | string | dynamic for every code in GET /codes. static only if you fetch a static code by its id |
status | string | active, paused, archived or disabled (stopped by a safety check) |
type | string | What the code opens: url, bio, lead, vcard, sms, email, phone, app or event. WhatsApp, Google review and location codes are url codes |
destination | string or null | The URL, for url codes; null for other types |
content | object | The full content for the code's type. For url codes: { "type": "url", "url": "…" } |
shortUrl | string or null | The short link encoded in the printed QR code |
tags | string[] | Lowercase tags |
createdAt, updatedAt | string | ISO 8601 timestamps |
List codes
GET /api/v1/codes
Returns dynamic codes, newest first, 100 per page. Archived codes are left out unless you ask for them with status=archived.
| Query parameter | Notes |
|---|---|
search | Matches part of the name or the short-link slug |
status | active, paused, archived or disabled |
tag | Codes with this tag |
page | Page number, from 1. See Pagination |
curl "https://dynaqr.app/api/v1/codes?search=menu&status=active" \ -H "Authorization: Bearer qrm_live_your_key"
{
"data": [
{
"id": "0b8f6c2e-3f7a-4d0e-9a61-2f4c7f1d9b10",
"name": "Spring menu flyer",
"kind": "dynamic",
"status": "active",
"type": "url",
"destination": "https://example.com/menu",
"content": { "type": "url", "url": "https://example.com/menu" },
"shortUrl": "https://qrmgr.link/k7Pq2x",
"tags": ["spring"],
"createdAt": "2026-11-01T10:15:00.000Z",
"updatedAt": "2026-11-10T08:02:41.000Z"
}
],
"page": 1,
"total": 1
}
Create a code
POST /api/v1/codes
Creates a dynamic URL code. It uses one of the plan's dynamic code slots.
| Body field | Required | Notes |
|---|---|---|
name | Yes | 1 to 120 characters |
url | Yes | http or https URL, up to 2048 characters |
tags | No | Up to 20 tags, each up to 40 characters. Stored in lowercase |
placement | No | Where it's printed, up to 200 characters. Shown in reports |
curl -X POST https://dynaqr.app/api/v1/codes \
-H "Authorization: Bearer qrm_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Spring menu flyer",
"url": "https://example.com/menu",
"tags": ["spring"],
"placement": "Table tents"
}'
Returns 201 with the new code in data.
The destination goes through the same safety checks as the dashboard. Common errors:
402 PLAN_LIMIT: all dynamic code slots are used. The message gives the limit.403 EMAIL_UNVERIFIED: the person who created the key hasn't verified their email.422 DESTINATION_BLOCKED: the URL failed a safety check.409 INVALID_KEY_OWNER: the person who created the key no longer exists.
To create other code types, such as bio page or contact card codes, use the dashboard.