Routing: one code, many destinations
Every scan is routed at the edge, before any redirect happens. There are two ways to write the logic · the visual flow canvas in the dashboard, or the JSON rules object over the API · and one set of gates that runs before either.
Order of evaluation
Every scan walks the same corridor, in this order:
The gates (expiry, geo gate, password, cap) exist to refuse a scan; routing exists to pick where an accepted scan goes. Anything unmatched falls through to the link's main URL · routing can never strand a scanner.
The flow canvas
A flow is a node graph: a start node, condition nodes that branch, destination nodes that end. You drag it together in the dashboard, watch the simulator walk a pretend scan through it, and publish. Up to 50 nodes and 20 branches per condition · which in practice is a wall of logic no rules object stays readable at.
| Condition | Routes on | Branches |
|---|---|---|
| device | The scanning device | iOS · Android · desktop (opt-in) · else |
| geo | Country, read at the edge | your country groups · else |
| region | State or region within a country | your region groups · else |
| city | City | your city groups · else |
| lang | Browser language (Accept-Language) | your language groups · else |
| schedule | Time windows: recurring (days + HH:MM in a timezone) or absolute ISO ranges | first matching window · else |
| when | Before or after a single date | after · else |
| split | Weighted A/B split · sticky keeps a visitor on one variant, random rerolls | your variants · no else, it always picks |
| scans | How many times the link has been scanned | threshold branches · else |
| source | Where the visit came from: utm_source, utm_medium, utm_campaign, referrer | your value groups · else |
- Destinations can be inline URLs or entries from your resource repository · point ten flows at one saved destination and re-point them all in one edit.
- Starter templates cover the common shapes: app-store split, opening hours, A/B test, by-country, by-language.
- Each condition costs 1 credit, once, when added · the same price as a rules-object key. Removing is free and not refunded.
- A link that routes with a flow refuses a raw rules object over the API with
400· one brain per link. Gate rules still apply alongside a flow.
The rules object
The same routing, written as JSON for API and MCP clients: device, geo, language, schedule, A/B split, expiry, plus the gates. The full annotated example with every key lives in the API reference; it is machine-checked against the billing list, so if a key is billable it is documented there.
The gates
- Password · the edge shows a gate form; the password is hashed in your browser and only the SHA-256 hash is ever stored.
- Geo gate · allow-list or block-list of countries, with an optional elsewhere-URL for refused scanners. Runs before the password gate.
- Scan cap · a hard ceiling; past it, scanners see the paused page.
- Expiry · after the date, scanners 302 to a fallback URL or see an expired notice. Checked before every other rule.
- Preview interstitial · an anti-quishing, verified-brand "you are heading to…" page with optional auto-continue, for codes in hostile environments (posters, parking meters).