Customer API

List Bookings

Retrieve the authenticated customer's booking history

Returns a paginated list of bookings for the authenticated customer.

Endpoint

GET /bookings

Authentication

Requires a valid JWT access token.

Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...

Query parameters

ParameterTypeDefaultDescription
limitinteger50Number of bookings to return (1 to 100)
cursorstring-Booking ID to paginate from
statusstring-Filter by booking status
rangestring-Use upcoming for future bookings or past for historical bookings
upcomingbooleanfalseDeprecated compatibility option; use range=upcoming

Status values

StatusDescription
scheduledBooking has been scheduled but not yet confirmed
confirmedBooking is confirmed
reminder_sentA reminder has been sent
waiting_roomCustomer is in a waiting room
waiting_listCustomer is on a waiting list
checked_inCustomer has checked in
activeCustomer is present and the booking is active
in_progressService is in progress
completedBooking took place as scheduled
cancelledBooking was cancelled
no_showCustomer did not show up
rescheduledBooking was moved to another time

Example request

curl -X GET "https://edge.tiquo.app/api/client/v1/bookings?range=upcoming&limit=10" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9..."

Response

{
  "success": true,
  "data": {
    "bookings": [
      {
        "id": "booking_123",
        "bookingNumber": "BK-001234",
        "status": "confirmed",
        "date": 1706662800000,
        "startTime": "14:30",
        "endTime": "15:30",
        "duration": 60,
        "timezone": "America/New_York",
        "attendeeCount": 2,
        "serviceName": "Consultation",
        "serviceCategoryName": "Appointments",
        "serviceImage": "https://images.example/consultation-room.jpg",
        "location": {
          "id": "loc_789",
          "name": "Midtown",
          "sublocationId": "loc_456",
          "sublocationName": "Treatment rooms",
          "address": "350 Fifth Avenue",
          "city": "New York",
          "state": "NY",
          "postalCode": "10118",
          "country": "US",
          "coordinates": { "lat": 40.7484, "lng": -73.9857 },
          "timezone": "America/New_York"
        },
        "customerActions": {
          "canCancel": true,
          "canReschedule": true,
          "isWaitlist": false,
          "cancellationDeadlineHours": 24
        },
        "ticketing": {
          "qrCodeTicketsEnabled": true,
          "walletTicketsEnabled": true,
          "ticketDownloadUrl": "https://edge.tiquo.app/api/client/v1/booking-ticket?bookingId=booking_123",
          "walletTicketUrl": "https://cards.tiquo.app/ticket/org_123/BK-001234"
        },
        "serviceId": "svc_123",
        "sublocationId": "loc_456",
        "customerNotes": "Please use the side entrance.",
        "checkedInAt": 1706664000000,
        "createdAt": 1706576400000
      }
    ],
    "hasMore": false
  }
}

Booking object

FieldTypeDescription
idstringBooking document ID
bookingNumberstringHuman-readable booking number (e.g. BK-001234)
statusstringBooking status (see values above)
dateintegerUnix timestamp in milliseconds for the booking date
startTimestringStart time in HH:mm format
endTimestringEnd time in HH:mm format
durationintegerDuration in minutes
timezonestringTimezone of the booking (e.g. America/New_York)
attendeeCountintegerNumber of attendees
serviceNamestringName of the booked service. When available, this comes from the order item snapshot captured when the booking was made.
serviceCategoryNamestring or omittedService category captured for the booking
serviceImagestring or omittedHeader image for the booking: the service's featured image, its first image, or its category image
locationobject or omittedThe venue and sublocation the booking is at (see below)
customerActionsobjectWhat the customer can do with the booking online. See Cancel and Reschedule Bookings
ticketingobjectTicket availability and download links for the booking
serviceIdstringID of the booked service
sublocationIdstringID of the sublocation
customerNotesstring or omittedNotes saved on the booking for the customer
createdAtintegerUnix timestamp in milliseconds when the booking was created
checkedInAtinteger or omittedUnix timestamp in milliseconds when the customer checked in
completedAtinteger or omittedUnix timestamp in milliseconds when the booking completed
cancelledAtinteger or omittedUnix timestamp in milliseconds when the booking was cancelled

Location object

FieldTypeDescription
idstringLocation (venue) ID
namestringLocation name
sublocationIdstringSublocation ID
sublocationNamestringSublocation name
address, city, state, postalCode, countrystring or omittedThe venue address. When the sublocation has its own address, that address is used
coordinatesobject or omittedlat and lng
timezonestring or omittedThe location's timezone

Ticketing object

FieldTypeDescription
qrCodeTicketsEnabledbooleanWhether a QR-code ticket PDF can be downloaded
walletTicketsEnabledbooleanWhether Apple Wallet and Google Wallet ticket links are available
ticketDownloadUrlstring or omittedDirect ticket download URL, when QR-code tickets are enabled
walletTicketUrlstring or omittedWallet ticket URL, when wallet tickets are enabled
appleWalletTicketUrlstring or omittedApple Wallet ticket URL
googleWalletTicketUrlstring or omittedGoogle Wallet ticket URL

For ticket downloads, see Download Booking Ticket. To let customers cancel or move a booking, see Cancel and Reschedule Bookings.

Pagination

When hasMore is true, pass the response's nextCursor as the cursor parameter to get the next page.

Errors

StatusDescription
401Invalid or expired access token
500Internal server error

Code examples

JavaScript

async function getBookings(accessToken, options = {}) {
  const params = new URLSearchParams();
  if (options.limit) params.set('limit', options.limit);
  if (options.cursor) params.set('cursor', options.cursor);
  if (options.status) params.set('status', options.status);
  if (options.range) params.set('range', options.range);
  if (options.upcoming) params.set('upcoming', 'true');

  const response = await fetch(
    `https://edge.tiquo.app/api/client/v1/bookings?${params}`,
    {
      headers: { 'Authorization': `Bearer ${accessToken}` },
    }
  );

  return response.json();
}

// Fetch upcoming bookings
const result = await getBookings(token, { range: 'upcoming', limit: 10 });
console.log(`You have ${result.data.bookings.length} upcoming bookings`);

// Fetch past bookings
const past = await getBookings(token, { range: 'past', limit: 10 });

On this page