🎉 New Welcome to reservie — V2 is now live and available for use. Get started →

Customers — Bookings

Updated Feb 25, 2026 2 min read

Retrieve a customer's event bookings — list with filtering and pagination, or fetch a single booking by ID.

List bookings

GET /customer/{id}/bookings

Scope: bookings:read

Query parameters:

ParameterDefaultDescription
page0Page number (0-indexed)
pageSize30Items per page (max 100)
future_onlyfalseSet to true to only return bookings with future event dates
startDate3 months agoISO 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

FieldTypeDescription
idstringTransaction ID (prefixed with txn_)
typestringAlways "event-booking"
purchase_datestringISO 8601 local datetime of the purchase
bookingsarrayIndividual bookings within this transaction

Booking fields

FieldTypeDescription
idstringBooking ID (prefixed with booking_)
typestringAlways "event-booking"
is_cancelledbooleanWhether the booking has been cancelled/voided
is_refundedbooleanWhether a refund has been issued
spacesnumberNumber of spaces booked
purchased_byobjectCustomer who made the purchase (id, firstname, lastname, email)
bought_forobject or undefinedCustomer the booking is for, if different from purchaser
eventobjectEvent and specific date booked
pricing_optionobjectPricing option used (id)
paymentobjectPayment details (shape varies by method, see below)

Payment (CARD)

FieldTypeDescription
methodstring"CARD"
currencystringCurrency code (GBP, EUR, USD)
base100gross_pricenumberGross price in base-100 (pence/cents)
base100net_pricenumberNet price in base-100 (pence/cents)

Payment (PASS)

FieldTypeDescription
methodstring"PASS"
currencystringAlways "CR" (credits)
credits_usednumberNumber 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.