ScanOrbit 2.0 Live: Unlimited dynamic QR codes with 1-year scan analytics. See Plans →
REST API v1 Specification

Programmatic QR Code Automation

Create, update destination URLs, and query real-time scan analytics programmatically. Integrate ScanOrbit directly with your CRM, e-commerce backend, or internal pipeline.

120 Requests / Minute Standard JSON Payloads 120 Requests/Min Per Key
api-request
HTTP 200 OK
# Fetch all QR codes on account
curl -X GET "https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/qrcodes" \
  -H "X-API-Key: qrk_your_key_here" \
  -H "Content-Type: application/json"
JSON Response:200 OK
{
  "status": "success",
  "data": [
    { "id": "qr_a1b2", "shortCode": "summer-menu", "scans": 1247 }
  ]
}

120/min

Rate Limit Per Key

Edge

Served via Vercel's Network

100%

RESTful Architecture

1

Signed Webhook, Any Endpoint

Quick Start in 3 Steps

  1. 1Ensure your account is active on the Business plan ($29/mo).
  2. 2Generate your live secret key in Dashboard → Settings → API Keys.
  3. 3Include the key in the X-API-Key request header.
cURL Request Example
curl https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/qrcodes \
  -H "X-API-Key: qrk_xxxxxxxxxxxxxxxxxxxx"

Authentication

All requests require an X-API-Key header. Secret keys are prefixed with qrk_ and can be revoked anytime in your dashboard.

Rate Limits

Standard tier rate limit is 120 requests / minute / key. Every response carries X-RateLimit-Limit and X-RateLimit-Remaining; exceeded requests return HTTP 429 with a Retry-After header.

Production Base URL

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

Core API Endpoints

Complete reference for querying, generating, modifying, and tracking QR code resources.

GET/api/v1/qrcodes
List all QR codes on account

Returns a paginated list of all dynamic and static QR codes created on your organization workspace.

Request Example (CURL)
GET /api/v1/qrcodes
curl -X GET "https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/qrcodes" \
  -H "X-API-Key: qrk_your_key_here" \
  -H "Content-Type: application/json"
JSON Response (200 OK)
Response Body
{
  "status": "success",
  "data": [
    {
      "id": "qr_a1b2c3d4",
      "name": "Summer Outdoor Menu",
      "type": "url",
      "shortCode": "summer-menu",
      "active": true,
      "totalScans": 1247,
      "createdAt": "2026-05-12T10:30:00.000Z"
    }
  ]
}
GET/api/v1/qrcodes/:id
Retrieve single QR code

Fetch comprehensive metadata, target destination URL, scan counts, and tag parameters for a specific QR record.

Request Example (CURL)
GET /api/v1/qrcodes/:id
curl -X GET "https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/qrcodes/qr_a1b2c3d4" \
  -H "X-API-Key: qrk_your_key_here"
JSON Response (200 OK)
Response Body
{
  "status": "success",
  "data": {
    "id": "qr_a1b2c3d4",
    "name": "Summer Outdoor Menu",
    "type": "url",
    "content": "https://restaurant.com/menu-v2",
    "shortCode": "summer-menu",
    "active": true,
    "totalScans": 1247,
    "uniqueScans": 982,
    "tags": ["restaurant", "patio"],
    "createdAt": "2026-05-12T10:30:00.000Z",
    "updatedAt": "2026-05-20T08:14:00.000Z"
  }
}
POST/api/v1/qrcodes
Create new QR code

Generate a new dynamic or static QR code programmatically with customizable destination URL, shortCode slug, and tags.

Request Example (CURL)
POST /api/v1/qrcodes
curl -X POST "https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/qrcodes" \
  -H "X-API-Key: qrk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Summer Outdoor Menu",
    "type": "url",
    "content": "https://restaurant.com/menu",
    "shortCode": "summer-menu",
    "tags": ["restaurant", "patio"]
  }'
JSON Request Payload
Request Body
{
  "name": "Summer Outdoor Menu",
  "type": "url",
  "content": "https://restaurant.com/menu",
  "shortCode": "summer-menu",
  "tags": ["restaurant", "patio"]
}
JSON Response (200 OK)
Response Body
{
  "status": "success",
  "data": {
    "id": "qr_a1b2c3d4",
    "name": "Summer Outdoor Menu",
    "type": "url",
    "shortCode": "summer-menu",
    "active": true,
    "createdAt": "2026-06-03T12:00:00.000Z"
  }
}
PATCH/api/v1/qrcodes/:id
Update existing QR destination

Update the destination URL or status on a live dynamic QR code instantly without changing the printed graphic.

Request Example (CURL)
PATCH /api/v1/qrcodes/:id
curl -X PATCH "https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/qrcodes/qr_a1b2c3d4" \
  -H "X-API-Key: qrk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "https://restaurant.com/menu-fall-update",
    "active": true
  }'
JSON Request Payload
Request Body
{
  "content": "https://restaurant.com/menu-fall-update",
  "active": true
}
JSON Response (200 OK)
Response Body
{
  "status": "success",
  "data": {
    "id": "qr_a1b2c3d4",
    "name": "Summer Outdoor Menu",
    "type": "url",
    "active": true,
    "updatedAt": "2026-06-03T12:05:00.000Z"
  }
}
DELETE/api/v1/qrcodes/:id
Permanently delete QR code

Delete a QR code record and immediately release its custom shortCode slug for reallocation.

Request Example (CURL)
DELETE /api/v1/qrcodes/:id
curl -X DELETE "https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/qrcodes/qr_a1b2c3d4" \
  -H "X-API-Key: qrk_your_key_here"
JSON Response (200 OK)
Response Body
{
  "status": "success",
  "data": {
    "deleted": true,
    "id": "qr_a1b2c3d4"
  }
}
GET/api/v1/analytics/:id
Query real-time scan analytics

Retrieve comprehensive scan metrics, time-series distributions, device types, operating systems, and country breakdowns.

Request Example (CURL)
GET /api/v1/analytics/:id
curl -X GET "https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/analytics/qr_a1b2c3d4" \
  -H "X-API-Key: qrk_your_key_here"
JSON Response (200 OK)
Response Body
{
  "status": "success",
  "data": {
    "id": "qr_a1b2c3d4",
    "totalScans": 1247,
    "uniqueScans": 982,
    "lastScanned": "2026-06-03T11:42:00.000Z",
    "scansByDay": [{ "date": "2026-06-01", "scans": 42 }],
    "scansByDevice": [{ "device": "iOS", "scans": 620 }, { "device": "Android", "scans": 590 }],
    "scansByCountry": [{ "country": "US", "scans": 480 }, { "country": "UK", "scans": 310 }]
  }
}
POST/api/v1/hooks
Subscribe a URL to an event

For Zapier, Make, n8n and your own services. Each event is posted to the URL as JSON as it happens: lead.captured, form.submitted, qr.created or scan (bots excluded). Every payload has an id you can deduplicate on. Respond 410 Gone to unsubscribe, or call DELETE /api/v1/hooks/:id. Read-only keys can subscribe.

Request Example (CURL)
POST /api/v1/hooks
curl -X POST "https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/hooks" \
  -H "X-API-Key: qrk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"event": "lead.captured", "targetUrl": "https://example.com/hooks/scanorbit"}'
JSON Request Payload
Request Body
{
  "event": "lead.captured",
  "targetUrl": "https://example.com/hooks/scanorbit"
}
JSON Response (200 OK)
Response Body
{
  "data": {
    "id": "6f1c2a9e-…",
    "event": "lead.captured",
    "targetUrl": "https://example.com/hooks/scanorbit",
    "createdAt": "2026-10-05T10:30:00.000Z"
  }
}
GET/api/v1/leads
List recent leads

The newest contacts captured by your digital business cards, in the same shape as the lead.captured event. GET /api/v1/form-responses does the same for forms, surveys, polls and feedback. Both take ?limit= (up to 100).

Request Example (CURL)
GET /api/v1/leads
curl "https://brrtnzrdqgpmddvvppql.supabase.co/functions/v1/make-server-d9709a44/api/v1/leads?limit=10" \
  -H "X-API-Key: qrk_your_key_here"
JSON Response (200 OK)
Response Body
{
  "data": [
    {
      "event": "lead.captured",
      "id": "card123:1791200000000",
      "qrName": "Priya Sharma, Sales",
      "name": "Alex Morgan",
      "email": "alex@example.com",
      "company": "Northwind",
      "timestamp": "2026-10-05T10:30:00.000Z"
    }
  ]
}

HTTP Status Codes

StatusDescription
200 OKRequest completed successfully and returned requested payload.
400 Bad RequestMissing required parameters or malformed JSON body.
401 UnauthorizedMissing, invalid, revoked or expired API key (expired keys return KEY_EXPIRED), or the account is not on the Business plan.
403 ForbiddenA read-only key tried to create, change or delete something (KEY_READ_ONLY).
404 Not FoundThe requested QR code record ID does not exist.
409 ConflictThe requested custom shortCode slug is already claimed.
429 Rate LimitedExceeded 120 requests/minute. Respect the Retry-After header.
500 Server ErrorUnexpected server error. Retry the request; if it keeps happening, contact support with the time and endpoint.
Developer FAQ

Frequently Asked Questions

Technical details on authentication, rate limits, schema payloads, and bulk creation.

Need higher rate limits or custom scopes?

Our developer relations team can configure custom dedicated rate limits for high-throughput enterprise systems.

Contact Developer Support
Automate in Under 5 Minutes

Automate Your QR Pipeline Today

Generate API keys on the Business plan and start creating dynamic QR codes in under five minutes, with dedicated per-key rate limits.

120 req/min Default Rate Limit
Multi-Language SDK Snippets
Instant Programmatic Redirects

Included on ScanOrbit Business at $29/mo · Instant API key generation

API EXPLORER
v1 LIVE
API DOCS

Scan to test in Mobile Browser

Instantly inspect interactive endpoints and specs on device