Running your own ticketing: a guide for event organizers
FreeholdIP lets you sell tickets on your own payment account, deliver passes your fans hold on their phones with nothing to install, and run gates that answer in about a second with no wifi and no cell signal. You run it yourself. Ticket money goes straight to your bank. We never touch it.
The shape of it, in one minute
You create your event in the console: ticket types, prices, capacity. Fans buy from your public event page, paying through your own Stripe account, or through any checkout you already use. Either way, each buyer gets a link, and opening that link on their phone is their pass: a card with a moving code, and no app to install. The first time, that link also sets up their free profile, which takes about a minute: they pick a name and a password, and go straight to their pass. Nothing stands between a fan and the gate. Their card offers a backup afterwards, a recovery phrase that brings every pass back on a new phone, and if someone loses a phone before saving it, your console reissues the pass at the box office (Step 7). After that, the link simply opens and the card is there. At the event, your gate crew scans passes with an ordinary phone. A pass that is genuine and unused reads green. A screenshot of someone else's pass fails. A pass that already went through comes up ALREADY USED, with who punched it, when, and at which gate. And the gate keeps working when the connectivity dies, because it carries everything it needs.
What we never hold: your ticket revenue (it moves through your own payment account), and your attendees' personal information (there is no attendee database in our system to leak; we never collect one).
Try everything first: the live demo, end to end
Before any of the steps below, you can walk the whole thing as a visitor, with two phones and five minutes. No real money moves, and the profile you make on the fan phone is a free demo one you can throw away afterwards. There is a page that walks it step by step, with what to watch for at each one: freeholdip.com/demo. The short version:
- Phone one (the fan): open
freeholdip.com/b/DEMOFEST/events, pick a ticket and tap buy. The demo checkout runs in test mode: use card4242 4242 4242 4242, any future expiry, any CVC and ZIP. (A real card is declined. Nothing can be charged.) Then claim the pass and open it from the card: that live code is what the gate reads. - Phone two (the gatekeeper): open
freeholdip.com/b/DEMOFEST/gate?verify=pack&gate=DEMOFEST2026and point the camera at phone one's pass. Green ADMIT, no sign-in needed to scan. - To punch the ticket (and see ALREADY USED on a re-scan, plus the Undo), sign in as
the demo gate staffer: tap the crew sign-in on the gate page and use the demo credentials at
freeholdip.com/download/alex.txt.
Step 1: Sign in to your console
Your console lives at issue.freeholdip.com. You sign in with your organization's ID and password (and, on a new device, your sign-in file). Type the ID, not your organization's name: the ID is in your setup email and on your recovery sheet. If you type something else, the sign-in page tells you there is no organization with that ID; if your organization is set up but not approved yet, it says so, and we email you when it is. Because your organization runs events, signing in takes you straight to your Events & Ticketing page. Want to try everything in a sandbox first? Ask us for a demo login.
New here? Apply for the pilot at freeholdip.com/promoter-apply. If we approve you, we email you one setup link. It works once, for 14 days, and takes about five minutes: you choose a password and save two things, your organization's sign-in file and a recovery sheet with your 24 recovery words. We never see either one, so we cannot replace them; keep them safe. Then you sign in here. If you have a website, the setup page also shows one optional line you can add to its settings to show the organization is yours. Your events and tickets work the same without it.
Forgot your password, or lost your sign-in file? Your recovery words get you back in, on your own, any time. On the sign-in page, choose Forgot your password or lost your sign-in file? Restore with your 24 recovery words. Enter your organization's ID, the 24 words from your recovery sheet (you can paste all of them into the first box) and a new password, twice. Your browser checks the words against your organization's public key, makes you a new sign-in file, keeps it on that computer and signs you in. Save the new sign-in file when the page offers it: you need it to sign in on another computer. Your recovery words and your new password never leave the browser. If the words belong to a different organization, the page says so and makes nothing. Never send your recovery words to anyone, including us.
When you sign in, your own key also signs a one-year permission slip, so your tickets can be signed the moment a fan claims one, even while you sleep. The Ticketing card at the top of the Events & Ticketing page shows that it is connected and until when. The details are in The console, card by card: Ticketing.
Step 2: Connect your Stripe (to sell from your page)
On the console's Events & Ticketing page you'll find the Payments panel. It wants one thing: a restricted API key from your own Stripe account.
- In your Stripe dashboard: Developers → API keys → Create restricted key.
- Grant it exactly one permission: Checkout Sessions: Write. Nothing else.
- Paste it into the Payments panel and save. The panel shows a masked confirmation.
That restricted key can start a checkout and nothing more. It cannot read your balance, move money, or issue refunds. Sales made with it settle into your Stripe account and your bank on Stripe's normal schedule.
Sales tax on admission
Many places tax admission to an event. Texas, for example, treats it as a taxable amusement service, and plenty of festivals are already collecting it through whatever they sell on today. Stripe will not add tax to a sale unless it is asked to, so the Payments panel has a switch: Collect sales tax on ticket sales. Turn it on and each sale is calculated using your own Stripe Tax settings and registrations, with the tax landing in your account alongside the ticket money for you to remit. There is a tax-code box if you want to classify admissions explicitly; leave it blank and your Stripe default applies.
We do not hold a tax rate, decide what you owe, or touch the money. Whether tax applies, at what rate, and where, is set inside your Stripe account and is a question for you and your accountant. Enable and register Stripe Tax in your dashboard first, then buy one ticket yourself and look at the tax line before you announce the event.
The webhook (recommended, five more minutes)
The Payments panel shows your personal webhook address. In Stripe: Developers → Webhooks → Add
endpoint, paste that address, select the events checkout.session.completed,
charge.refunded, charge.dispute.created and charge.dispute.closed, and copy
the signing secret (it starts whsec_) back into the panel.
This lets Stripe confirm a sale even if the buyer closes their tab, and automatically deactivates the pass of a
refunded or disputed ticket that was never claimed.
A key box you leave empty when you save keeps the key already saved, so changing one setting never means pasting both keys again. Removing a key is its own button: Remove webhook secret, or Disconnect for both.
Step 3: Create your event
Same page, Create / update an event: give it a short event code (like
SPRINGFEST2027), a name, venue, dates, and overall capacity. Then add your ticket types: GA,
VIP, camping, early entry, whatever your event sells. Each type has:
- A price: give a type a price and a Buy button appears on your public event page, checking out on your Stripe. Leave the price blank and the type is not sold on the page.
- A buy link (optional): if you sell somewhere else (your own site, a box office page), put that checkout's address here and the page links to it instead.
- Capacity: per type, on top of the event total. Sold out is enforced automatically.
Pick the event's Refund policy too: All sales final (the default) or Refunds allowed. Buyers see it before they pay. Every box on the form, and every column of the ticket-type row, is explained in The console, card by card: Create / update an event.
Mark the event Listed when you're ready for it to appear on your public event page at
freeholdip.com/b/YOURBRAND/events. Until then it's invisible to the public while you set up.
Step 4: Sell tickets, three ways (use any mix)
- From your page: priced types sell right on your public event page through your Stripe. The buyer pays, lands on their pass claim automatically, and the pass is on their phone within the minute. Already have a website? Put a Buy tickets button on it that opens your event on this page: each event in your console has a Button for your website button that gives you the code to copy and paste into your site. It is one plain link, so you need nobody's help. Steps: Button for your website.
- Through your existing checkout: keep selling wherever you sell today. In the console, batch-generate claim links (one per ticket, single-use) and place one in each buyer's confirmation email. Their link becomes their pass the same way.
- At the door or box office: print claim links as QR cards. Hand one over with a cash sale; the buyer scans it and walks away with the pass on their phone.
Step 5: What your fan experiences
They tap the link. If it's their first FreeholdIP pass, their phone offers to create a free profile. It takes about sixty seconds, nothing to install, and the pass attaches to it. The pass is a card in their phone's browser with a code that expires seconds after it appears, which is why a screenshot of it is useless to anyone else. It works at the gate even when their phone has no signal. If they lose the phone, their recovery words restore everything. Fans never pay us anything, ever.
Step 6: Set up your gate
Give your crew authority
Punching tickets is recorded (date, time, gate, and the staffer's name, signed with the staffer's own key), so gate crew sign in. Each staffer creates a free profile (same sixty seconds as a fan) and gives you their profile address; from your console you issue them a Gate Staff credential. At the gate they sign in once per shift with their recovery phrase. Scanning needs no sign-in at all; only punching does.
Open the gate page
Your gate address is
freeholdip.com/b/YOURBRAND/gate?verify=pack&gate=YOUREVENTCODE. Send it to your crew as a
link or a QR code. Never ask anyone to type it. Open it once while the phone still has internet (that
morning is fine): the gate downloads its verification pack. From then on it works with no connectivity at all.
At the gate
- Point the camera at the fan's pass. Green ADMIT: genuine, right event, unused.
- Punch admits them and consumes the ticket. A two-minute Undo covers mis-taps.
- Scan the same pass again and it reads ALREADY USED: who, when, which gate. That's the pass-back trick handled.
- A pass for a different event says so. A tampered or fabricated pass fails verification.
- Your gate runs in one of two modes, chosen in the Gate setup panel on the event (each gate can differ, and you can switch a gate at any time; tickets never care which mode scans them): standard scan, where the gate reads the fan's rotating pass code, or the handshake challenge, where the gate itself shows a rotating code and the fan's phone must sign it live to prove it holds the pass's key. In handshake mode a photo or relayed copy of a pass fails even on first presentation.
- Running several gates? Tick lane mesh in the same panel and gates share punches with each other over the local network, still without internet.
- The Gate setup panel builds the full gate address with your choices, shows it as a QR for each gate phone to scan, and copies it with one tap. Never type a gate address by hand.
- The morning sync is automatic. Have each gatekeeper open their gate QR once while the phone still has any signal: at home over coffee is perfect. The page downloads everything it needs (a sold-out 3,000-ticket event is about the size of two photos) and the status chip confirms it: "as of 7:02 AM · 3,000 passes." From then on the gate runs all day with no service; tap the chip any time signal appears to refresh.
- Several gates? Give each one a name in the panel ("Main Gate", "VIP entrance"), scan that QR with that gate's phone, rename, and repeat. The name shows on the gate phone's screen and is stamped into every punch, so a used pass reads exactly which door admitted it and which staffer punched it. Who works a gate is simply who signs in on that phone.
- The local network (for the lane mesh, and for venues with no signal): bring a pocket travel router on a USB battery pack, a GL.iNet Mango (about $30) or Beryl (about $70) per gate cluster, and turn off its "client isolation" setting so the gate phones can see each other. The router's wifi does not need internet behind it: it is a private island whose only job is letting the gate phones talk to each other. At setup, join each gate phone to that wifi once (same as joining home wifi), then open the gate QR. A single gate skips all of this: one phone scans and punches with no network at all. A phone's hotspot works in a pinch, but some phones silently block device-to-device traffic. Entrances far apart at a big venue can be bridged with a point-to-point radio pair (Ubiquiti NanoStation class, roughly $50–100 per unit).
Step 7: Refunds, cancellations, and problems
Every event has a refund policy, set on the event form: All sales final (the default) or Refunds allowed. Buyers are told the policy before they pay: next to the price on your event page, and again beside the Pay button on the Stripe payment page.
Either way, you can still take a ticket back. Open the event's Tickets table. On an all-sales-final event the button reads Cancel ticket, for a chargeback, a mistake, or a duplicate. On a refunds-allowed event it reads Refund → revoke. Both ask you for a reason, then for a clear yes. The ticket stops working at every gate, its seat goes back on sale, and the reason is recorded with it. Neither button moves any money. To refund a buyer, refund the money in your Stripe (or wherever the sale happened) first, then revoke the ticket here. If the ticket was never claimed, the Stripe refund cancels it automatically, as long as your webhook is set up (Step 2), and it does the same when a buyer disputes the charge with their card. Issued the wrong thing? Cancel it and issue a fresh claim code. Every one of these actions is recorded and signed. The full walk-through is in The console, card by card: Tickets.
The event moves to a new date? Do not cancel anything. Use Reschedule on the event's card: every sold ticket is carried to the new date, and your event page says "Rescheduled to" the new date. See Reschedule.
Can a fan give a ticket to a friend? Yes, before it's claimed: a buyer who bought several shares each unclaimed ticket's link from their family page, and sharing a link IS the transfer: it's single-use, so whoever claims it first owns it, and the giver's phone marks it as spoken for. After a pass is claimed it belongs to that person's own profile and key; to move it, revoke it in your console and issue a fresh claim code to the new person. Ten seconds, fully recorded.
A fan arrives with a dead or broken phone. Open the Box office screen (the Box office button on the event's card, or the link on the gate page). Type the buyer's name (their email or phone also works), tap Reissue on the stranded pass, and say who is asking: the buyer with ID, the buyer by phone, or someone the buyer sent the ticket to (the ticket shows when it was sent and the name on the profile that claimed it, so you can ask). Their old pass stops working everywhere at once, and a fresh claim QR fills the screen for them to scan with any phone, borrowed or new. Ten seconds, one hand, and both actions are signed with the staffer's own name. Your gate crew can do this with their own gate-crew phrase; nobody needs your key. Details: The console, card by card: Box office. Nobody gets turned away for a battery.
Event-day checklist
- Each gate phone: open the gate link once while online (pack sync), then connectivity no longer matters.
- Each staffer: sign in with their phrase at shift start.
- Spot-check one pass: scan it green, punch it, re-scan it red, undo it. Thirty seconds, and you've verified the whole chain.
- Keep the printed QR card of the gate link taped inside the gate box for replacement phones.
- Sync one spare phone at the same morning coffee. A synced spare in the gate box turns every failure below into a thirty-second swap.
- Print the one-page crew sheet (PDF) for each gate box: what a volunteer does before the shift, what each screen means, and where to send a problem.
When something goes wrong at the gate
Plans that assume nothing breaks aren't plans. Here is what the crew does, written down before you need it.
A gate phone never synced its pack. The phone says so plainly ("no gate pack cached: connect once so this device can sync") rather than guessing. Two fixes: any signal, anywhere (a hotspot in the parking lot, one bar at the top of the hill) syncs it in seconds (a sold-out three-thousand-ticket event downloads in under two megabytes); or swap in the synced spare from the gate box. And note: a phone that has connectivity doesn't need a pack at all: it verifies live.
A gate phone dies mid-shift. Grab any phone: a spare, a volunteer's, a borrowed one. Scan the printed gate-QR card in the gate box, and it becomes that gate in seconds. The staffer signs in with their recovery phrase (their sign-in sheet lives in the gate box too) and punching resumes. Scanning needs no sign-in at all, so verdicts never stopped.
The lane mesh doesn't come up. Every gate keeps working alone: the mesh only shares punches between gates. What you lose while it's down is cross-gate pass-back detection: a pass punched at Gate A could still scan green at Gate B until any connectivity returns and the gates reconcile. Two honest mitigations while it's down: send each ticket type through one gate (GA through GA gates, VIP through VIP), or turn on the handshake challenge, which defeats shared and relayed passes at any gate regardless of the mesh.
A fan's phone is dead or broken. That's the box-office procedure in Step 7: on the Box office screen, find the buyer by name, revoke the stranded pass, hand a printed claim-QR card or show the new claim QR on the screen. Nobody gets turned away for a battery.
Everything at once. The console, from any phone or laptop with signal anywhere on or off site, is the source of truth: every sale, every claim, every punch. From it you can look up any fan's purchase, issue fresh codes, and re-arm anything. And the record survives whatever the day did to the hardware: every punch is signed, every action attributable, nothing lost.
The console, card by card
This part is the help for the Events & Ticketing page of your console (issue.freeholdip.com/events), the page you land on when you sign in. The top of the page shows your organization's name and a Sign out button. The help follows the cards in the order they appear on that page. Each card there has a small Help link that opens its part here. For each card you get what it is for, when to use it, the steps, and what your fans see.
- Ticketing
- Your organization
- Payments
- Fundraising campaigns
- Create / update an event
- Refund policy
- Ticket types, column by column
- Your events
- Generate claim codes
- Show codes
- Tickets: Cancel or Refund
- Gate setup
- Box office
- Reschedule
- Button for your website
Ticketing
What it is for
A ticket is a signed record, and it has to be signed the moment a fan claims it, even at 2 a.m. while you sleep. So FreeholdIP keeps a separate ticketing-only key that signs your tickets on your behalf. Your own key gives it permission by signing a one-year permission slip in your browser. The slip lets the ticketing key sign tickets and mark them refunded or used, for all of your events, and nothing else. It cannot change your name, your profile, or your identity, and it cannot touch money.
When to use it
Mostly, you do not. The permission slip is signed for you. When you save your first event, the console signs it right then. If your key is not unlocked at that moment, the card asks for your sign-in password once. After that, every time you sign in, the sign-in page checks it and signs a new one if it is needed. Your key is already unlocked there, so it costs you nothing. The sign-in page says so in one sentence. This card just tells you where things stand: "Ticketing is connected. Tickets are signed on your behalf; good until" a date one year out. Selling is not controlled here. Whether an event is live is its Listed setting and its ticket prices, on the event form.
Until ticketing is connected, the console will not generate claim codes and your event page will not sell. If the card ever says "Ticketing isn't connected yet", click Connect now and unlock your key if asked, or sign out and sign in again.
Renew
In the last 60 days before the "good until" date, the card offers Renew, and signing in renews it for you too. Click it and unlock your key if asked. Your key signs a new slip, good for one year.
Disconnect
Disconnect is guarded. It is refused while any ticket that was paid for is still unclaimed, because buyers must always be able to claim what they bought. The card shows how many, and the button stays off until those are claimed or canceled. Tickets fans already hold stay good. Signing in again connects ticketing again.
What your fans see
Nothing. If the connection ever lapses, a fan who opens a claim link is told that you haven't connected ticketing yet, that their code is still good, and to try again later. The code is not used up.
Your organization
What it is for
Showing what fans see about you on your event page (your name, your logo, your brand color, and your website), and setting your website right here.
When to use it
When you have a website of your own. Your event page then shows a "Back to" link to it, so a fan who came from your site can return to it.
Step by step
- Type your website address in Your website, for example
https://www.yourfestival.com. An address typed withouthttps://gets it added. - Click Save website.
- If your key is locked, a box asks for your sign-in password. The change is signed by your own key, in this browser.
- The result appears next to the button, for example "Saved. Your event page now shows "Back to yourfestival.com"."
Only an address that starts with https:// or http:// is accepted. To remove the link, empty the box and save.
What your fans see
A "Back to" link with your site's name at the top of your event page and again at the bottom. With no website saved, there is no link.
Payments
What it is for
It lets fans buy priced ticket types right on your public event page, paying through your own Stripe account. The money goes to your Stripe account and your bank. It never passes through FreeholdIP.
When to use it
Before you give any ticket type a price. You can skip it if you only sell through your own checkout or hand out claim links. It is also what the Fundraising campaigns card uses for gifts.
Step by step
- In your Stripe dashboard: Developers → API keys → Create restricted key. Give it one permission: Checkout Sessions: Write. Nothing else.
- Paste it into Stripe restricted key (rk_…).
- If admission is taxable where you run, and Stripe Tax is already enabled and registered in your dashboard, tick Collect sales tax on ticket sales. The Stripe tax code box is optional; blank uses your Stripe default. (More on tax in Step 2.)
- Click Save payment keys. The card shows Connected, whether the key is in test or live mode, and the last four characters of the key. It also shows your personal webhook endpoint address.
- Recommended: in Stripe, Developers → Webhooks → Add endpoint. Paste that address, select
checkout.session.completed,charge.refunded,charge.dispute.createdandcharge.dispute.closed, and copy the signing secret (it startswhsec_) into Webhook signing secret. Save again.
The key boxes empty themselves after every save, but an empty box keeps the key already saved. So you can change one setting, such as sales tax, without pasting your keys again. To remove a key on purpose, use Remove webhook secret or Disconnect.
No webhook secret? The card says so. Sales still complete when the buyer comes back to the page, but a refund or a card dispute in Stripe will not cancel the ticket for you; you cancel it yourself in Tickets.
Disconnect removes your keys, after a confirm. Priced ticket types stop selling until you save keys again.
What your fans see
A Buy button next to each priced ticket type on your event page. They pay on a Stripe payment page for your account. Your refund policy is stated next to the price and again beside the Pay button, and the tax line shows if you turned tax on.
Fundraising campaigns
What it is for
A public page for raising money. A campaign page shows a goal, a thermometer, your team fundraisers with their photos and stories, and a public feed of gifts. A general donate page is your standing Donate button. Gifts are paid on your own Stripe, through the keys in Payments.
When to use it
When your organization raises money alongside its events, or instead of them. Connect Payments first.
Step by step
- Type the Campaign name and the Goal in dollars, like 20000. Pick What kind of page: a campaign, or a general donate page. A general donate page can go without a goal. Tick Allow monthly gifts if you want them. A general donate page always allows monthly gifts.
- Under Team fundraisers, click + Add a fundraiser once for each person. Give each one a name and a personal goal in dollars. A photo and a short story are optional; the photo is resized to fit. Remove this fundraiser takes a row out. Leave the list empty for a page with no team.
- Under Fees and footer: Your processor rate, in percent, plus cents per gift, is for the "cover the fee" line; leave it blank for no fee line. Legal name shows in the footer. EIN is optional. Your organization's public email is where a donor asks to change or remove their entry on the feed.
- Click Preview. The page's name, goal, fee line, team and footer show right under the button. Nothing is published yet.
- Click Publish. The page's address shows right under the button. If something is missing, such as the name or the goal, the message shows there instead and nothing is published.
To change a page you already published, click Edit next to it in the list at the bottom of the card. The form fills in with what is on the page now. Change what you need and click Publish. The page keeps its address, and so does each fundraiser's page, even if you fix the spelling of a name.
If your office is connected to the platform, its Fundraising tab can publish the page for you, and you do not need this form at all. If your office saved the campaign as a file instead, open Advanced: Import from a file (exported from your office) and pick that file. It fills in the form; nothing is published until you click Publish.
The list shows every published page with how much it has raised, the number of gifts and team fundraisers, Open the page and Download the gift ledger (CSV). Close to new gifts (on a live page) stops new gifts, after you say yes in the card. The page stays readable.
What your donors see
The page, with its goal and the gift feed. Donors choose what to show on the feed. Their identity stays in your Stripe account, not on the page.
Create / update an event
What it is for
Setting up an event and the kinds of tickets it sells, and changing them later.
When to use it
Before you sell anything for the event, and whenever a detail changes. To move the event to new dates after tickets are sold, use Reschedule instead, so sold tickets move with it.
The boxes, one by one
- Event code: 2 to 40 letters and numbers, like
FALLFEST2026. It is printed on every ticket and is part of your gate address. A different code makes a different event. - Name and Venue: what fans read on your event page.
- Capacity: the most tickets for the whole event, across all types. Blank or 0 means unlimited. When it is reached, the event is sold out.
- Starts and Ends: a date like
2026-10-17, or a date and time with your offset from UTC, like2026-10-17 18:00-0500(that is Central Daylight Time). Tickets expire at the end: the gate refuses them after it, and claims stop. - Listed publicly? No, unlisted keeps the event off every public page while you set
up; claim links still work. Your brand page only shows it at
freeholdip.com/b/YOURBRAND/events. Brand page + site-wide events page also shows it onfreeholdip.com/events. - Refund policy: All sales final (the default) or Refunds allowed. Buyers are told before they pay: next to the price on your event page, again in their order review, on the site-wide events page, and beside the Pay button on the Stripe payment page ("All sales final. Tickets are not refundable." or "Refunds allowed per the organizer."). The policy also sets the button in the Tickets table. It never moves money by itself: refunds are made by you, on your own processor. When you type the code of an event you already made, the form loads that event's refund policy, so saving again cannot flip it by accident.
- Buy link: your own checkout page, if you sell somewhere else. A ticket type without a buy link of its own uses this one.
Ticket types, column by column
Each row is one kind of ticket. Click + add a type for another row. The boxes, left to right:
- Code: a short key such as
GAorVIP, letters and numbers. If you leave the first row's code blank, it becomesGA. - Display name: what the fan reads, such as "General Admission". Blank uses the code.
- Tier: a label carried on the ticket. Blank uses the code.
- Capacity: the most tickets of this type, on top of the event total. Blank or 0 means unlimited. When it is reached, that type is sold out.
- Price, in dollars: give a price and a Buy button appears for this type on your event page, selling on your Stripe (connect Payments first). The smallest price Stripe allows is $0.50. Blank means the type is not sold on the page.
- Non-deductible amount (nonprofits): the fair-market value of what the buyer receives, such as food, a seat, or entertainment. The price minus this amount is their tax-deductible gift, and the buyer sees that on the ticket line and on the receipt page. Blank means nothing is stated or claimed.
- Valid from (optional): the date, or date and time, this ticket starts working. The gate refuses it before then. This is how one event sells Saturday, Sunday, and full-weekend passes side by side. Blank means it works as soon as it is claimed.
- Admits: admits once (punch) means the gate punch uses the ticket up, and a second scan reads ALREADY USED. Event pass (re-scan until end) scans green every time until the event ends.
- Buy link: this type's own checkout page, if you sell it somewhere else.
Step by step
- Fill in the boxes and the ticket-type rows.
- Click Save event. The card says "✓ saved" and the event code, and the event appears under Your events. If something is wrong, the reason shows in red under the button.
To change an event later, type its code again and save. The form does not load the rest of the event's details (only its refund policy), so fill in every box and every ticket type the way you want the event to read before you click Save.
What your fans see
On a listed event: the name, date, venue, each ticket type with its price, a "valid" date on day passes, and your refund policy next to the price. One order holds up to 10 tickets.
Your events
Each event you saved gets its own card. The top line shows the name and code. Under it: the venue, the dates, "rescheduled from" if you moved it, whether it is listed, your buy link, and the refund policy. Then a count for each ticket type (claimed, out of its capacity) and how many tickets have been punched at the gate. Under that is a row of tools: a ticket-type picker, a "how many" box, and six buttons, explained below in order.
Above the cards, Button for your website: all your events makes one button that opens your whole event page. See Button for your website.
Generate claim codes
What it is for
Making claim links: one link per ticket, each good once. Opening one on a phone turns it into that fan's pass.
When to use it
When you sell somewhere other than your event page (put one link in each buyer's confirmation email), at the door (print them as QR cards), for guests and comps, and to replace a pass you canceled.
Step by step
- Pick the ticket type in the picker.
- Type how many links you want in the box next to it (1 to 1,000).
- Click Generate claim codes.
- The new links appear on the card under NEW claim links. They stay on screen until you leave or reload the page. Copy them now. You can always find them again with Show codes.
What your fans see
They open the link on their phone. The claim page shows the event and the ticket type. The first time, it sets up their free profile, which takes about a minute. Then the pass is on their phone. A link that was already used says so.
Show codes
What it is for
A list of every claim link you have made for this event: the link, its ticket type, and how many times it has been claimed out of how many it allows.
When to use it
To find a link again, to see which ones are still unclaimed, or to cancel a link nobody has claimed yet.
Step by step
- Click Show codes.
- To cancel an unclaimed link, click its revoke button. The card asks "Revoke code …? It can no longer be claimed. This cannot be undone." Click Yes, revoke this code, or Back to leave it. The link is then struck through, and from then on the list marks it REVOKED.
A link that was refunded in Stripe before anyone claimed it shows as REVOKED too, if your webhook is set up. A ticket that was already claimed is canceled in Tickets, not here.
What your fans see
A fan who opens a revoked link is told the organizer canceled that claim code.
Tickets: Cancel or Refund
What it is for
The box office. It lists every claimed ticket for the event: the ticket number (click it to open that ticket on the verify page), the type, the first characters of the holder's profile address, and when it was claimed. It is where you take a ticket back.
Cancel or Refund: which button you get
- On an All sales final event, the button reads Cancel ticket. Use it for a chargeback, a mistake, or a duplicate.
- On a Refunds allowed event, it reads Refund → revoke. Use it for a buyer you are refunding.
Both do the same thing to the ticket. Neither one moves money. To refund, refund the money on your own processor first (your Stripe dashboard, or wherever the sale happened), then revoke the ticket here.
Step by step
- Click Tickets.
- Find the ticket and click Cancel ticket (or Refund → revoke).
- Type the reason, up to 140 characters. It is required, and it is recorded with the ticket. Click Continue.
- The box asks, for example, "Cancel ticket …? It stops working at every gate, and its seat goes back on sale." Click Yes, cancel this ticket (or Yes, revoke this ticket). Back, at either step, closes the box and changes nothing.
- The row is struck through and reads canceled (or refunded) with your reason.
What your fans see
The pass no longer admits them: it scans red at the gate. A gate phone with signal sees it right away. A gate running offline sees it the next time it syncs its pack. Its seat goes back on sale.
To give that fan a ticket again, for example after a lost phone, use Generate claim codes and hand them the new link.
Gate setup
What it is for
Getting the gate address onto each gate phone without anyone typing it.
When to use it
Before the event, once per gate phone. The morning of the event is fine.
Step by step
- Click Gate setup.
- Type a Gate name, such as "Main Gate" (up to 40 characters). It shows on the gate phone and in every punch record.
- Tick handshake challenge if you want each fan's phone to prove it holds the pass's key. Photos and relayed copies then fail.
- Tick lane mesh if several gates should share punches over a local network.
- Scan the QR on screen with the gate phone's camera. Or click Copy gate address and send it.
- For the next gate, change the name and scan again with that gate's phone.
Everything about running the gate itself, from staff sign-in to the travel router, is in Step 6.
What your fans see
Nothing changes for them, except in handshake mode, where their phone answers a code the gate shows, to prove the pass is theirs.
Box office
What it is for
The staff screen for the gate, built for a volunteer with a line in front of them: one hand, a phone, at night.
Two jobs, each a couple of taps. Find a buyer and fix their ticket, and hand a walk-up a
pass. It lives at freeholdip.com/b/YOURORG/box-office; the Box office button
on each event's card opens it for that event, and the gate page links to it too.
Who can use it
Anyone with a gate-crew pass signs in with their own recovery phrase, the same one the gate scanner takes. You, signed in to this console, need no phrase. Nobody at the gate ever holds your key. Every reissue and every walk-up pass is recorded with the staffer's name and the time.
Find a buyer
- Type the buyer's name in the box marked Buyer's name. Their email or phone number works in the same box. The names come live from your own Stripe; we keep nothing about a buyer on our server.
- Each ticket on the order shows its state and one button. Show claim QR for a ticket they never claimed. Reissue for a pass that is claimed and live: the screen asks Who is asking? and the staffer picks one of three checks (the buyer with ID, the buyer by phone, or someone the buyer sent it to, matched by who sent it and the profile name). The check is recorded with the staffer's name. Then the old pass is revoked, a fresh single-use code is made for the same event and ticket type, and its claim QR fills the screen. The seat count does not change.
- A ticket already punched at the gate shows no button. It reads Used at Main Gate 7:15 pm by Sam, and your staffer decides. A canceled or refunded ticket says so, and has no button either.
Walk-up
- Tap Walk-up, pick the ticket type (the price shows on each button), and set how many, one to ten.
- Paid by card shows your event's buy QR. The fan scans it and pays on their own phone, on your own Stripe, exactly as an online buyer does.
- Cash or Comp makes that many single-use claim codes and shows their QRs one at a time, with a Next button. Cash goes in your own cash box. We are never in the money path.
Door list and weak signal
Just before doors open, tap Download door list on each box-office phone. The phone keeps the list of orders until twelve hours after the event ends, and shows Door list from 6:02 pm · 412 orders. If the signal drops, searching still works from that list and the screen says so. Reissue and walk-up need a connection, and the screen tells the staffer to check ID and use their judgment. Forget this list removes it from the phone.
What your fans see
A claim QR, which they scan with any phone to hold the pass. A reissued fan's old pass scans red at every gate from that moment.
Reschedule
What it is for
Moving an event to new dates while keeping every sold ticket good. A ticket carries its dates inside it, so simply editing the event's dates would leave sold tickets expiring before the new day. Reschedule moves the event and updates each sold ticket for the new dates. Fans keep the same pass.
When to use it
When the event moves, for weather or anything else. Your refund policy does not change: an all-sales-final ticket stays final, and it is good for the new date.
Step by step
- Click Reschedule on the event's card. The form opens with the current dates filled in.
- Type the New start and New end, in the same form as the event dates. The end must come after the start, and it cannot already be past.
- Leave Move single-day passes by the same number of days checked when the whole event moves. A Saturday pass then moves by the same number of days as the event. Uncheck it and every pass stays good from its current start date through the new end.
- Click Continue. The card asks, for example, "Move Fall Fest to 2026-10-24? 5 sold tickets will be carried to the new date."
- Click Yes, move the event. Go back or Cancel changes nothing.
- The card says how many sold tickets are now good for the new date. Refunded or canceled tickets are left as they were. They are not brought back.
If some tickets could not be updated just then, the card names them. Open Reschedule again and save the same dates to try those again. If tickets are sold and Ticketing is not connected, Reschedule refuses and says "Nothing was changed."
Ticket types move with the event, so a ticket sold after the reschedule carries the new dates too.
What your fans see
Your event page and the site-wide events page say "Rescheduled to" the new date. Their pass is good for the new date, with nothing for them to do. FreeholdIP keeps no list of your buyers, so we do not notify them: tell them yourself, the way you announce anything else.
Button for your website
What it is for
Connecting the website you already have to your event page here. A fan who clicks Buy tickets on your site lands on your event and can buy on the spot.
When to use it
Once the event is listed (see Create / update an event). An event that is not listed does not show on your event page, and the panel warns you if you open it too soon.
Step by step
- Click Button for your website on the event's card. For one button that opens all your events, use Button for your website: all your events above the cards.
- Change the Button text and the Button color if you like. The color starts as your brand color. The preview shows the button as it will look on a white page.
- Click Copy button code. "Copied" appears next to the button.
- On your website, add a block that takes HTML where the button should go: Embed code on Wix, a Code block on Squarespace, a Custom HTML block on WordPress. Paste the code into it and publish your site.
- For emails, texts, and social posts, click Copy link and paste the plain link instead.
- For posters and flyers, click Download QR code (PNG). The QR opens the same link.
The code is one plain link. It runs no code on your site and needs nothing installed. Event names with quotes or an ampersand are safe in it.
What your fans see
A click opens your event page in a new tab, so your own site stays open behind it. The page scrolls to your event and marks it "The event you picked", with its date, price, and refund policy, and "Rescheduled to" if you moved it. If your organization's website is on file with us, the page also offers a way back to it. You set it in Your organization. If the event has ended or is no longer listed, the page says so and shows everything else you have coming up.
What this costs
Your first event is free: you'd be an early deployment, and proving the system at a real gate is worth more to us than a fee. After that, pricing is a flat arrangement designed to cost less than the per-ticket platform fees you pay today. Fans never pay us. Verification is free for everyone, forever. That one is a founding rule, not a promotion.