Skip to main content
GET
/
v1
/
venues
/
{venue_id}
/
customers
/
{customer_id}
/
bookings
curl "https://api.saoma.io/v1/venues/akasha-lutetia/customers/c1f4a9d2-3b8e-4c7f-9a01-2f5d6c8e9b3a/bookings?page=1&limit=10" \
  -H "Authorization: Bearer $SAOMA_API_KEY"
{
  "data": [
    {
      "id": "b9a4f17e-1d6c-4e9a-9f02-3a8b1c7d6e5f",
      "booking_number": 4832,
      "booking_date": "2026-05-14",
      "booking_time": "10:00:00",
      "duration": 60,
      "status": "completed",
      "payment_method": "room",
      "payment_status": "charged_to_room",
      "client_type": "hotel",
      "total_price": {
        "amount": "170.00",
        "currency": "EUR"
      },
      "room_number": "412",
      "treatments": [
        {
          "id": "7f1a9c3b-8d4e-4f21-a1b2-c3d4e5f60718",
          "name": "Massage suédois",
          "label": "60 min",
          "duration": 60,
          "price": {
            "amount": "95.00",
            "currency": "EUR"
          }
        },
        {
          "id": "9d2c8f4e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
          "name": "Soin éclat visage",
          "label": "45 min",
          "duration": 45,
          "price": {
            "amount": "75.00",
            "currency": "EUR"
          }
        }
      ],
      "created_at": "2026-05-13T18:32:11Z"
    }
  ],
  "meta": {
    "page": 1,
    "limit": 10,
    "total": 12
  }
}
Returns the bookings made by one customer at the given venue, in reverse chronological order. Requires the bookings:read scope.
The history is scoped to the venue in the URL. Bookings the same customer made at your other venues are not included — query each venue separately.

Path parameters

venue_id
string
required
The venue identifier — UUID id or slug.
customer_id
string
required
Customer UUID, as returned by GET /v1/venues/{venue_id}/customers.

Query parameters

page
integer
default:"1"
1-indexed page number.
limit
integer
default:"20"
Page size, between 1 and 100.

Response

data
Booking[]
Page of bookings, ordered by date and time descending.
meta
object

Errors

HTTPBodyMeaning
401{ "error": "Missing API key" }No Authorization: Bearer or X-Api-Key header
403{ "error": "Insufficient scope", "missing": […] }Your key does not carry bookings:read
403{ "error": "Forbidden" }The venue belongs to another organisation
404{ "error": "Venue not found" }Unknown venue slug / UUID
404{ "error": "Customer not found in this venue" }Unknown customer UUID, or the customer has never booked at this venue

Example

curl "https://api.saoma.io/v1/venues/akasha-lutetia/customers/c1f4a9d2-3b8e-4c7f-9a01-2f5d6c8e9b3a/bookings?page=1&limit=10" \
  -H "Authorization: Bearer $SAOMA_API_KEY"
{
  "data": [
    {
      "id": "b9a4f17e-1d6c-4e9a-9f02-3a8b1c7d6e5f",
      "booking_number": 4832,
      "booking_date": "2026-05-14",
      "booking_time": "10:00:00",
      "duration": 60,
      "status": "completed",
      "payment_method": "room",
      "payment_status": "charged_to_room",
      "client_type": "hotel",
      "total_price": {
        "amount": "170.00",
        "currency": "EUR"
      },
      "room_number": "412",
      "treatments": [
        {
          "id": "7f1a9c3b-8d4e-4f21-a1b2-c3d4e5f60718",
          "name": "Massage suédois",
          "label": "60 min",
          "duration": 60,
          "price": {
            "amount": "95.00",
            "currency": "EUR"
          }
        },
        {
          "id": "9d2c8f4e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
          "name": "Soin éclat visage",
          "label": "45 min",
          "duration": 45,
          "price": {
            "amount": "75.00",
            "currency": "EUR"
          }
        }
      ],
      "created_at": "2026-05-13T18:32:11Z"
    }
  ],
  "meta": {
    "page": 1,
    "limit": 10,
    "total": 12
  }
}