How to send an event ticket as a link

The only moment a ticket has to work is at the door, on a crowded network, on a phone at 4% battery. Everything about how you build one follows from that.

A ticket link is an event ticket published at an address, so the holder opens it on their phone at the door without an app or an attachment.

It suits events where the door is checking who you are rather than enforcing a count. Knowing which kind of event you are running is the first decision.

A ticket on a phone. Event name, date and door time above a large QR code.
A ticket on a phone. Event name, date and door time above a large QR code.

This guide covers what belongs in the first screen, sizing the code so it actually scans, the signal problem every venue has, and where a page stops being sufficient.

Design for the door, not for the email

A ticket is read twice: once when it arrives, and once at the door under pressure. The second reading is the one that matters.

At the door the holder has seconds, one hand, and a queue behind them. Everything they need has to be on the first screen without scrolling.

<div class="ticket">
  <p class="event">Northern Type Conference</p>
  <p class="when">Sat 14 March &middot; doors 09:30</p>
  <p class="who">Priya Raman &middot; General admission</p>
  <img class="code" src="/t/qr-4471.svg" alt="Entry code 4471" width="420" height="420">
  <p class="ref">4471</p>
</div>

The reference number printed under the code is not redundant. When scanning fails, and it will, someone at the door types that number instead.

The code has to be scannable

Most door problems are the same problem: the code is too small, or the screen is too dim, or both.

.ticket .code { width: min(72vw, 420px); height: auto; display: block; margin: 1.2rem auto; }
.ticket { background: #fff; color: #000; }

Force a light background for the ticket even if the rest of your site supports dark mode. A dark-mode QR code with an inverted palette will not scan on many readers, and the holder will not know why.

Use SVG for the code where you can. It stays sharp at any size and weighs almost nothing. Background in SVG in HTML and on generating codes in HTML file to QR code.

Plan for no signal

A venue with five hundred people in it has a congested network. The moment the ticket is needed is the moment the page will not load.

There is no clever fix at the page level. The practical answer is procedural.

Tell holders, in the message that carries the link, to screenshot the ticket before they travel. Put the same instruction on the ticket itself. Then make sure whatever you scan with reads a screenshot as happily as a live page, because a scanner that rejects screenshots turns a good plan into a queue.

The same ticket saved as a screenshot in a phone photo library, ready for the door.
The same ticket saved as a screenshot in a phone photo library, ready for the door.

What a page cannot do

Be clear-eyed about this, because getting it wrong at the door is public.

A link can be forwarded. Two people can arrive with the same code. A page has no memory, so nothing marks a code as used, and nothing stops a screenshot circulating in a group chat.

Event type Ticket link Ticketing system
Free community event Fine Overkill
Invitation-only gathering Fine Overkill
Internal company event Fine Overkill
Workshop with a name list Fine Optional
Paid entry Not sufficient Required
Capacity limited Not sufficient Required
Allocated seating Not sufficient Required

The line is whether the door is enforcing a count. If it is, you need something that records which codes have been used, and that is a system rather than a page.

Changes after sending

The advantage a page has over an attachment shows up when something moves.

A venue change, a time change, a door opening earlier: edit the page and everyone holding the link has the correct details. A PDF ticket sent three weeks ago still says the old address, and some of your attendees will go there.

Put a short dated note on the ticket when something changes, so a holder who screenshotted the old version notices the difference.

A copy per person ✗ Each edit lives on one machine ✗ No way to merge the changes ✗ Nobody can say which is current ✗ The oldest copy keeps circulating One address ✓ Everyone opens the same page ✓ A correction is seen by all ✓ There is only one current version ✓ Forwarding shares the page, not a copy
The same document as a file and at an address, a revision later.

Put it at an address

Write the ticket as a page, make the code large on a white background, tell holders to screenshot it, and create a share link.

For anything paid or capacity-limited, use a ticketing system. For everything else, this is enough and it works on the phone they already have.

Questions people ask

Will a ticket link work if the venue has no signal?

Not on its own, and this is the thing to plan for. A venue at capacity is a venue with bad signal. Tell holders to screenshot the ticket in advance, and accept the screenshot at the door. If you scan codes, make sure your scanner reads from a screenshot as readily as from the live page.

How big should the barcode or QR code be?

Large enough to scan at arm's length from a phone at low brightness, which in practice means at least 60% of the screen width and high contrast. Most door problems are scanning problems, and most scanning problems are size and brightness problems.

Can someone forward the link and get two people in?

Yes, unless something at the door tracks which codes have been used. A page by itself cannot prevent duplication. For a free community event that rarely matters; for anything with capacity limits or paid entry, you need a ticketing system that marks codes as used.

So when is a ticket link enough?

Free events, invitation-only gatherings, internal company events, workshops with a name list at the door. Anywhere the door is checking a name rather than enforcing a count. Paid or capacity-limited events need real ticketing.

What about adding it to a phone wallet?

Wallet passes are a different format with their own signing requirements, and they are genuinely better for tickets because they work offline and surface at the right time. If you are running enough events to care, that is the upgrade path.

Keep reading