QR Default — Support Playbook
Standardized troubleshooting and responses for support tickets related to the QR default domain feature.
Scenario 1: “The QR code doesn’t work”
Diagnostic Steps
-
Check the QR URL
- Scan the QR with a QR reader app (not the demo). Does the URL look like
https://trymellon-landing.pages.dev/mobile-auth?session_id=...? - If the URL is malformed or missing
session_id, theinit()call may be failing. Check console errors on desktop.
- Scan the QR with a QR reader app (not the demo). Does the URL look like
-
Verify the origin is allowed
- The desktop app’s origin must be in Allowed origins in the dashboard.
- Common mistake: using
http://localhost:3000(backend) instead ofhttp://localhost:4173(frontend).
-
Check session TTL
- QR sessions expire after 5 minutes. If the user waits too long, the QR becomes invalid.
- Solution: refresh the page or call
init()again to get a new QR.
-
Check browser support
- WebAuthn requires: Chrome ≥ 67, Safari ≥ 14, Firefox ≥ 60, Edge ≥ 79.
- Mobile: iOS ≥ 16 (FaceID passkeys), Android ≥ 9 (FIDO2).
-
Check network
- Both desktop and mobile need internet access.
- If behind a corporate proxy, WebAuthn attestation might be blocked.
Standardized Response
“Please check the following:
- Your desktop app’s origin is listed in Allowed origins in the TryMellon dashboard.
- You’re scanning the QR within 5 minutes of it appearing.
- Your mobile browser supports WebAuthn (Chrome, Safari, Firefox on iOS 16+ or Android 9+).
- Both devices have internet access.
If the issue persists, share the browser console output from the desktop and we’ll investigate further.”
Scenario 2: “Many QR sessions are expiring / high error rate”
Diagnostic Steps
-
Check session volume vs. plan limit
- Dashboard → Settings → Plan limits → QR sessions / month.
- If at or near the limit, sessions may be throttled.
-
Check polling timeout
- The SDK’s
waitForSession()has a built-in timeout (typically 2–3 minutes). - If users consistently take longer, the session expires before approval.
- The SDK’s
-
Check mobile page loading time
- If the bridge page is slow to load, users may give up before approving.
- Test the bridge URL directly:
https://trymellon-landing.pages.dev/mobile-auth?session_id=test.
-
Check for retry storms
- If the client calls
init()repeatedly (e.g., on every render), it creates sessions that expire unused. - Solution: call
init()once and store the result.
- If the client calls
Metrics to Check
| Metric | Where to find it | Meaning |
|---|---|---|
| QR sessions created | Dashboard → Overview → API calls | Total init() calls |
| QR sessions completed | Backend logs | Sessions that reached completed status |
| QR sessions expired | Backend logs | Sessions that timed out (5 min TTL) |
| Completion rate | completed / created | Should be > 60% for healthy usage |
Standardized Response
“A high expiration rate usually means one of:
- Users aren’t scanning in time — the QR expires after 5 minutes. Consider showing a countdown or auto-refresh.
- Retry storms — if your code calls
init()on every render, it creates sessions that expire unused. Callinit()once and reuse the result.- Plan limits — check Dashboard → Settings → Plan limits to see if you’re near your QR session quota.
Can you share your QR session completion rate? (completed sessions / total sessions created)“
Scenario 3: “QR default not available on my plan”
Response
“QR default domain is included in the Growth ($79/mo) and Scale ($159/mo) plans. Your current plan doesn’t include this feature.
You can upgrade from Dashboard → Settings → Billing. After upgrading, the QR default indicator in Plan Limits will show ‘Enabled.’
If you’d like to try QR login before upgrading, the cross-device flow itself works on all plans — you just need to host your own
/mobile-authpage. See our Cross-Device Authentication guide.”
Scenario 4: “I want to use my own domain instead of the bridge”
Response
“You can switch to your own domain at any time:
- Deploy a page at
https://yourdomain.com/mobile-auththat handles the approval flow (see Cross-Device docs).- In the dashboard, set
primary_qr_base_urltohttps://yourdomain.com.- Add
https://yourdomain.comto Allowed origins.No user migration needed — existing passkeys continue to work.”
Escalation
If the above steps don’t resolve the issue:
- Collect: desktop browser console logs, mobile browser console logs, session_id (from the QR URL), timestamp.
- Check backend logs for the specific
session_id. - Escalate to engineering with all collected data.