List bookings
GET /customer/{id}/bookings
Scope: bookings:read
Query parameters:
| Parameter | Default | Description |
|---|---|---|
page | 0 | Page number (0-indexed) |
pageSize | 30 | Items per page (max 100) |
future_only | false | Set to true to only return bookings with future event dates |
startDate | 3 months ago | ISO date string — filter bookings by transaction date (inclusive) |
endDate | (none) | ISO date string — filter bookings by transaction date (inclusive) |
If startDate is not provided, it defaults to 3 months before the current date. To retrieve all bookings, pass a startDate far in the past (e.g. 2000-01-01).
Response:
{
"data": [
{
"id": "txn_456",
"type": "event-booking",
"purchase_date": "2026-01-15T10:30:00",
"bookings": [
{
"id": "booking_789",
"type": "event-booking",
"is_cancelled": false,
"is_refunded": false,
"spaces": 1,
"purchased_by": {
"id": "cust_123",
"type": "customer",
"firstname": "Jane",
"lastname": "Smith",
"email": "jane@example.com"
},
"bought_for": {
"id": "cust_456",
"type": "customer",
"firstname": "John",
"lastname": "Smith",
"email": "john@example.com"
},
"event": {
"id": "evt_42",
"type": "event",
"name": "Monday Yoga",
"date": {
"id": "date_501",
"type": "event_date",
"datetime": "2026-03-03T09:00:00",
"tz": "Europe/London",
"duration": 60
}
},
"pricing_option": {
"id": "po-abc123"
},
"payment": {
"method": "CARD",
"currency": "GBP",
"base100gross_price": 1200,
"base100net_price": 1200
}
}
]
}
],
"total": 42,
"page": 0,
"pageSize": 30
}
Transaction fields
| Field | Type | Description |
|---|---|---|
id | string | Transaction ID (prefixed with txn_) |
type | string | Always "event-booking" |
purchase_date | string | ISO 8601 local datetime of the purchase |
bookings | array | Individual bookings within this transaction |
Booking fields
| Field | Type | Description |
|---|---|---|
id | string | Booking ID (prefixed with booking_) |
type | string | Always "event-booking" |
is_cancelled | boolean | Whether the booking has been cancelled/voided |
is_refunded | boolean | Whether a refund has been issued |
spaces | number | Number of spaces booked |
purchased_by | object | Customer who made the purchase (id, firstname, lastname, email) |
bought_for | object or undefined | Customer the booking is for, if different from purchaser |
event | object | Event and specific date booked |
pricing_option | object | Pricing option used (id) |
payment | object | Payment details (shape varies by method, see below) |
Payment (CARD)
| Field | Type | Description |
|---|---|---|
method | string | "CARD" |
currency | string | Currency code (GBP, EUR, USD) |
base100gross_price | number | Gross price in base-100 (pence/cents) |
base100net_price | number | Net price in base-100 (pence/cents) |
Payment (PASS)
| Field | Type | Description |
|---|---|---|
method | string | "PASS" |
currency | string | Always "CR" (credits) |
credits_used | number | Number of pass credits consumed |
Get a single booking
GET /customer/{id}/booking/{bookingId}
Scope: bookings:read
Returns a single booking by its transaction ID. The {bookingId} path parameter uses the prefixed booking ID (e.g. txn_456).
The response has the same shape as a single item from the list endpoint above, wrapped in { "data": { ... } }.
Returns 404 if the booking does not exist or does not belong to this customer.
