QRD API v1

The QRD v1 REST API lets you create, list, and update QR codes and read scan events. Authentication uses Bearer API keys issued under Settings → API & MCP. Keys belong to an organization and are rate-limited per plan.

Downloads

Authentication

Every request must include Authorization: Bearer qrd_live_.... Keys are shown only once at creation. Revoke compromised keys from Settings.

Endpoints

  • GET /api/v1/qr — list codes. Supports page, perPage, search.
  • POST /api/v1/qr — create a code. Body: title, targetUrl, type?, tags?, and optional appearance (foreground, background, size, margin, errorCorrection).
  • GET /api/v1/qr/:id — fetch a single code. The create and single-get responses also inline an image (PNG data URL) and encodedUrl for convenience.
  • GET /api/v1/qr/:id/image — render the QR image. Query: format (png default, or svg) plus the same appearance overrides. DYNAMIC codes encode the tracked short link; STATIC encode the raw target.
  • PATCH /api/v1/qr/:id — update title/targetUrl/status/tags.
  • DELETE /api/v1/qr/:id — permanently delete a code and its scans.
  • GET /api/v1/qr/:id/scans — latest scan events.
  • GET/POST /api/v1/reports — list or create scheduled email report subscriptions (recipients, cadence: weekly / monthly).
  • PATCH/DELETE /api/v1/reports/:id — update (recipients, cadence, active) or delete a schedule.

MCP server

The qrd-mcp npm package exposes these endpoints as MCP tools for AI clients (Cursor, Claude Desktop, etc.): qrd_create_qr, qrd_render_qr, qrd_update_qr, qrd_delete_qr, and qrd_list_qr_codes. qrd_render_qr returns the actual PNG/SVG image. No install or repo needed — it runs via npx; just set QRD_API_KEY (and optional QRD_API_BASE_URL). See Settings → API & MCP for a copy-paste config.

{
  "mcpServers": {
    "qrd": {
      "command": "npx",
      "args": ["-y", "qrd-mcp"],
      "env": {
        "QRD_API_KEY": "qrd_live_...",
        "QRD_API_BASE_URL": "https://qrd.cx"
      }
    }
  }
}

Tracking & reports

Every scan of a DYNAMIC code is tracked (time, country, city, referer, device, resolved destination) and available via GET /api/v1/qr/:id/scans. You can also subscribe email addresses to a recurring organization summary (scans, conversions, top codes, top countries) with POST /api/v1/reports — weekly or monthly. Static codes are not routed through QRD and cannot be tracked.

Example

# 1. Create a dynamic QR (scans are tracked)
curl -X POST https://qrd.cx/api/v1/qr \
  -H "Authorization: Bearer qrd_live_..." \
  -H "Content-Type: application/json" \
  -d '{"title":"Storefront flyer","targetUrl":"https://your-shop.com/deal","type":"DYNAMIC","tags":["promo"],"appearance":{"foreground":"#101010","size":512}}'

# 2. Download the rendered image (use the id from the response above)
curl -L "https://qrd.cx/api/v1/qr/QR_ID/image?format=png&size=512" \
  -H "Authorization: Bearer qrd_live_..." -o qr.png

Quotas

Each plan has a daily request limit (Free 500, Pro 10,000, Enterprise 1,000,000). Free includes one active API key for trying integrations. Responses exceeding the limit return exceeding the limit return 429 Too Many Requests.

Errors

All error responses are JSON: { "success": false, "error": "reason" }. Statuses follow HTTP conventions: 401 for auth, 402 for plan gates, 404, 422 for validation, 429 for quotas.