How to Build a Ticketing Platform with Stripe — Architecture Guide for 2026
Building a custom event ticketing platform on Stripe in 2026 is a focused 6-12 week engineering project for a single-promoter platform, or 12-20 weeks for a multi-tenant white-label platform supporting multiple promoters. The core architecture is Stripe Payment Element for on-page checkout, Stripe Webhooks for reliable payment confirmation, server-side ticket generation with signed QR codes, a door-scanner app for event-night validation, and email/SMS delivery via Resend and Telnyx. The cost typically ranges $25,000-$60,000 for focused builds and $80,000-$150,000+ for multi-tenant platforms — which pays back fast against Eventbrite's 5-10% effective fees on every ticket sold.
This article walks through the architecture, the gotchas, and the operational realities — drawn from the Aftershock Promotions Platform we ship for combat sports events.
Why operators build custom ticketing instead of using Eventbrite
The math is straightforward. Eventbrite charges:
- 3.7% + $1.79 per ticket
- Plus 2.9% credit card processing fee
- Effective rate: typically 5-10% of ticket revenue
For a venue selling 500 tickets at $50 each ($25,000 gross), that's $2,500-$3,000 to Eventbrite. Across a year of events, that's $30,000-$50,000 — money a custom ticketing platform would have paid for several times over.
Beyond fees, the operational arguments:
Brand control. Buyers stay on your domain through the entire purchase flow. The confirmation email is from you, not Eventbrite. The ticket design matches your brand. The event page is yours.
Data ownership. You own the buyer database. Eventbrite owns yours when you use them. For repeat events, this is the difference between owning your audience and renting it.
Operational flexibility. You can sell tickets through Stripe Payment Element on your event page, on a kiosk at the venue, embedded in a partner site, via a Slack bot — wherever your buyers are. Eventbrite forces them to Eventbrite's domain and Eventbrite's flow.
Door scanning that integrates with everything else. A custom door-scanner app can do walk-up sales, look up will-call, transfer tickets, and reconcile to the same backend that handled online sales. Generic ticketing platforms force you to use their door scanner or pay for a separate add-on.
The architecture
A working ticketing platform on Stripe has these components:
1. Event and ticket data model
At minimum:
```
Event
- id, name, description, venue, start_time, end_time, image_url, status
TicketTier
- id, event_id, name (GA / VIP / Front Row), price_cents, quantity_available, quantity_sold
Order
- id, buyer_email, buyer_name, total_cents, stripe_payment_intent_id, status, created_at
Ticket
- id (UUID), order_id, tier_id, qr_signature, status (active / used / refunded), used_at, used_by_scanner_id
```
The Ticket table is the canonical record. Each row corresponds to one physical entry to the event. The QR code encodes the ticket UUID plus a cryptographic signature.
2. On-page checkout with Stripe Payment Element
The buyer experience: event page → "Buy Tickets" button → ticket tier selection → checkout form on the same page → confirmation. No redirect away from your domain.
The implementation:
- Buyer selects tickets (frontend captures tier and quantity)
- Frontend calls your backend to create a Stripe PaymentIntent (
/api/create-payment-intentwith order details) - Backend creates an Order record in pending state, creates a Stripe PaymentIntent with the order total, returns the
client_secretto the frontend - Frontend mounts Stripe Payment Element with the
client_secret - Buyer fills in card details, clicks Pay
- Stripe processes the payment, returns success/failure
- Stripe Webhook fires
payment_intent.succeeded(this is the source of truth — not the frontend success callback) - Backend receives webhook, creates Ticket records, generates QR codes, sends confirmation email + SMS
The critical pattern: the webhook is the source of truth for payment completion, not the frontend callback. Frontend callbacks can fail (closed tab, network issue, malicious user) — webhooks are reliable and Stripe retries them on failure.
3. QR code generation and signing
Each ticket gets a unique UUID and a cryptographic signature. The signature prevents forgery — even if a malicious user generates fake UUIDs, they can't produce valid signatures without the server-side secret.
A simple pattern:
```
ticket_id = uuid4()
signature = hmac_sha256(SERVER_SECRET, ticket_id)
qr_payload = f"{ticket_id}.{signature}"
qr_image = qrcode.make(qr_payload)
```
At scan time:
```
ticket_id, signature = qr_payload.split('.')
expected_signature = hmac_sha256(SERVER_SECRET, ticket_id)
if signature != expected_signature: REJECT (forged QR)
ticket = db.get(ticket_id)
if ticket.status != 'active': REJECT (already used / refunded)
ticket.status = 'used'
ticket.used_at = now()
db.save(ticket)
ACCEPT (let them in)
```
This works for single-server deployments. For multi-server / distributed deployments, the validation needs distributed locking to prevent the same ticket being scanned twice on different scanners simultaneously.
4. Email and SMS confirmation delivery
When the webhook fires payment_intent.succeeded, the backend triggers:
Email (via Resend, SendGrid, or Postmark):
- Order confirmation
- Each ticket attached as a PDF with embedded QR code
- ICS calendar invite for the event
- Refund policy summary
- Door scan instructions
SMS (via Telnyx, Twilio, or MessageBird):
- Short confirmation message
- Link to the buyer's order page (where they can re-download tickets if they lose the email)
- Optional: a reminder SMS 24 hours before the event
The ICS calendar invite specifically is high-value — buyers who add the event to their calendar are dramatically more likely to actually show up.
5. Door-scanner app
A web app (or native mobile app) running on the venue's staff devices at event night. Core features:
Scan tickets:
- Camera-based QR scanning
- Validate signature against backend
- Check ticket status (active / used / refunded)
- Mark as used, record scanner ID and timestamp
- Show "ACCEPT" or "REJECT" with reason
Door sales (walk-up tickets):
- Sell tickets at the venue via tokenized card-on-file (Stripe Payment Element or Stripe Terminal)
- Issue tickets that work the same way as pre-sold tickets
- Print or email the QR code on demand
Will-call lookup:
- Search by name, email, or order number
- Show all tickets associated with a buyer
- Mark as used on physical pickup
Offline mode:
- Events often have spotty venue Wi-Fi
- Scanner queues scans locally when offline
- Syncs to backend when connectivity returns
- Local validation against last-known-good ticket database
Analytics:
- Entry rate over time
- Tier breakdown
- Peak entry times
- Refund and dispute tracking
The Aftershock Promotions Platform's door-scanner page handles all of this from one persistent web app running on staff iPads on event night.
6. Admin dashboard
For the promoter's operational side:
- Event creation and management
- Tier pricing and inventory
- Order history and search
- Refund issuance (one-click via Stripe API + automatic QR invalidation)
- Buyer database and email export
- Sponsor and comp ticket management
- Post-event reconciliation reports
7. Stripe Webhook handling
Webhooks are the source of truth for payment events. The patterns that matter:
Idempotency: webhooks can be delivered multiple times. Your handler must be idempotent — receiving the same webhook twice should not create duplicate tickets.
Signature verification: every webhook from Stripe is signed. Verify the signature on every request to prevent spoofed webhook calls.
Asynchronous processing: webhook handlers should respond to Stripe quickly (under 30 seconds) and process the actual work asynchronously. Don't generate QR codes and send emails inline in the webhook response — queue the work and return 200 immediately.
Retry-aware logic: if your async work fails, Stripe will retry the webhook. Make sure the retry doesn't create duplicate tickets or duplicate emails.
Multi-tenant ticketing with Stripe Connect
If you're building a platform that hosts events for multiple promoters (white-label / platform-aggregator model), Stripe Connect Express is the right architecture.
The flow:
- Promoter signs up on your platform
- Connect Express onboarding flow walks them through providing their banking details, identity verification, business information
- Stripe approves the connected account
- Promoter creates events on your platform
- Buyers purchase tickets on your platform with checkout flowing through the promoter's connected account
- Stripe routes funds — promoter receives their portion, your platform takes a platform fee
- Stripe handles 1099 issuance for the promoter's tax reporting at year end
The platform fee is configurable. A flat per-ticket fee ($1-$5) is common. Percentage fees (1-3%) work for higher-end events. The Aftershock Promotions Platform uses a flat $3 per-ticket platform fee on the multi-tenant tier.
What actually breaks at scale
Things that work fine for small events but break for high-volume events:
On-sale rushes. When tickets go on sale for a hot event, you get a thundering herd. 10,000 buyers hitting the page simultaneously will overwhelm a single-database backend. Mitigations: queue-based virtual waiting rooms (buyers see "you're in line, position 3,247 of 8,000"), CDN-cached event pages, separate inventory-reservation services that hold a tier for the buyer for 10 minutes during checkout.
Inventory accuracy. When 50 buyers simultaneously try to buy the last 10 tickets in a tier, you need atomic inventory decrement at the database level. Without it, you'll oversell. Pattern: UPDATE ticket_tiers SET quantity_sold = quantity_sold + ? WHERE id = ? AND quantity_sold + ? <= quantity_available RETURNING * — atomic decrement that fails if it would oversell.
Refund/dispute volume. A real ticketing operation deals with refunds, chargebacks, transfers, and complaints constantly. Build the admin tooling for this from day one. Don't make staff dive into raw Stripe dashboards to issue refunds.
Event night reliability. When the venue's Wi-Fi fails 20 minutes before doors, you need offline mode in the door scanner. When the backend goes down at 7:45 PM, you need graceful degradation that lets staff keep scanning and reconcile after. Plan for failure.
What it actually costs
- Focused single-promoter ticketing platform: $25,000-$60,000 build, 6-12 weeks
- Multi-tenant ticketing platform with Stripe Connect: $80,000-$150,000+ build, 12-20 weeks
- White-label customer-deployed ticketing: similar to multi-tenant plus per-deployment customization
- Ongoing maintenance: $2,000-$6,000/month depending on complexity
The Aftershock Promotions Platform is a real example: Next.js app, on-page Stripe Payment Element checkout, QR-coded tickets with email delivery, full door-scanner app, event admin dashboard, multi-tenant capability for hosting other promoters' events at a flat $3 per-ticket platform fee.
When upfront cost is the constraint
A custom ticketing build pays for itself fast in fee savings, but the upfront cost is real money. Aftershock Network's Operator Model structures the engagement with a small down payment and monthly installments over an agreed term, with the build proceeding so your first events run on the new platform while you're still paying off the development cost.
More about the Operator Model →
How to start
If you're seriously evaluating custom ticketing:
- Single promoter, one event series: focused build, 6-12 weeks. Start with the architecture conversation.
- Multi-tenant aspirations (hosting other promoters' events for a platform fee): Stripe Connect-based build, 12-20 weeks. Start with a scoping call on the business model.
- Combat sports specifically: Aftershock Promotions Platform can deploy for your operation with combat-sports-specific features (fight card management, weigh-in tracking, sanctioning paperwork) that generic ticketing doesn't include.
Every Aftershock Network ticketing engagement starts with a real conversation about your events, your operational reality, and what's actually breaking on your current platform.
Frequently asked questions
How much does it cost to build a custom ticketing platform on Stripe?
A focused custom ticketing build typically runs $25,000-$60,000 and ships in 6-12 weeks — covering on-page checkout, ticket issuance with QR codes, email/SMS confirmation delivery, door-scanner app, basic admin dashboard, and the platform fee model. Larger multi-tenant or white-label platforms run $80,000-$150,000+. Compared to Eventbrite's fees (3.7% + $1.79 per ticket plus 2.9% credit card processing — typically $5-$10 per $50 ticket), the build pays for itself fast at any meaningful volume.
What Stripe products do I need for a ticketing platform?
Core: Stripe Payment Element for on-page checkout, Stripe Webhooks for payment confirmation handling, Stripe API for refunds and order management. Optional: Stripe Connect if the platform sells tickets on behalf of multiple promoters (white-label / multi-tenant model), Stripe Tax for automatic sales tax calculation, Stripe Radar for fraud prevention. Most platforms skip Stripe Checkout (the redirect-based checkout) in favor of Payment Element because keeping the buyer on your domain converts substantially better.
How do you handle QR-coded tickets securely?
The QR code encodes a signed ticket identifier — typically a UUID plus a cryptographic signature derived from a server-side secret. At door scan time, the scanner validates the signature, checks the ticket hasn't already been scanned (prevents duplicate use), verifies the ticket belongs to the current event, and records the scan. The signature prevents forgery (someone can't generate fake QR codes), and the scan-once enforcement prevents the same ticket being used twice.
What about the door-scanner app — what does it need to do?
At minimum, scan QR codes via camera, validate them against the ticketing backend in real-time, mark tickets as used, handle offline mode gracefully (events often have spotty venue Wi-Fi), and queue scans for sync when connectivity returns. Beyond minimum, useful features include door sales (sell tickets at the gate to walk-ups via tokenized card-on-file), will-call list lookup, ticket transfer detection (when a buyer gives their ticket to someone else), and basic analytics (entry rate, peak times). The Aftershock Promotions Platform's door-scanner page handles all of this.
How do you handle refunds and disputes for ticket sales?
Refunds are issued via the Stripe API, which handles the actual money movement back to the buyer's card. Your platform needs to also invalidate the QR code (mark it cancelled so it won't scan at the door) and notify the buyer. Disputes (chargebacks) are handled through Stripe Radar and Stripe's dispute workflow — your platform should record enough evidence at ticket purchase time (IP, user agent, purchase timestamp, delivery confirmation) to defend chargebacks. For ticketing specifically, your refund policy should be clear at purchase time and recorded in the buyer's confirmation email.
Should I use Stripe Connect for a ticketing platform?
Yes if you're building a multi-tenant ticketing platform that hosts events for multiple promoters (white-label or platform-aggregator model). Stripe Connect Express handles merchant onboarding, payment routing, platform fee collection, and payout distribution — all the things you'd otherwise have to build yourself. If you're a single promoter running your own events on your own platform, skip Connect and use a standard Stripe account.
What about email and SMS delivery for ticket confirmations?
Use Resend (or SendGrid, Postmark) for email — confirmation emails with the QR code as an attachment, plus an ICS calendar invite so the event shows in the buyer's calendar. For SMS, Telnyx, Twilio, or MessageBird handle the delivery. Both should be triggered by Stripe webhook on successful payment, not by client-side JavaScript (which can fail or be tampered with). The pattern: Stripe webhook arrives → backend creates ticket records → backend generates QR codes → backend triggers email + SMS delivery.
Related answers
Building event ticketing where Eventbrite's fees are killing you?
Aftershock Network builds custom ticketing platforms — on-page Stripe checkout, QR-coded tickets, door-scanner apps, and the operational tools that make event night actually work. Tell us about your events and we'll show you what's possible.
Start a conversation →