# Tickets (/docs/tickets)



A ticket grants access to an event. It belongs to a ticket type and can be assigned to an attendee.

## Issue a ticket [#issue-a-ticket]

```ts
const { data: ticket, error } = await eventlayer.tickets.create({
  eventId: "ev_123",
  attendeeId: "atd_123",
});
if (error) throw error;
```

The ticket starts as `assigned`. If the event has multiple ticket types,
include `ticketTypeId`. To create the attendee too, use
[attendee creation with a ticket](/docs/attendees).

## Create inventory, then assign it [#create-inventory-then-assign-it]

Omit `attendeeId` when creating a ticket to leave it `available`.
Assign it when you know who is coming:

```ts
const { data: ticket, error } = await eventlayer.tickets.assign({
  ticketId: "tkt_123",
  attendeeId: "atd_123",
});
if (error) throw error;
```

The attendee must belong to the same event.

## Ticket lifecycle [#ticket-lifecycle]

Tickets follow a defined status lifecycle:

<DocsFlow label="Ticket lifecycle" steps="[&#x22;available&#x22;, &#x22;assigned&#x22;, &#x22;checked_in&#x22;]" />

| 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](/docs/guides/payments#refunds-and-access-removal).

## Check in a ticket [#check-in-a-ticket]

```ts
const { data: ticket, error } = await eventlayer.tickets.checkIn({
  ticketId: "tkt_123",
});
if (error) throw error;
```

See [check-in](/docs/check-in) for requirements and response codes.

## List tickets [#list-tickets]

```ts
const { data: page, error } = await eventlayer.tickets.list({
  eventId: "ev_123",
  status: "assigned",
});
if (error) throw error;
```

Results are in `page.items`. See [pagination](/docs/pagination) for more results.

## Apple Wallet passes [#apple-wallet-passes]

An assigned ticket can become a signed Apple Wallet pass.
Follow [Add Apple Wallet tickets](/docs/guides/apple-wallet) to generate its download URL.
