---
title: "QR codes"
description: "Generate QR codes for your documents that encode durable short-ID links and survive slug renames."
canonical: "https://everypage.co/docs/sharing/qr-codes"
plan: "free"
last-updated: "2026-08-26"
---

# QR codes

EveryPage generates QR codes for any document on any plan. Scan the code to open the document in your browser, and the view is attributed to the `qr` source in your readership analytics. If you just want to turn a document into a scannable code in one step, the [PDF to QR code tool](https://everypage.co/pdf-to-qr-code) does exactly that from a single upload — no account required.

## What the QR encodes

The QR code contains your document's **durable short-ID URL** with `?via=qr` appended. This attribution parameter ensures that views triggered by scanning the code appear as the `qr` source in your [audience breakdowns](https://everypage.co/docs/readership/audience-breakdowns), distinct from direct link clicks or other referral sources.

The code never encodes your [vanity slug](https://everypage.co/docs/sharing/vanity-slugs). A printed QR code cannot be reissued, but slugs can be renamed, so a code built on a slug would break the first time the slug changed. Encoding the short ID means a rename does not touch it. (Documents without a short ID — those created before short IDs existed — get their UUID instead.)

## Durability across changes

Because the QR links to the durable short-ID form, it also survives [content replacement](https://everypage.co/docs/library/dynamic-links). When you swap out a document's contents, every printed code keeps working — the short-ID always resolves to the current document behind that link.

The host in the encoded link is not fixed, however. If your account has an active [custom domain](https://everypage.co/docs/sharing/custom-domains) at the moment the code is generated, the code encodes the short-ID link on that domain. A code printed while a custom domain was active therefore depends on that domain staying verified and on Pro — if the domain is removed or the plan drops below Pro, the branded host stops serving and only codes generated on `everypage.co` keep resolving.

## Downloading and using QR codes

Open a document's Configure & Share page, expand the Share panel and choose "QR Code". The modal shows the code and offers "Download QR Code", which saves it as a PNG. The button is available before a document is claimed, so anonymous uploaders can take a code away with the link.

The image is generated per request at `/api/files/{id}/qr-code` and served with `Cache-Control: public, max-age=86400`, so consumers that hotlink it (notably Notion databases, which re-request the image on every table render) cache it for a day rather than re-fetching each time.

The same handler is also mounted at `/api/files/{id}/qr-code.png`. It serves an identical image and headers; some consumers — including Notion, which renders an external URL as an image thumbnail only when the path carries an image extension — need the extension. Both forms encode the durable short-ID URL.

The same code is available to integrations at `GET /api/v1/files/{id}/qr-code` with an API key holding the `files:read` scope.

## Attribution and analytics

Scans report `source: qr` in your readership data, so codes on printed material can be separated from direct link visits in the source breakdown. Attribution comes from the `?via=qr` parameter in the encoded link, so it applies to anyone who opens that exact URL — including someone who copies it out of a scan rather than scanning it themselves.

## Related

- [Share links and short IDs](https://everypage.co/docs/sharing/share-links-and-short-ids) — how short-ID links work
- [Vanity slugs](https://everypage.co/docs/sharing/vanity-slugs) — custom URL paths and why they do not appear in QR codes
- [Dynamic links](https://everypage.co/docs/library/dynamic-links) — content replacement and link durability
- [Audience breakdowns](https://everypage.co/docs/readership/audience-breakdowns) — view your readership by source
