Qravio
Qravio API

Generate 10,000 unique QR codes from your application

Create editable, trackable QR codes from your own systems, 50 per request, safe to retry. Each one comes back with a short link, a scannable SVG and its own scan analytics.

curl
curl -X POST https://api.qravio.app/api/public/v1/qrcodes/bulk \
  -H "Authorization: Bearer $QRAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "name": "Table 1",
        "type": "website",
        "category": "dynamic",
        "content": {
          "url": "https://example.com/menu?table=1"
        },
        "destinations": [
          {
            "target_url": "https://example.com/menu?table=1"
          }
        ],
        "client_ref": "outlet-7-table-1"
      },
      {
        "name": "Table 2",
        "type": "website",
        "category": "dynamic",
        "content": {
          "url": "https://example.com/menu?table=2"
        },
        "destinations": [
          {
            "target_url": "https://example.com/menu?table=2"
          }
        ],
        "client_ref": "outlet-7-table-2"
      }
    ]
  }'

Built for volume

50 codes per request

POST /qrcodes/bulk takes up to 50 items. The whole batch is checked against your plan before a single code is created.

Safe to retry

Send your own ID as client_ref. A reference this workspace has already used returns the existing code, never a duplicate.

Editable after printing

Dynamic codes encode a short link. PATCH the destination and every printed copy follows.

An image in every response

Each QR comes back with preview_url, a scannable SVG you can place straight into artwork or a PDF.

Scan analytics per code

GET /qrcodes/{id}/analytics returns scans by day, device and country for every code you made.

Signed webhooks

Scan, lead and scan-limit events are posted to your server, HMAC-signed and retried on failure.

Expiry, schedules and caps

end_at, start_at, daily hours and scan_limit control when and how often each code opens.

Static codes too

Permanent codes with the data in the pattern itself. They do not count against your plan QR allowance.

What each plan allows

Every call counts against the monthly quota, and a bulk request counts one call per item. Static codes use calls but not the dynamic QR allowance.

PlanAPI callsDynamic QRsWebhooks
Free, StarterNo API accessn/aNo
Pro3,000 a month300Scan, lead, scan limit
Agency25,000 a monthNo capAdds scan milestones

Prices are on the pricing page.

Developer FAQ

Can I really generate 10,000 codes?

Yes, on the Agency plan: it has no cap on dynamic QRs and allows 25,000 API calls a month. 10,000 codes is 200 bulk requests of 50. Pro allows 300 dynamic QRs and 3,000 calls a month.

How is a bulk request counted?

One call per item. A 50-item batch costs 50 calls, the same as 50 single creates. The quota is checked first, so a batch that does not fit creates nothing and returns 429.

Do static codes count against my plan?

Not against the QR allowance, which counts dynamic codes only. Each create is still one API call. Static codes cannot take a scan limit or a schedule, because their scans never reach us.

Which plans include the API?

Pro and Agency. Free and Starter have no API access. Keys are created by an owner or editor under Developers in the workspace.

What if something fails halfway through a batch?

Items are validated as a batch before any row is written. If an insert fails after that, the codes already created stay, so re-send the batch with the same client_refs: the finished ones come back as they are and only the rest are created.

Make your first code in one request

Create an account, upgrade to Pro or Agency, and make a key under Developers in your workspace.