QR codes

Every flow gets a polished QR code out of the box — rounded “dot” modules with your app's logo in the centre, auto-matched to the flow's colour scheme. Download or copy it from the dashboard, or pull it into your app with one SDK call. It encodes the flow's public URL, so scanning opens the live page.

What you get

  • A rounded, logo-in-the-middle QR — no design work, no third-party generator.
  • Auto-themed: a dark-scheme flow gets a dark QR, a light flow a light one. Override per download.
  • High error-correction so the centre logo never breaks scannability.
  • PNG (print / share) and SVG (vector, infinitely scalable) — both self-contained, logo inlined.
Full customisation (colours, dot shapes, gradients) is coming. For now the style is fixed and the only knob is light / dark / auto.

From the dashboard

Open any flow's editor and tap QR code in the toolbar (next to Preview draft). You get a live preview, a light / dark / auto toggle, and three actions: PNG and SVG downloads, and Copy image (drops a PNG straight onto your clipboard for a deck or doc).

The image endpoint

Both the dashboard and the SDK are thin wrappers over one public, cacheable endpoint. Hit it directly if you're integrating from anywhere else:

text
GET https://appmate.cloud/api/public/qr/{appSlug}/{flow}

  flow     cancel | waitlist | feedback | report | contact
           onboarding | wishlist | link | referral
  format   png (default) | svg
  size     128–2048   (px, PNG only; default 512)
  theme    light | dark         (default: matches the flow's colorScheme)
  download 1                    (sets a Content-Disposition filename)
  code     {referrerCode}       (referral only — encodes that invite link)

# Examples
https://appmate.cloud/api/public/qr/my-app/waitlist
https://appmate.cloud/api/public/qr/my-app/cancel?format=svg
https://appmate.cloud/api/public/qr/my-app/referral?code=K7Q4-R9XP&theme=dark

No auth required — the QR only encodes a public page and your public logo. Responses are cached at the edge.

In your app (iOS / macOS SDK)

The SDK builds the URL from your configured appSlug — three ways to present, from lowest to highest level:

1. A ready URL (use with AsyncImage)

swift
let url = RetentionFlow.qrCodeURL(for: .waitlist)        // PNG, auto theme
// AsyncImage(url: url) { $0.resizable().scaledToFit() } placeholder: { ProgressView() }

2. A fetched image

swift
if let image = await RetentionFlow.qrCode(for: .cancel, size: 600) {
    imageView.image = image    // UIImage on iOS, NSImage on macOS
}

3. A drop-in SwiftUI view

swift
// "Scan to join the waitlist"
RetentionFlowQRView(flow: .waitlist)
    .frame(width: 220, height: 220)

// Referral — encode a specific user's invite link:
let code = await RetentionFlow.referralShareCode(userId: user.id)
RetentionFlowQRView(flow: .referral, referralCode: code)
Every method takes theme: .auto | .light | .dark. For .referral, pass the user's referralCode so the QR is their personal invite — otherwise it encodes a generic preview.

Via MCP / AI agents

The get_qr_code tool returns the public PNG + SVG URLs for a flow, so an agent can drop a QR into a page or message:

json
// get_qr_code  →
{
  "app": "my-app",
  "flow": "referral",
  "pngUrl": "https://appmate.cloud/api/public/qr/my-app/referral?format=png&size=1024",
  "svgUrl": "https://appmate.cloud/api/public/qr/my-app/referral?format=svg"
}

See the iOS & macOS SDK for the full method list and the referral program for share codes.