QRCode SuiteQR platform
Documentation

REST API quickstart

QRCode Suite exposes a versioned REST API at `https://qrcode-suite.com/api/v1/`. Every call authenticates with a Bearer API key scoped to your workspace. This walkthrough goes from minting that key to creating a QR code, reading its scan events, changing its destination and recording a server-side conversion — six requests in all.

  1. 1

    Mint an API key

    In the dashboard: Settings → API keys → New key. The plaintext key is shown once and never stored again — only an HMAC-SHA-256 hash and a short display prefix are kept. The format is `qrs_live_<64 hex chars>`; store it as `QCS_API_KEY`. Pick scopes at mint time: `qrcodes:read`, `qrcodes:write`, `scans:read`, `conversions:write`. The form pre-selects the two read scopes, which is the safe default for a credential that ends up in a CI job. API access is a Business-plan feature; a key on a lower plan authenticates but answers 403 `plan_limit`. Every key is limited to 300 requests per minute.

  2. 2

    Create a dynamic QR code

    POST to `/api/v1/qrcodes` with header `Authorization: Bearer $QCS_API_KEY` and body `{"name": "Spring flyer", "type": "url", "destination_url": "https://example.com/landing"}`. The response is `{"data": {…}}` carrying the QR id, the generated slug, and `scan_url` — the tracked `/q/{slug}` address the printed code encodes. `status` accepts `draft`, `active` or `paused`, and `campaign_id` attaches the code to an existing campaign. If the workspace has used up its dynamic-QR quota, the call answers 403 `plan_limit` with `details.limit` and `details.current` rather than a generic error. Static QR types never consume that quota.

  3. 3

    Read scan events

    GET `/api/v1/scans?qr_id={id}&days=30&per_page=50` returns one page of scan events plus a `pagination` block. Each event carries `device_type`, `os`, `browser`, `country`, `region`, `city`, `language`, `referrer`, `is_bot`, `ab_variant` and the `destination` the visitor was sent to. `days` accepts 1–365 and defaults to 30. There are no IP addresses in the payload because the platform does not store them: only a keyed hash reaches the database. Omit `qr_id` to read every scan in the workspace.

  4. 4

    Change the destination

    PATCH `/api/v1/qrcodes/{id}` with body `{"destination_url": "https://example.com/new-destination"}`. The same endpoint accepts `name`, `payload`, `campaign_id`, and `status` with `draft`, `active`, `paused` or `archived`; at least one field is required. It answers 200 with the updated record. The printed code resolves to the new URL on the very next scan — no reprint, no cache flush. `DELETE /api/v1/qrcodes/{id}` answers 204 and retires the code.

  5. 5

    Record a conversion server-side

    POST `/api/v1/conversions` with body `{"event_name": "purchase", "external_id": "order-1042", "amount": 49.9, "currency": "EUR", "qr_slug": "spring-flyer"}`. A new event answers 201 `{"id": …, "created": true}`; replaying the same `external_id` answers 200 `{"duplicate": true}`, so a retrying job cannot double-count revenue. Attribution accepts either `qr_slug` or the `session_ref` value captured on the landing page. The call needs the `conversions:write` scope.

  6. 6

    Errors, and where the WordPress plugin fits

    Every failure returns `{"error": {"code": …, "message": …}}` with a stable code you can branch on: `unauthorized`, `insufficient_scope`, `plan_limit`, `validation_error`, `not_found`, `rate_limited`. Validation failures add `details.issues` keyed by field. The WordPress plugin is a connector, not a second API: it syncs into the same workspace over `/api/v1/wp/*` using its licence key, so codes created in WordPress appear in the same `GET /api/v1/qrcodes` list as codes created here. You do not need the plugin to use the API, and you do not need the API to use the plugin.

Frequently asked questions

What is QRCode Suite?

QRCode Suite is a standalone QR code platform: create a free account and generate branded, dynamic QR codes in the browser — no WordPress required. Connectors bring the same codes to WordPress and WooCommerce, where orders can be attributed to specific QR codes.

Does QRCode Suite work without WordPress?

Yes. QRCode Suite is a standalone SaaS — sign up, create QR codes, and track scans entirely on qrcode-suite.com. The WordPress plugin is an optional connector that brings your codes into wp-admin and adds WooCommerce order attribution.

Does QRCode Suite require a separate subscription?

The Free plan is available at no cost — no credit card required. Paid plans (Pro €9, Business €29, Agency €79 per month) unlock unlimited codes, redirect rules, and more. There is no separate per-scan fee.

What QR code types does QRCode Suite support?

QRCode Suite supports 22 QR code types: Static URL, Dynamic URL, Plain Text, Phone, Email, Location, Link Hub, SMS, WhatsApp, Wi-Fi, vCard, Social profile, PDF, File download, App download, Coupon, Calendar event, Lead capture form, Review collection, Wholesale inquiry, Loyalty reward, and Custom payload.

Can I change the destination of a QR code after printing it?

Yes. Dynamic QR codes use a short redirect URL. You can update the destination from your dashboard at any time without generating or reprinting the code.

Need help getting started?

Start free or browse all documentation.

Start freeAll docs