Hermeseus

Activity availability and pricing

Read the bookable dates, timeslots, and prices for an activity variant before you book it.

Availability is keyed on the productTypeUuid from product-types. Dates and timeslots that have already passed are dropped automatically, compared against the activity's own timezone. Send SessionId as a query parameter.

Bookable dates

GET/Activity/v2/product-types/{uuid}/price-lists

Access requires the permission activity_price_lists

The date calendar for a variant, with the price per day. Narrow it with date_start and date_end.

Path parameters

NameTypeRequiredDescription
uuidstringYesThe productTypeUuid.

Query parameters

NameTypeRequiredDescription
date_startstringNoStart of the range, YYYY-MM-DD.
date_endstringNoEnd of the range, YYYY-MM-DD.
curl "https://api.hermeseus.com/api/Activity/v2/product-types/5f3ff236-40b1-4f0a-a780-1db8649d1f5b/price-lists?date_start=2026-10-15&date_end=2026-10-31&SessionId=8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f"
const uuid = "5f3ff236-40b1-4f0a-a780-1db8649d1f5b";
const params = new URLSearchParams({
  date_start: "2026-10-15",
  date_end: "2026-10-31",
  SessionId: "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f"
});

const res = await fetch(`https://api.hermeseus.com/api/Activity/v2/product-types/${uuid}/price-lists?` + params);
const data = await res.json();
import requests

uuid = "5f3ff236-40b1-4f0a-a780-1db8649d1f5b"
res = requests.get(
    f"https://api.hermeseus.com/api/Activity/v2/product-types/{uuid}/price-lists",
    params={
        "date_start": "2026-10-15",
        "date_end": "2026-10-31",
        "SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
    },
)

data = res.json()

Response

data is an array of dates. Each entry carries a date, its timezone, availability, and the price.

{
  "data": [
    {
      "date": "2026-10-15",
      "timezone": "Asia/Singapore",
      "available": true,
      "price": 22.00,
      "currency": "USD"
    },
    {
      "date": "2026-10-16",
      "timezone": "Asia/Singapore",
      "available": true,
      "price": 22.00,
      "currency": "USD"
    }
  ],
  "timestamp": "2026-10-15T16:24:49.648+08:00"
}

One date

GET/Activity/v2/product-types/{uuid}/price-lists/{date}

Access requires the permission activity_price_lists

Pricing and availability for a single YYYY-MM-DD. data is null if that date has already passed.

Timeslots

GET/Activity/v2/product-types/{uuid}

Access requires the permission activity_product_types_details

Variant details. When the variant runs at set times, data.timeslots lists them. Pass ?date=YYYY-MM-DD to get the slots for a day. Slots already past for that day are dropped.

Query parameters

NameTypeRequiredDescription
datestringNoThe day to read slots for, YYYY-MM-DD.
{
  "data": {
    "uuid": "5f3ff236-40b1-4f0a-a780-1db8649d1f5b",
    "timezone": "Asia/Singapore",
    "timeslots": [
      { "startTime": "10:00", "endTime": "11:00" },
      { "startTime": "14:00", "endTime": "15:00" }
    ]
  },
  "timestamp": "2026-10-15T09:30:00.000+08:00"
}
Past dates and slots are already filtered. The API compares against the activity's local timezone and drops anything in the past, so a slot you show is a slot you can still book.
Next step. Reserve a date and slot with the activity booking API.