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:

Ticket lifecycle
  1. 01available
  2. 02assigned
  3. 03checked_in
StatusDescription
availableTicket has been issued but not assigned to an attendee.
assignedTicket is assigned to an attendee.
checked_inAdmission has been recorded. Check-in cannot be reversed.
cancelledAccess 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:

  1. The ticket must have status assigned (not available, checked_in, or cancelled).
  2. 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.

wallet-pass.ts · server only
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.