Eventlayer / Understand the model
Tickets
Issue, assign, and check in individual tickets.
Tickets are individual admissions to an event. Each ticket belongs to a ticket type and can optionally be assigned to an attendee.
People and access
Tickets bridge the gap between who is coming (attendees) and what kind of access they have (ticket types). They track the full lifecycle of an admission — from creation through assignment to check-in — giving you a clear audit trail for every person who enters your event.
Issue a test ticket from the event page in the dashboard. For a live product, create and assign tickets through the SDK or API as part of registration or checkout.
Ticket lifecycle
Tickets follow a defined status lifecycle:
- 01available
- 02assigned
- 03checked_in
| Status | Description |
|---|---|
available | Ticket has been issued but not assigned to an attendee. |
assigned | Ticket is assigned to an attendee. |
checked_in | Admission has been recorded. Check-in cannot be reversed. |
cancelled | Access was removed; a record is retained for an installed Wallet pass. |
Removing access uses tickets.delete(). If a device is registered for the
Wallet pass, a cancelled record remains so the pass can be updated. Otherwise
the ticket is deleted. See access removal.
How tickets work
A ticket is created under an event and linked to a ticket type. It can be created in two ways:
- Unassigned — Created without an attendee. Status starts as
available. - Pre-assigned — Created with an attendee. Status starts as
assigned.
You can assign an available ticket to an attendee later, or reassign an already-assigned ticket to a different attendee (as long as they belong to the same event).
Check-in requirements
To check in a ticket, the following conditions must be met:
- The ticket must have status
assigned(notavailable,checked_in, orcancelled). - The ticket's ticket type must have status
active.
Check-in is a one-time operation. Once a ticket is checked in, it cannot be reversed.
Working with tickets
// Create and assign in one step
const { data: ticket, error: ticketError } = await eventlayer.tickets.create({
eventId: "ev_123",
ticketTypeId: "tt_123",
attendeeId: "atd_123",
});
if (ticketError) throw ticketError;
// Check in
const { error: checkInError } = await eventlayer.tickets.checkIn({ ticketId: ticket.id });
if (checkInError) throw checkInError;
// List tickets with filters
const { data: page, error: pageError } = await eventlayer.tickets.list({
eventId: "ev_123",
status: "assigned",
limit: 50,
});
if (pageError) throw pageError;
const { items } = page;
// Auto-paginate
for await (const { data: t, error } of eventlayer.tickets.listAll({
eventId: "ev_123",
})) {
if (error) throw error;
console.log(t.status);
}See the Tickets API Reference for full request and response schemas, including all filter parameters.
Apple Wallet passes
Generate a Wallet pass (.pkpass file) for a ticket so attendees can add it to Apple Wallet on their iPhone or Apple Watch.
Pass appearance is controlled by Apple Wallet Templates, which can be assigned at the event or ticket type level to customize colors, logo text, and hero images.
Generate a pass URL
After your backend verifies that the current user owns the ticket, generate a private download URL. Keep the API key on your server.
const { data: pass, error } =
await eventlayer.tickets.generateAppleWalletPassSignedUrl({
ticketId: "tkt_your_ticket_id",
});
if (error) throw error;
// Return pass.url to the authorised ticket holder.Follow Add Apple Wallet tickets for a complete flow, or Build a check-in app to use the same ticket at the door.