---
title: Events
description: Ticketed events with Stripe checkout, multiple tier types, QR check-in, and attendee management.
icon: material/calendar-star
status: new
tags:
  - guide
  - admin
  - events
  - payments
---

# Events

Run paid, free, or donation-based events end-to-end — from creating an event with multiple ticket tiers, to Stripe-backed checkout for attendees, through QR-code check-in at the door.

Ticketed Events is a separate feature from the [Gancio event calendar integration](../services/integrations.md) — Gancio publishes shift-based community events, while Ticketed Events handles commerce, capacity, and attendance tracking for in-person or online gatherings.

!!! info "Feature flag"
    Enable in **Settings → Feature Toggles**, or set `enableTicketedEvents=true` in the site settings. [Payments](../payments/index.md) must also be enabled for paid tiers to work.

---

## In This Section

<div class="grid cards" markdown>

-   :material-ticket:{ .lg .middle } **[Ticketed Events](ticketed-events.md)**

    ---

    Create events, configure tier types (paid, free, donation), publish, and manage attendees.

-   :material-qrcode-scan:{ .lg .middle } **[Check-in Scanner](check-in.md)**

    ---

    QR scan or manual lookup to check attendees in at the door.

</div>

---

## How It Works

1. **Create an event** in the admin at `/app/events` — title, date, venue, format (in-person / online / hybrid).
2. **Add ticket tiers** — at least one tier is required. Each tier has a type (`PAID`, `FREE`, `DONATION`), price, and capacity.
3. **Publish** — the event transitions from `DRAFT` → `PUBLISHED` and becomes available at `/event/:slug` on your public site.
4. **Attendees register** — the public event page uses [Stripe Checkout](../payments/settings.md) for paid tiers, a simple email form for free tiers, and a suggested-amount flow for donation tiers.
5. **Tickets are emailed** — each buyer receives an email with a unique ticket code (QR-scannable).
6. **Check-in at the door** — organizers use the [Check-in Scanner](check-in.md) on a phone or tablet to mark tickets as checked in.

---

## Event Lifecycle

Events move through the following statuses:

| Status | Meaning |
|--------|---------|
| `DRAFT` | Work in progress — not visible publicly |
| `PENDING_APPROVAL` | Submitted for review (if organizer is a non-admin) |
| `PUBLISHED` | Live on the public site; tickets can be purchased |
| `CANCELLED` | Event cancelled — tickets marked for refund |
| `COMPLETED` | Event has ended |

Visibility controls who can see a published event:

| Visibility | Behavior |
|------------|----------|
| `PUBLIC` | Listed on `/events` and indexable |
| `UNLISTED` | Only reachable by direct link (slug URL) |
| `PRIVATE` | Requires an invite code to access |

---

## Admin Routes

- `/app/events` — event list, create, edit, publish
- `/app/events/:id` — event detail with tickets and check-ins
- `/app/events/:id/checkin` — full-screen check-in scanner

## Public Routes

- `/events` — browse public events (if `enableEvents` is on)
- `/event/:slug` — event detail with ticket purchase
- `/event/:slug/ticket/:ticketCode` — ticket confirmation with QR code
