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
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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
SessionId | string | Yes | - | Your session id. |
productTypeUuid | string | Yes | - | The variant to book, from product-types. |
arrivalDate | string | Yes | today + 7 | Visit date, YYYY-MM-DD. Alias date. |
adults | integer | Yes | 1 | Adult tickets. Alias pax. |
children | integer | No | 0 | Child tickets. |
seniors | integer | No | 0 | Senior tickets. |
timeSlot | string | No | - | The chosen slot when the variant exposes timeslots. |
partnerReference | string | No | - | Your own reference, echoed on the booking. |
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
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
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.
Access requires the permission activity_booking_details
One booking by its reference uuid. Status values: reserved, waiting, approved, cancelled, expired, rejected, refunded.

