Hermeseus

Book an activity

Create, confirm, and read activity bookings.

A booking is created in reserved status and mirrored locally. The platform then issues it asynchronously. The uuid you get at create time is your permanent reference for the whole lifecycle, even after it is mapped onto the supplier id. Send SessionId in the JSON body on POST and PUT, and in the query string on GET.

Create a booking

POST/Activity/v2/bookings

Access requires the permission activity_create_booking

Reserve a variant for a date and pax mix, with the lead customer. The office balance is held for the total.

Body parameters

NameTypeRequiredDefaultDescription
SessionIdstringYes-Your session id.
productTypeUuidstringYes-The variant to book, from product-types.
arrivalDatestringYestoday + 7Visit date, YYYY-MM-DD. Alias date.
adultsintegerYes1Adult tickets. Alias pax.
childrenintegerNo0Child tickets.
seniorsintegerNo0Senior tickets.
timeSlotstringNo-The chosen slot when the variant exposes timeslots.
partnerReferencestringNo-Your own reference, echoed on the booking.
customer object, required
NameTypeRequiredDefaultDescription
salutationstringNoMr.Title.
firstNamestringYes-Given name.
lastNamestringYes-Surname.
emailstringYes-Contact email.
phonestringYes-Contact phone.
curl -X POST https://api.hermeseus.com/api/Activity/v2/bookings \
  -H "Content-Type: application/json" \
  -d '{
    "SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
    "productTypeUuid": "5f3ff236-40b1-4f0a-a780-1db8649d1f5b",
    "arrivalDate": "2026-10-15",
    "adults": 2,
    "children": 0,
    "seniors": 0,
    "partnerReference": "activity-order-0001",
    "customer": {
      "salutation": "Mr.",
      "firstName": "Jane",
      "lastName": "Doe",
      "email": "traveller@example.com",
      "phone": "+441234567890"
    }
  }'
const res = await fetch("https://api.hermeseus.com/api/Activity/v2/bookings", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    SessionId: "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
    productTypeUuid: "5f3ff236-40b1-4f0a-a780-1db8649d1f5b",
    arrivalDate: "2026-10-15",
    adults: 2,
    children: 0,
    seniors: 0,
    partnerReference: "activity-order-0001",
    customer: {
      salutation: "Mr.",
      firstName: "Jane",
      lastName: "Doe",
      email: "traveller@example.com",
      phone: "+441234567890"
    }
  })
});

const data = await res.json();
import requests

res = requests.post(
    "https://api.hermeseus.com/api/Activity/v2/bookings",
    json={
        "SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
        "productTypeUuid": "5f3ff236-40b1-4f0a-a780-1db8649d1f5b",
        "arrivalDate": "2026-10-15",
        "adults": 2,
        "children": 0,
        "seniors": 0,
        "partnerReference": "activity-order-0001",
        "customer": {
            "salutation": "Mr.",
            "firstName": "Jane",
            "lastName": "Doe",
            "email": "traveller@example.com",
            "phone": "+441234567890",
        },
    },
)

data = res.json()

Response

The created booking in reserved status. Carry data.uuid for every follow-up call.

{
  "data": {
    "uuid": "1d59a17e-9726-4283-a5b7-bab7886e4709",
    "code": "Z2KB84Z",
    "partnerReference": "activity-order-0001",
    "status": "reserved",
    "productTypeTitle": "Gardens by the Bay Admission",
    "productTypeUuid": "5f3ff236-40b1-4f0a-a780-1db8649d1f5b",
    "currencyCode": "USD",
    "totalAmount": 44.00,
    "amountBreakdown": [ { "name": "adult", "quantity": 2, "price": "22.00" } ],
    "arrivalDate": "2026-10-15",
    "adults": 2, "children": 0, "seniors": 0
  },
  "timestamp": "2026-10-15T16:24:49.648+08:00"
}

Confirm or cancel

PUT/Activity/v2/bookings/{uuid}/{status}

Access requires the permission activity_update_booking_status

Set {status} to confirm to move the booking toward issuance (status reserved then waiting, then approved once issued), or cancel to cancel it.

PUT /api/Activity/v2/bookings/1d59a17e-9726-4283-a5b7-bab7886e4709/confirm
{ "SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f" }

List and read bookings

GET/Activity/v2/bookings

Access requires the permission activity_list_bookings

A filterable, paginated list. Filter by date_start, date_end, first_name, last_name, email, phone, partner_reference, query, status, and paginate with page and per_page.

GET/Activity/v2/bookings/{uuid}

Access requires the permission activity_booking_details

One booking by its reference uuid. Status values: reserved, waiting, approved, cancelled, expired, rejected, refunded.

Next step. Once the booking is issued, fetch the voucher.