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, no app, no account to make, no password. 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).
Step 1: Sign in to your console
Your console lives at issue.freeholdip.com. You sign in with your organization's identity name and password (and, on a new device, your keystore file). Don't have an organization identity yet? Apply at freeholdip.com/issuers; approval sets up your identity and your brand page. Want to try everything in a sandbox first? Ask us for a demo login.
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.
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 and
charge.refunded, 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 ticket that was never claimed.
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.
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.
- 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 refreshes every few seconds, 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.
- Add
&challenge=1to the gate address and each fan's phone must prove, live, that it holds the pass's key; a photo or relayed copy of a pass fails even on first presentation. - Running several gates? Add
&mesh=1and gates share punches with each other over the local network, still without internet.
Step 7: Refunds and problems
Refund the money in your Stripe (or wherever the sale happened) as you normally would. If the pass was never claimed, the webhook deactivates it automatically. If it was claimed, revoke it from your console and it dies at every gate. Issued the wrong thing? Revoke and issue again; reinstating is one click too. Every one of these actions is recorded and signed.
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.
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.