REST API v1 · Business plan

API documentation

Create, update, and track QR codes programmatically. Integrate Unqode SmartQR with your CRM, e-commerce platform, or internal tools.

Quick start

  1. 1 Upgrade to the Business plan.
  2. 2 Generate an API key in Settings → API keys.
  3. 3 Pass it in the X-API-Key header on every request.
curl
curl https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/qrcodes \
  -H "X-API-Key: qrk_live_xxxxxxxxxxxxxxxxxxxx"

Authentication

All requests require the X-API-Key header. Keys are prefixed qrk_. Revoke any compromised key from Settings.

Rate limits

120 requests / minute / key. Exceeding returns 429 with a Retry-After header.

Base URL

https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44

Endpoints

GET/api/v1/qrcodes

List every QR code on your account.

Response
{
  "data": [
    {
      "id": "a1b2c3...",
      "name": "Summer Menu",
      "type": "url",
      "shortCode": "summer-menu",
      "active": true,
      "totalScans": 1247,
      "createdAt": "2026-05-12T10:30:00.000Z"
    }
  ]
}
GET/api/v1/qrcodes/:id

Fetch a single QR code by id.

Response
{
  "data": {
    "id": "a1b2c3...",
    "name": "Summer Menu",
    "type": "url",
    "content": "https://example.com/menu",
    "shortCode": "summer-menu",
    "active": true,
    "totalScans": 1247,
    "uniqueScans": 982,
    "tags": ["restaurant"],
    "createdAt": "2026-05-12T10:30:00.000Z",
    "updatedAt": "2026-05-20T08:14:00.000Z"
  }
}
POST/api/v1/qrcodes

Create a dynamic QR code.

Request body
{
  "name": "Summer Menu",
  "type": "url",
  "content": "https://example.com/menu",
  "shortCode": "summer-menu",
  "tags": ["restaurant"]
}
Response
{
  "data": {
    "id": "a1b2c3...",
    "name": "Summer Menu",
    "type": "url",
    "shortCode": "summer-menu",
    "active": true,
    "createdAt": "2026-06-03T12:00:00.000Z"
  }
}
PATCH/api/v1/qrcodes/:id

Update name, content, active, or tags on a QR code.

Request body
{
  "content": "https://example.com/menu-v2",
  "active": true
}
Response
{
  "data": {
    "id": "a1b2c3...",
    "name": "Summer Menu",
    "type": "url",
    "active": true,
    "updatedAt": "2026-06-03T12:05:00.000Z"
  }
}
DELETE/api/v1/qrcodes/:id

Permanently delete a QR code and free its shortCode.

Response
{ "data": { "deleted": true, "id": "a1b2c3..." } }
GET/api/v1/analytics/:id

Get scan analytics for a QR code.

Response
{
  "data": {
    "id": "a1b2c3...",
    "totalScans": 1247,
    "uniqueScans": 982,
    "lastScanned": "2026-06-03T11:42:00.000Z",
    "scansByDay": [{ "date": "2026-06-01", "scans": 42 }],
    "scansByDevice": [{ "device": "iOS", "scans": 620 }],
    "scansByCountry": [{ "country": "US", "scans": 480 }],
    "scansByOS": [{ "os": "iOS 17.5", "scans": 410 }],
    "scansByBrowser": [{ "browser": "Safari", "scans": 540 }]
  }
}

Errors

StatusMeaning
400Bad request — missing or invalid fields.
401Missing or invalid API key, or plan is not Business.
404QR code not found.
409shortCode already taken.
429Rate limit exceeded — wait and retry.
500Server error — please contact support if persistent.

Ready to build?

Upgrade to Business to access the API and start integrating.