Independent product studio · Swedenhello@karelialabs.com

Statamic addon Live

Karelia Tickets: sell event tickets from your Statamic site with Stripe Checkout, QR tickets and check-in on a phone

Most Statamic sites that run events send their visitors to a ticketing platform to buy, which takes a fee on every paid ticket and puts its own brand between you and your audience.

Version
1.0.0
Statamic
6.20 or later, Core and Pro
PHP
8.3 or later
Payments
Stripe Checkout, in your own Stripe account
Fees per ticket
None from the addon
Price
$99 per site, then $39 a year for updates
Get it on
Statamic Marketplace
Ticket form on an event page: early bird, standard, student and guest list tickets with prices and quantities, name and email fields, a €48.00 total and a Continue to payment button
One tag puts a ticket form on the event page

Karelia Tickets sells them on your own event page instead. Add ticket types to an event in the Control Panel and put one tag in the template. Buyers pay on Stripe Checkout and get QR tickets by email at once, and at the door staff scan them with a phone. The money goes straight to your own Stripe account.

What Karelia Tickets does

Ticket types per event

Early bird, standard, student or a free guest list, each with a price, how many there are, when sales end and the most per order. Free events work without Stripe.

One tag for the form

{{ tickets:form }} shows the ticket types with prices, what is left and a running total, and follows your site's font and colours. Use it as a pair for your own markup.

Stripe Checkout

Cards, Apple Pay, Google Pay and the other methods you switch on in Stripe, straight into your own account. Bank payments that arrive days later hold their tickets until they do.

Never sold twice

Tickets are held for 30 minutes while the buyer pays and go back on sale if they give up. The last seat cannot be sold to two people at once.

QR tickets by email

A printable ticket page with a QR code per ticket, and an email with the codes and the event as a calendar file. Codes are 8 letters and digits without look-alikes.

Check-in on a phone

Scan with the camera or type the code. Green for welcome, amber for already in, red for refunded or the wrong event. Each ticket gets in once, with undo, and several people can check in at the same time.

Refunds and free tickets

Refund an order through Stripe and its tickets stop working; refunds made in the Stripe Dashboard are picked up too. Resend tickets, or add free tickets for guests, press or staff.

Run the sale from the Control Panel

Sales per event and ticket type, orders, the attendee list as CSV and a dashboard widget.

A role for the door

With only the Check in attendees permission, door staff see the check-in page and the name on each scanned ticket, not your sales or the attendee list.

No per-ticket fees

The addon takes nothing per ticket. Stripe's normal card fees apply.

How it works

  1. Install. Run composer require karelialabs/statamic-tickets in your site's folder and attach the licence to the site in your statamic.com account.
  2. Connect Stripe. Put your Stripe key and webhook signing secret in .env, and add the webhook endpoint shown under Tools → Tickets in the Stripe Dashboard.
  3. Add ticket types. Open an event, switch on Sell tickets in its Tickets tab and add ticket types.
  4. Sell and check in. Put {{ tickets:form }} in your event template. At the door, open Tools → Check-in on a phone.

Screenshots

Ticket page after payment: three tickets with QR codes and ticket codes, and Print tickets, Add to calendar and Event page buttons
Buyers land on their QR tickets and get them by email
Check-in page on two phones: a green Checked in result with Undo, and an amber Already checked in result showing when the ticket was first checked in
Check-in on a phone: green to let in, amber if already in
Tickets page in the Statamic Control Panel with a Stripe test mode notice, tickets sold, orders and revenue for the last 30 days, and two events with sold, checked in and revenue
Sales, check-ins and revenue per event
An event under Tools → Tickets: tickets sold, checked in, revenue and orders, each ticket type with price, sold and left, and buttons for the attendee list (CSV), free tickets and check-in
Every ticket type with what is sold and what is left
Orders of an event with order number, buyer, tickets, total, Paid status and a menu on each order
Refund, resend or cancel from each order
Tickets tab on an event entry: the Sell tickets switch and a ticket type with name, price, tickets available, sales end, most per order and description
Ticket types live on the event itself

What each ticket type has

FieldWhat it does
NameFor example Early bird, Standard, Student
Price0 for free tickets
Tickets availableLeave empty for no limit
Sales endOptional date and time
Most per order10 by default
DescriptionShown under the name

From the Karelia Tickets 1.0 documentation.

How a purchase works

  • The buyer chooses tickets and enters their name and email. The tickets are held for 30 minutes.
  • They pay on Stripe Checkout.
  • Stripe sends them back to their ticket page and calls the webhook. Whichever comes first issues the tickets; the other changes nothing.
  • They get an email with the ticket codes, a link to the ticket page with the QR codes, and the event as a calendar file.
  • If they go back from Stripe without paying, the order is cancelled and the tickets go back on sale. Free tickets skip Stripe and are issued straight away.

From the Karelia Tickets 1.0 documentation.

Pricing

$99One site

Includes a year of updates. After that, updates are $39 a year, and the addon keeps working without them. Local and staging copies of your site need no licence.

Good to know

  • Paid tickets need a Stripe account, and email set up in Laravel (MAIL_MAILER) so the tickets can be sent.
  • Seats are not numbered: it sells general admission tickets, by type.
  • One currency per site. Changing it later does not convert old orders.
  • The price you set is what the buyer pays. The addon adds no tax on top.
  • Camera scanning needs HTTPS (or localhost) and permission for the camera. Typing the code always works.
  • The ticket page link in the email works without logging in: anyone with the link can see the tickets, like a paper ticket.
  • On sites with several servers, use a shared cache store (Redis, database) so the locks that stop overselling are shared too.

Privacy

Karelia Tickets runs on your own Statamic server. It has no telemetry and never contacts Karelia Labs.

Buyers pay on Stripe's own checkout page, in your Stripe account. Card details never reach your site.

Orders are JSON files in storage/statamic/karelia-tickets/orders, outside git, with the buyer's name and email, the tickets and the Stripe payment ID. They are kept until you delete them; deleting an order's file erases that buyer's data.

Ticket pages are reached only through a 40-character random link sent to the buyer, are marked noindex and are never cached.

The check-in scanner reads the camera image in the browser; the image never leaves the device.

FAQ

How do I sell event tickets on a Statamic site?

Install Karelia Tickets, connect Stripe, switch on Sell tickets on an event and add ticket types, then put {{ tickets:form }} in the event template. Buyers pay on Stripe Checkout and get QR tickets by email.

Are there fees per ticket?

Not from the addon. The money goes straight to your own Stripe account, and Stripe's normal card fees apply.

Can I run a free event?

Yes. Set the price to 0: free tickets skip Stripe and are issued straight away, and free events work without a Stripe account. You can also add free tickets for guests, press or staff from the Control Panel.

How does check-in work?

Open Tools → Check-in on a phone, choose the event and press Scan with camera, or type the code. Each ticket gets in once, Undo reverses a check-in, and several people can check in at the same time.

Can two people buy the last ticket?

No. Tickets are held while the buyer pays, under a lock per event, so the last seat cannot be sold twice. On several servers, use a shared cache store such as Redis.

How do refunds work?

Refund order refunds the full amount through Stripe and the tickets stop working. Refunds made in the Stripe Dashboard are picked up by the webhook too. A partial refund keeps the tickets valid.

Does it sell numbered seats?

No. It sells general admission tickets, by type.

Can I try it before I go live?

Yes. Local, development and staging copies need no licence, and with an sk_test_ key everything runs in Stripe's test mode.

Is it affiliated with Statamic or Stripe?

No. It is an independent addon by Karelia Labs, sold on the Statamic Marketplace.

Related tools

More from Karelia Labs

Updated