A single code

Read one code with its redirect rules, or change its destination, name or status.

Plan: Starter and up.

Get a code

GET /api/v1/codes/{id}

Returns the code object plus its rules, the code's redirect rules in order.

{
  "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",
    "rules": []
  }
}

Returns 404 NOT_FOUND if the id isn't a code in this workspace.

Update a code

PATCH /api/v1/codes/{id}

Send only the fields to change.

Body fieldNotes
urlNew destination, http or https, up to 2048 characters. URL codes only
nameNew name, 1 to 120 characters
statusactive or paused. People who scan a paused code see a "Temporarily unavailable" page
curl -X PATCH https://dynaqr.app/api/v1/codes/0b8f6c2e-3f7a-4d0e-9a61-2f4c7f1d9b10 \
  -H "Authorization: Bearer qrm_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/autumn-menu"}'

Returns the updated code object in data (without rules).

Errors to expect:

  • 409 INVALID_STATE: you sent url for a code that isn't a URL code (change those in the dashboard), or the code was disabled by a safety check.
  • 409 EDIT_LOCKED: the code is over the plan's limit after a downgrade.
  • 402 PLAN_LIMIT: you sent "status": "active" for a paused code, but the workspace already has as many live dynamic codes as its plan allows.
  • 422 DESTINATION_BLOCKED: the new URL failed a safety check, or there were too many changes in a short time.

There is no delete endpoint. Archive codes in the dashboard.