API Access

API Reference

Every route on the public API, with example requests. See Getting Started for authentication and rate limits.

Conventions

Every route requires an x-api-key header. Whether a request acts on your personal library or your business's shared library is determined entirely by which key you send — there's no separate business URL prefix.

Errors are JSON: {"error": "..."} for a single problem, or {"errors": [{"index": 0, "error": "..."}]} when a batch request fails validation — batch creation is all-or-nothing, so a validation error on any one item means nothing in the batch was created.

A business-scoped key that creates a shared-library item creates it with "status": "draft" — the same review workflow a human teammate's manual entry goes through (see Shared Library & Review Workflow).

Static QR codes

RouteWhat it does
GET /qrcodesList your (or your team's) saved QR codes.
POST /qrcodesCreate one QR code record.
POST /qrcodes/batchCreate up to 50 at once.
DELETE /qrcodes/{qr_id}Delete one.
GET /qrcodes/exportCSV of every record.
curl -X POST .../v1/qrcodes/batch \
  -H "x-api-key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"qrcodes": [
    {"url": "https://example.com/a", "name": "A"},
    {"url": "https://example.com/b", "name": "B"}
  ]}'

# -> 201
{"created": [
  {"qr_id": "...", "url": "https://example.com/a", "name": "A", "style": {}, "created_at": 1785500000, "updated_at": 1785500000},
  {"qr_id": "...", "url": "https://example.com/b", "name": "B", "style": {}, "created_at": 1785500000, "updated_at": 1785500000}
]}

Dynamic QR codes

RouteWhat it does
GET /dynqrcodesList your (or your team's) dynamic QR codes.
POST /dynqrcodesCreate one.
POST /dynqrcodes/batchCreate up to 50 at once.
PATCH /dynqrcodes/{code}Change destination URL, name, or status.
DELETE /dynqrcodes/{code}Delete (soft-delete — stops resolving, doesn't erase scan history).
GET /dynqrcodes/exportCSV of every record.
curl -X POST .../v1/dynqrcodes \
  -H "x-api-key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"destination_url": "https://example.com/landing", "name": "Spring campaign"}'

# -> 201
{"created": [{
  "code": "aB3xY9kQ", "short_url": "https://1337co.de/q/aB3xY9kQ",
  "destination_url": "https://example.com/landing", "name": "Spring campaign",
  "style": {}, "status": "active", "team_id": null,
  "created_at": 1785500000, "updated_at": 1785500000
}]}

Reporting (analytics)

RouteWhat it does
GET /dynqrcodes/analyticsSummary (total/unique scans) for every code you can see.
GET /dynqrcodes/{code}/analyticsFull breakdown for one code — daily counts, country, device, OS, browser.
GET /dynqrcodes/{code}/analytics/exportCSV of every individual scan event for one code.

See Dynamic QR Analytics for what each field means — the API returns the same data the analytics page shows, just as JSON/CSV instead of a chart.