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.
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:
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=darkNo 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)
let url = RetentionFlow.qrCodeURL(for: .waitlist) // PNG, auto theme
// AsyncImage(url: url) { $0.resizable().scaledToFit() } placeholder: { ProgressView() }2. A fetched image
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
// "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)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:
// 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.