API

Connect another product

One workspace key covers every end user of the other product. Stamp each code with externalUserId. The API answers only while the subscription is active or trialing. Free workspaces can still create codes in the dashboard.

Authentication

Create a key under API after upgrading. Send it as a bearer token. The raw key is shown once.

curl https://myqrvision.com/api/v1/codes \
  -H "Authorization: Bearer qr_live_..."

Base URL https://myqrvision.com/api/v1. Limit is 60 requests a minute per key.

Create a code

Types are url, text, email, sms, phone, vcard, wifi, pdf, and app. The image always encodes the scan URL, so a later payload edit does not require a new file.

curl https://myqrvision.com/api/v1/codes \
  -H "Authorization: Bearer qr_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Spring menu",
    "type": "url",
    "payload": { "url": "https://example.com/menu" },
    "externalUserId": "user_123",
    "externalId": "menu_1"
  }'

A new code returns 201. Sending the same externalId with the same type and payload returns 200 and the existing code. A different payload for that id returns 409.

The SVG

Store imageUrl from the response. It is a public SVG. Replace .svg with .png when you need a bitmap. scanUrl is what the phone opens. The file uses the saved appearance, so a later design change shows up at the same address.

{
  "id": "378939b8-cf21-4277-b0df-cc6395e66c1a",
  "imageUrl": "https://myqrvision.com/q/k7mP3nQ2aR.svg",
  "scanUrl": "https://myqrvision.com/s/k7mP3nQ2aR",
  "externalUserId": "user_123",
  "externalId": "menu_1"
}

Appearance

Send design on create, or PATCH just that object later. Colors are #rrggbb. Pattern is square, rounded, dots, or diamond. Eyes are square, rounded, or circle. Frame is none, border, or banner. A logo is a PNG, JPEG, or WebP data URL under 120 KB, and it forces high error correction. A null logo removes it. A repeat externalId does not change a saved design.

curl -X PATCH https://myqrvision.com/api/v1/codes/CODE_ID \
  -H "Authorization: Bearer qr_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "design": {
      "foreground": "#312e81",
      "background": "#eef2ff",
      "eye": "#312e81",
      "pattern": "rounded",
      "eyes": "rounded",
      "frame": "banner",
      "frameText": "Menu",
      "frameColor": "#312e81"
    }
  }'

The code response includes design. List results set hasLogo and omit the logo bytes. Fetch one code to read the data URL back.

Analytics

Paying keys always receive the daily series plus country, device, and browser. from and to are YYYY-MM-DD. The default range is the last 30 days, and the maximum is 366.

curl "https://myqrvision.com/api/v1/codes/CODE_ID/analytics?from=2026-09-01&to=2026-09-27" \
  -H "Authorization: Bearer qr_live_..."

List codes with GET /api/v1/codes. Filter one end user with externalUserId.

Errors

401unauthorizedMissing or unknown key.
402payment_requiredThe workspace is not on an active or trialing subscription.
404not_foundThat code is not in this workspace.
400design_invalidA design field is missing, the wrong type, or out of range.
409external_id_conflictexternalId already points at a different payload.
429rate_limitedOver 60 requests in the current minute. Honor Retry-After.