API Access

API access requires Pro or Agency tier

Upgrade your subscription to generate API keys and access the developer API. Each API call costs 1 credit.

View pricing plans →

API Key

Use your API key to generate QR codes programmatically. Each API call costs 1 credit. You can only have one active key at a time — generating a new key replaces the old one.

Quick Start

curl -X POST https://qr.vu/api/v1/qr/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "qr_type": "static",
    "content_type": "url",
    "destination": "https://example.com"
  }'

Structured payloads

For vCard, Wi-Fi, Email, etc. send a payload object instead of destination.

Cost

1 credit per API call. Returns 402 if insufficient credits.

API Reference

Endpoint

POST /api/v1/qr/generate

Content Types

url, text, vcard, wifi, email, sms, phone, location, event, pdf, image, video, social, app, barcode

Rate Limit

60 requests per minute per API key

Output Formats

PNG and SVG URLs included in every response

Error Codes

401 (invalid key), 402 (no credits), 429 (rate limit), 400 (bad request)

Python Example
import requests

response = requests.post(
    "https://qr.vu/api/v1/qr/generate",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "qr_type": "static",
        "content_type": "url",
        "destination": "https://example.com",
        "title": "My QR Code",
    },
)

if response.status_code == 201:
    qr = response.json()
    print(f"PNG: {qr['image_url']}")
    print(f"SVG: {qr['image_svg_url']}")
JavaScript Example
const response = await fetch(
  "https://qr.vu/api/v1/qr/generate",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      qr_type: "static",
      content_type: "url",
      destination: "https://example.com",
      title: "My QR Code",
    }),
  }
);

if (response.status === 201) {
  const qr = await response.json();
  console.log("PNG:", qr.image_url);
  console.log("SVG:", qr.image_svg_url);
}
vCard Payload Example
{
  "qr_type": "static",
  "content_type": "vcard",
  "title": "Jane Smith",
  "payload": {
    "first_name": "Jane",
    "last_name": "Smith",
    "organization": "Acme Corp",
    "email": "jane@acme.com",
    "phone": "+1-555-0123",
    "website": "https://acme.com"
  }
}
Wi-Fi Payload Example
{
  "qr_type": "static",
  "content_type": "wifi",
  "title": "Office Wi-Fi",
  "payload": {
    "ssid": "OfficeNetwork",
    "password": "guestpass123",
    "encryption": "WPA"
  }
}