Documentation
Make codes that scan, and numbers you can trust
Printing guidelines
- Minimum size: 2 × 2 cm for close-range scans; roughly one tenth of the expected scanning distance in general.
- Keep a quiet zone (clear margin) of at least four modules around the code.
- Use dark modules on a light background with at least 4:1 contrast. Inverted codes fail on some older scanners.
- Add a logo only with error correction Q or H, and keep it under 30% of the code width.
- Prefer SVG or PDF for professional print; PNG is ideal for screens and office printers.
- Always test the final printed material with both an iPhone and an Android phone.
How analytics are calculated
- Scans: every request to a dynamic code’s short link, excluding detected bots and link-preview crawlers.
- Unique scans (estimate): one per code per visitor per UTC day, where a visitor is a salted, daily-rotating hash of network address and browser. Shared Wi-Fi undercounts; switching networks overcounts.
- Country: taken from the country header supplied by the CDN or proxy in front of the redirect service. Shown as “Unknown” when not available.
- Device, OS and browser are coarse categories derived from the user agent; the user agent itself is not stored.
- Raw scan events are kept for 90 days; daily aggregates are kept for reporting according to your plan’s history.
- Static codes cannot be tracked because they never contact our servers.
REST API
- All endpoints are versioned under /api/v1 and return JSON with a consistent { message, code, errors } error envelope.
- The web app authenticates with secure session cookies and CSRF protection. Rate limits apply to authentication, uploads, code creation and redirects.
- Dynamic redirects are served from /r/{code}; hosted files from /f/{token}.
- An OpenAPI description is published with the API at /docs/openapi.yaml.