Skip to main content
QRelix

QRelix API

The QR code API for developers

Create dynamic QR codes, change destinations without reprinting, pull scan analytics, and download SVG or PNG files from your own code. A clean REST API with JSON, scoped keys, and webhooks, included with the QRelix Team Plan.

What you can build

Everything the dashboard does, from your code

Agencies, developers, and operations teams use the QR code API to generate codes for every client, product, and location automatically.

  • Create QR codes in bulk

    URL, WiFi, vCard, email, phone, text, maps, and app store codes with your colors and style.

  • Update without reprinting

    Point a printed dynamic QR code at a new URL, or pause it, with one PATCH request.

  • Scan analytics API

    Total and unique scans, time series, countries, devices, and referrers for any code.

  • SVG and PNG downloads

    Print-ready vector files or PNGs up to 4096 pixels, generated on request.

  • Real-time webhooks

    Signed qr.scanned, qr.created, and qr.updated events pushed to your endpoint.

  • Scoped API keys

    Give each integration only the permissions it needs, and revoke a key in one click.

Quickstart

Your first API call in two minutes

Base URL: https://www.qrelix.com/api/v1

  1. 1

    Upgrade to Team

    The QRelix API is included with the QRelix Team Plan at $19 a month, with 3 seats.

  2. 2

    Create an API key

    Open Dashboard, then Integrations, pick permissions, and copy the key once.

  3. 3

    Make your first request

    Send the key as a Bearer token. Every endpoint returns JSON.

Check your key

curl https://www.qrelix.com/api/v1/me \
  -H "Authorization: Bearer $QRELIX_API_KEY"

Authentication

Send your key in the Authorization header as Bearer qrx_.... Keys are shown once when you create them and stored only as a hash. Keep them on your server, never in browser code.

Permissions

ScopeAllows
qr:readList QR codes, fetch one, and download its image.
qr:writeCreate, update, and archive QR codes.
stats:readScan logs and scan statistics.
webhooks:manageSubscribe and unsubscribe webhook endpoints. Zapier and Make need this.

Examples

Common QR code API requests

Copy a request in curl or JavaScript. Every response wraps its result in data.

Create a dynamic QR code

POST /qr-codes generates the QR code image, stores it, and fires the qr.created webhook. Set type to URL, WIFI, V_CARD, EMAIL, PHONE, NOTE, MAPS, or APP_STORES. Add an Idempotency-Key header so a retried request never creates a duplicate.

curl -X POST https://www.qrelix.com/api/v1/qr-codes \
  -H "Authorization: Bearer $QRELIX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 5f1c9a2e-spring-menu" \
  -d '{
    "type": "URL",
    "name": "Spring menu",
    "url": "https://example.com/menu",
    "design": {
      "dotsOptions": { "type": "rounded", "color": "#111827" },
      "qrOptions": { "errorCorrectionLevel": "Q" }
    }
  }'
Example response
{
  "data": {
    "id": "clz0example0000qrcode",
    "name": "Spring menu",
    "type": "URL",
    "subType": "DYNAMIC",
    "status": "ACTIVE",
    "destinationUrl": "https://example.com/menu",
    "scanCount": 0,
    "imageUrl": "https://s3.us-west-2.amazonaws.com/.../clz0example0000qrcode.svg",
    "landingUrl": "https://www.qrelix.com/landing/clz0example0000qrcode",
    "createdAt": "2026-10-13T15:04:05.000Z"
  }
}

List QR codes

GET /qr-codes returns your newest codes first. Pass nextCursor back as cursor to page through the rest, and status to filter.

curl "https://www.qrelix.com/api/v1/qr-codes?limit=50&status=ACTIVE" \
  -H "Authorization: Bearer $QRELIX_API_KEY"

Change a destination or pause a code

PATCH /qr-codes/{id} updates the name, description, destination URL, status, or category. Printed dynamic codes keep working; scans go to the new URL immediately.

curl -X PATCH https://www.qrelix.com/api/v1/qr-codes/QR_CODE_ID \
  -H "Authorization: Bearer $QRELIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/summer-menu", "status": "ACTIVE" }'

Get scan analytics

GET /qr-codes/{id}/stats returns total and unique scans, a daily, weekly, or monthly series, and the top countries, devices, operating systems, browsers, and referrers for any range up to a year.

curl "https://www.qrelix.com/api/v1/qr-codes/QR_CODE_ID/stats?from=2026-09-01T00:00:00Z&interval=week" \
  -H "Authorization: Bearer $QRELIX_API_KEY"
Example response
{
  "data": {
    "qrCodeId": "clz0example0000qrcode",
    "interval": "week",
    "totals": { "scans": 412, "uniqueVisitors": 377, "allTimeScans": 1280 },
    "series": [{ "date": "2026-09-01", "scans": 96 }, { "date": "2026-09-08", "scans": 121 }],
    "breakdowns": {
      "countries": [{ "value": "US", "scans": 301 }, { "value": "CA", "scans": 58 }],
      "devices": [{ "value": "iPhone", "scans": 220 }]
    }
  }
}

Download SVG or PNG files

GET /qr-codes/{id}/image returns print-ready SVG by default. Ask for format=png or format=jpg with a size from 64 to 4096 pixels.

curl "https://www.qrelix.com/api/v1/qr-codes/QR_CODE_ID/image?format=png&size=1024" \
  -H "Authorization: Bearer $QRELIX_API_KEY" \
  -o spring-menu.png

Get scans in real time with webhooks

POST /webhooks subscribes your HTTPS endpoint to events such as qr.scanned. The response includes the signing secret once; use it to verify each delivery.

curl -X POST https://www.qrelix.com/api/v1/webhooks \
  -H "Authorization: Bearer $QRELIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/hooks/qrelix", "events": ["qr.scanned"] }'

Reference

API endpoints

The full request and response schemas are in the OpenAPI 3.1 spec, which imports into Postman, Insomnia, and code generators.

Account

Check a key and see who it belongs to.

  • get/me
    Get the current accountReturns the account and key the request authenticated as. Use it to test a key.

QR codes

Create, list, update, and archive QR codes.

  • get/qr-codes
    List QR codesNewest first, cursor paginated. Archived codes are excluded. Scope: `qr:read`.
  • post/qr-codes
    Create a QR codeGenerates and stores the QR code image and emits `qr.created`. The body's `type` decides which object carries the content. Send an `Idempotency-Key` header to make retries safe. Scope: `qr:write`.
  • get/qr-codes/{id}
    Get a QR codeScope: `qr:read`.
  • patch/qr-codes/{id}
    Update a QR codeChange the name, description, destination (dynamic URL codes only; printed codes keep working), status, or category. Emits `qr.updated` and, for status, `qr.status_changed`. Scope: `qr:write`.
  • delete/qr-codes/{id}
    Archive a QR codeSame as deleting in the dashboard: the code stops resolving and leaves lists. Emits `qr.deleted`. Scope: `qr:write`.
  • get/qr-codes/{id}/image
    Download the QR code imageSVG by default. PNG and JPG can be resized. Scope: `qr:read`.

Analytics

Scan logs and scan statistics.

  • get/qr-codes/{id}/stats
    Get scan statisticsTotals, a time series, and the top values per dimension. Defaults to the last 30 days; the range can cover at most 366 days. Scope: `stats:read`.
  • get/qr-codes/{id}/scans
    List recent scansNewest first. Each row has the same shape as the `qr.scanned` webhook data. Scope: `stats:read`.

Webhooks

Subscribe endpoints to QR code and scan events.

  • get/events
    List webhook event typesEvery event you can subscribe to, with a sample payload.
  • get/webhooks
    List webhook endpointsScope: `webhooks:manage`.
  • post/webhooks
    Subscribe a webhook endpointThe response includes the signing `secret` once. Accepts `Idempotency-Key`. Scope: `webhooks:manage`.
  • get/webhooks/{id}
    Get a webhook endpoint
  • patch/webhooks/{id}
    Update a webhook endpointChange `url`, `events`, `qrCodeId`, `description`, or `enabled`.
  • delete/webhooks/{id}
    Unsubscribe a webhook endpoint

Rate limits and retries

  • Each API key can make 120 requests per minute.
  • Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset.
  • A 429 response includes Retry-After with the seconds to wait.
  • Send an Idempotency-Key header on POST requests. Retries with the same key and body return the original response for 24 hours.
  • Usage per key for the last 30 days is shown on the Integrations page.

Errors

Errors return a JSON body shaped like { "error": { "message", "code" } }.

StatusCodeMeaning
400invalid_requestThe body or a query parameter failed validation. field names the culprit.
401unauthorizedThe key is missing, malformed, or revoked.
403team_requiredThe key's workspace is not on the QRelix Team Plan. upgradeUrl links to billing.
403insufficient_scopeThe key lacks the permission this endpoint needs.
404not_foundNo QR code or endpoint with that id in your account.
409idempotency_in_progressA request with the same Idempotency-Key is still running.
422idempotency_key_reusedThe Idempotency-Key was already used with a different body.
429rate_limitedToo many requests this minute. Wait for Retry-After seconds.
500internal_errorSomething failed on our side. Retrying with the same Idempotency-Key is safe.

Prefer no code?

Team

Connect QRelix to Zapier or Make with the same API key, or manage QR codes from Claude and ChatGPT with the MCP server.

Start building with the QRelix API

Upgrade to the QRelix Team Plan for full API, Zapier, and Make access, 3 seats, and everything in Pro. Create your first key in under a minute.