QR Code Generation · Port 3350

One service for
all QR generation

One service, one API key, one place to manage the qrcode dependency. Generate QR codes — as PNG data URLs or SVG — from any internal tool with a single JSON POST request.

any-service.js
// One call, no npm dependency in your project
const res = await fetch('http://localhost:3350/api/qr', {
  method:  'POST',
  headers: { 'Content-Type': 'application/json', 'X-Api-Key': process.env.QR_SERVICE_KEY },
  body:    JSON.stringify({ data: targetUrl, format: 'dataUrl' }),
});
const { dataUrl } = await res.json();
// dataUrl → <img src="data:image/png;base64,...">
Why a dedicated service

One dependency to maintain

🔐
Single source of truth
The qrcode npm package lives here and nowhere else. Security patches and upgrades happen in one place — every connected tool benefits immediately.
PNG + SVG in one call
Request a data URL for <img> embedding, an SVG for scalable print output, or both — with a single JSON POST.
📦
Batch generation
Generate up to 50 QR codes in one request. Ideal for bulk label printing, inventory QR sheets, or batch campaigns.
🛡️
Service key for internals
Internal services like ssoAuth and DriveDesk authenticate with a shared service key — no subscription consumed, no credit deducted.
Plans

Annual subscription

One flat annual fee. Generate QR codes all year — logins, labels, integrations, or anything else. When your 10,000 base credits run low, buy a refill at the tier that fits your volume.

Refill tiers

Set your refill tier once

Pick the tier that matches your volume. When credits run low, buy your tier from the dashboard — no decision fatigue, just one click. Refills stack on your current balance and don't expire until renewal.

Basic
$15
+ 2,500 codes
Light use — low-frequency generation
Standard
$30
+ 6,000 codes
Regular use — steady generation across tools
Premium
$60
+ 20,000 codes
Maximum volume — heavy automation or integrations
API

Simple JSON endpoints

Pass your API key in X-Api-Key or Authorization: Bearer <key>. All request and response bodies are JSON.

POST /api/qr — single code
// Request
{ "data": "https://your-app.example.com/resource/12345",
  "format": "dataUrl",  // 'both' | 'dataUrl' | 'svg'
  "options": { "width": 400 } }

// Response
{ "dataUrl": "data:image/png;base64,...",
  "creditsRemaining": 9999 }
POST /api/qr/batch — up to 50 codes
// Request
{ "items": [
    { "data": "https://app.example.com/resource/aaa-001", "format": "svg" },
    { "data": "https://app.example.com/resource/bbb-002", "format": "svg" }
  ] }

// Response
{ "results": [ { "svg": "<svg...>" }, { "svg": "<svg...>" } ],
  "creditsRemaining": 9997 }