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"
}
FieldTypeNotes
idstring (UUID)Use it in /codes/{id}
namestringInternal name
kindstringdynamic for every code in GET /codes. static only if you fetch a static code by its id
statusstringactive, paused, archived or disabled (stopped by a safety check)
typestringWhat the code opens: url, bio, lead, vcard, sms, email, phone, app or event. WhatsApp, Google review and location codes are url codes
destinationstring or nullThe URL, for url codes; null for other types
contentobjectThe full content for the code's type. For url codes: { "type": "url", "url": "…" }
shortUrlstring or nullThe short link encoded in the printed QR code
tagsstring[]Lowercase tags
createdAt, updatedAtstringISO 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 parameterNotes
searchMatches part of the name or the short-link slug
statusactive, paused, archived or disabled
tagCodes with this tag
pagePage 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 fieldRequiredNotes
nameYes1 to 120 characters
urlYeshttp or https URL, up to 2048 characters
tagsNoUp to 20 tags, each up to 40 characters. Stored in lowercase
placementNoWhere 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.