Service availability provides time slots for a given service variant in a date range.
All endpoints are scoped to the organization that owns the API key:
/store/v0
Get availability
Retrieve available time slots for a service variant within a date range. Slots fall inside the service's opening hours; a service without opening hours has slots all day.
GET /store/v0/services/availabilitiesQuery parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
service_id | string | Yes | Service public ID |
variant_id | string | Yes | Service variant public ID |
start_date | string | Yes | YYYY-MM-DD |
end_date | string | Yes | YYYY-MM-DD |
resource_id | string | No | Filter by a specific selectable resource (e.g. staff) |
seats | integer | No | Seats the guest needs. A slot, and its date, is available only with that many free seats. For a package service, send the option's seats from the package search. |
Validation rules
end_datemust be on or afterstart_date- The date range length is constrained (commonly max 90 days)
- The service and variant must be publicly visible
- If
resource_idis provided, it must be a valid selectable resource for the service - Slots closer to their start than the service's
booking_cutoff_minutes, or more than one year ahead, are left out
If validation fails, the API returns a 400 or 404 depending on the failure mode. See Errors.
Response
{
"dates": [
{
"date": "2026-01-25",
"available": true,
"slots": [
{
"starts_at": "2026-01-25T09:00:00+01:00",
"ends_at": "2026-01-25T10:00:00+01:00",
"available": true,
"available_capacity": 1,
"total_capacity": 1,
"available_resources": [
{
"id": "7f6e5d4c-3b2a-4c1d-9e0f-1a2b3c4d5e6f",
"name": "Alice",
"type": "staff"
}
]
}
]
}
],
"meta": {
"start_date": "2026-01-25",
"end_date": "2026-01-25",
"service_id": "9c1a2b3c-4d5e-4f60-8123-9a0b1c2d3e4f",
"variant_id": "4a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d",
"timezone": "Europe/Oslo"
}
}Field reference
Date object
| Field | Type | Description |
|---|---|---|
date | string | YYYY-MM-DD |
available | boolean | Whether any slots are bookable |
slots | array | Slot objects |
Slot object
| Field | Type | Description |
|---|---|---|
starts_at | string | ISO 8601 timestamp |
ends_at | string | ISO 8601 timestamp |
available | boolean | Whether slot is bookable |
available_capacity | integer | Remaining guest capacity for the slot |
total_capacity | integer | Maximum guest capacity for the slot |
available_resources | array | Selectable resources available for the slot |
Capacity and booking modes
The meaning of available_capacity and total_capacity depends on the service's booking_mode (see Services):
- Exclusive services (
booking_mode: "exclusive"): Each booking takes the slot's resources.total_capacityis typically 1, and a slot no further booking can get resources for showsavailable: falseandavailable_capacity: 0. - Shared services (
booking_mode: "shared"): Multiple guests can occupy the same slot. For example, a sauna withtotal_capacity: 8and 3 existing guests showsavailable_capacity: 5. Use this value to determine the maximumguest_countwhen adding a booking to a cart.
Class services
For a class service (kind: "class", see Services), each slot is one scheduled session: starts_at and ends_at are the session's, total_capacity is the session's seats, and available_capacity is the seats it has left. A session that can't take bookings, because it is inside the booking cut-off or has no staff right now, is still listed, with available: false and available_capacity: 0. available_resources is always empty. Add a session to a cart with its starts_at, like any other slot.
Available resource object
| Field | Type | Description |
|---|---|---|
id | string | Resource public ID |
name | string | Display name |
type | string | Resource type (example: "staff") |
Meta object
| Field | Type | Description |
|---|---|---|
start_date | string | Requested start date |
end_date | string | Requested end date |
service_id | string | Service public ID |
variant_id | string | Variant public ID |
timezone | string | IANA timezone for location/service |
Using availability to create a booking cart item
When creating a booking cart item:
- Choose a slot where
availableistrue. - Send the
starts_atexactly as returned by this endpoint (including timezone offset). - For shared services, check
available_capacityand setguest_counton the cart item to a value that does not exceed it.
See Cart items for the full request format.