# WEB-098 — The QR landing page must be publicly reachable

> The page a QR code opens must be fetchable by anyone — no login, geo-gate, app-install wall or captive portal in front of it.

- **Rule ID:** WEB-098
- **Layer:** Website (`WEBSITE`)
- **Checks:** `QR destination fetch`
- **Severity:** BLOCKING — Breaking this rule gets the submission rejected outright.
- **When it bites:** Gates approval — get this wrong and registration is refused
- **How it is detected:** AI judgement over the crawled website or policy page
- **Fix type:** Fix the website — no form edit clears it
- **Required by:** Twilio, Bird
- **Applies:** Applies when consent was collected by QR code.
- **Canonical URL:** https://ekas.io/rules/10dlc/website/web-098/

## Why this rule exists

A QR code is scanned in a shop, on a table, at an event — and if the page behind it demands an app or a login, the consumer never opts in and the reviewer never sees the surface either. The captive-portal case is the one that catches careful operators: a code that works perfectly on the store Wi-Fi opens nothing at all for someone on a mobile network, and nobody tests it that way.

## How to fix it

Host the QR destination on a public https page on the brand domain, with no login, no app interstitial and no dependence on the venue network. Done when scanning the code on a phone with mobile data and no app installed shows the opt-in.

## Common mistakes

- Test the printed code, not the URL. A code printed from a draft, or one pointing at a short link whose account has lapsed, opens something entirely different from what was designed.

## Provider rejection codes

| Provider | Code | Resubmission allowed |
| --- | --- | --- |
| Twilio (gen2) | `30909` | yes |
| Bandwidth/DCA | `804` | yes |
