Qravio
QR code API for packaging

A QR code on every box, generated from your ERP

Packaging runs are printed months before they reach a shelf. Create one dynamic code per SKU or per batch when the print order is raised, and keep the right to change where it points for as long as the box exists.

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": "SKU 4471 batch 2026-09A",
        "type": "website",
        "category": "dynamic",
        "content": {
          "url": "https://example.com/p/4471?batch=2026-09A"
        },
        "destinations": [
          {
            "target_url": "https://example.com/p/4471?batch=2026-09A"
          }
        ],
        "client_ref": "sku-4471-batch-2026-09A"
      },
      {
        "name": "SKU 4472 batch 2026-09A",
        "type": "website",
        "category": "dynamic",
        "content": {
          "url": "https://example.com/p/4472?batch=2026-09A"
        },
        "destinations": [
          {
            "target_url": "https://example.com/p/4472?batch=2026-09A"
          }
        ],
        "client_ref": "sku-4472-batch-2026-09A"
      }
    ]
  }'

How the integration works

Your ERP or PLM calls the API when a print job is approved, using the SKU and batch number as the client_ref. The response carries the short code and a scannable SVG to drop into the dieline. When a batch is recalled or a promotion ends, one PATCH repoints every box in that batch.

  1. 1Create an API key in your workspace under Developers (Pro or Agency plan).
  2. 2When a print job is approved, send its SKUs and batch numbers to POST /qrcodes/bulk, 50 per request, with the batch number as client_ref.
  3. 3Place each response preview_url (a scannable SVG) into the packaging artwork.
  4. 4After launch, PATCH a code destination to point a batch at a recall notice, a recipe or a reorder page.

What you get

Batch-level recalls

One code per batch means a recall can repoint exactly the affected boxes, not the whole product line.

Retry-safe imports

A client_ref this workspace has already used returns the existing code instead of a duplicate, so a failed ERP job can simply run again.

Scans by market

GET /qrcodes/{id}/analytics shows where each batch is being scanned, which tells you where it actually sold.

Your domain on the box

Attach a verified custom domain with custom_domain_id so the printed link carries your brand.

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.

Packaging API FAQ

Should I make one code per unit or per batch?

Per batch or per SKU for most brands. Per-unit serialisation works too, but every code is one API call and one dynamic QR, so size it against your plan: Agency allows 25,000 calls a month with no cap on dynamic QRs.

What happens to printed boxes if I change the destination?

Nothing on the box changes. The printed pattern encodes a short link, and the destination behind it updates as soon as you save.

Can I get a print-quality file?

Every QR in a response has a preview_url that returns a scannable SVG. Vector PDF export, including multi-code print sheets, is in the dashboard.

Start generating codes

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