# Create booking ticket passes.

`POST /api/digital-pass/booking-ticket-pass`

- **Success:** `200 OK`
- **Products:** Operator (`FOH`), Digital Passes (`DIGITALPASSES`) (any one of these products, not all)
- **Features:** Digital Passes - Ticket (`DIGITALPASSESTICKET`), Front of House Generic Access (`FOHGENERIC`) (any one of these features, not all)

HTML version: [Create booking ticket passes.](https://support.gladstonesoftware.cloud/reference/digital-passes/create-booking-ticket-passes)

## Overview

Creates one digital ticket pass per attendee on a booking — the wallet passes attendees add to their phones and present at the venue — and returns a single link from which they are all downloaded.

**The booking must not have finished.** The booking's end date and time is compared with the current UTC time, and a booking that has already ended is rejected with `404` and the message `Booking identified by bookingRef … is no longer active.` Generate the passes while the booking is still in the future or in progress; you cannot generate them retrospectively.

Send the `X-Timezone` header on every call. It is checked before anything else and must be an IANA timezone name such as `Europe/London`, `America/New_York` or `UTC`. A missing, empty or unrecognised value fails the request with `400` and no passes are created. The timezone governs how the start time is formatted on the face of each pass, so send the attendee's timezone rather than your server's.

One pass is produced per party member on the booking. The lead attendee's pass shows their real name; every other pass shows `Guest 1`, `Guest 2` and so on, numbered in the order the party members are returned — the API does not accept individual guest names. If the booking has no party members recorded, this is not an error: a single pass is created using the booking reference as its barcode.

Each pass carries a scannable value of `$T` followed by that attendee's barcode. That is the string a reader at the venue decodes, so a scanner configured to expect a bare numeric booking reference will not match it.

Digital passes must be enabled and configured for the booking's site. If they are not, the request fails with `400` — see the Errors table for the exact messages.

## Endpoint

`POST {base_url}/api/digital-pass/booking-ticket-pass`

`{base_url}` is the environment URL issued to your integration. See [Authenticating with Gladstone APIs](../../guides/authenticating-with-gladstone-apis.md).

## Request body

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `bookingRef` | integer (int32) | No | The booking to issue passes for. This is the booking **reference**, not the booking id — the two are distinct values on a booking and only the reference is accepted here. Everything the passes need is derived from it: the site, the activity, the location, the start and end times, the lead attendee's name and the party members. Omitting it is treated as `0`; no booking matches `0` and the request fails with `404`. |

## Sample request

```bash title="cURL"
curl -X POST '{base_url}/api/digital-pass/booking-ticket-pass' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true' \
  -H 'Content-Type: application/json' \
  -d '{
  "bookingRef": 1
}'
```

## Response fields

| Field | Type | Description |
|-------|------|-------------|
| `passPortalDownloadLink` | string | A single URL to the pass portal covering **all** the passes created by this call, not one link per attendee. Give it to the booker so the party can download their passes and add them to their phones' wallets. |

## Sample response

```json title="200 OK"
{
  "passPortalDownloadLink": "string"
}
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `400` | Bad request | The `X-Timezone` header is missing (`X-Timezone header is required`), empty (`X-Timezone header cannot be empty`) or not a recognised IANA name (`Invalid IANA timezone name in X-Timezone header: …`). Also returned when the booking's site has no usable digital pass configuration: `Digital Passes are disabled`, `Digital Passes Service URL is not configured or invalid`, or `Digital Passes API key is not configured`. These are tenant configuration problems, not problems with your request — retrying will not help. |
| `404` | Not found | Three distinct causes, distinguishable only by the message. `BookingRef … does not exist.` — no booking has that reference. `Booking identified by bookingRef … is no longer active.` — the booking has already ended; note this is an expiry, not a missing record, and it is deliberately returned as `404` rather than `410`. `Booking data not found for bookingRef ….` — the booking exists but its ticket data could not be assembled. |
| `500` | Internal server error | The external Digital Passes API rejected the request or returned a response that could not be parsed. No passes are created. Retry; if it persists the tenant's Digital Passes configuration or the upstream service needs investigating. |
