Docs

Services

Last updated: 26 Oct 2026

Services are bookable offerings at a location (e.g., sauna session, haircut, consultation).

All endpoints are scoped to the organization that owns the API key:

/store/v0

List services

Retrieve all public services for the organization.

GET /store/v0/services

Response

{
  "services": [
    {
      "public_id": "9c1a2b3c-4d5e-4f60-8123-9a0b1c2d3e4f",
      "name": "Haircut",
      "description": "Professional haircut service with styling",
      "short_description": "Get a fresh new look",
      "kind": "appointment",
      "booking_mode": "exclusive",
      "capacity": 1,
      "default_duration_minutes": 60,
      "slot_interval_minutes": 30,
      "booking_cutoff_minutes": 1440,
      "min_advance_hours": 24,
      "max_advance_days": null,
      "allow_customer_resource_preference": true,
      "thumbnail": null,
      "service_variants": [
        {
          "public_id": "4a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d",
          "name": "Standard Haircut",
          "description": "Classic haircut with styling",
          "duration_minutes": 60,
          "capacity": 1,
          "position": 1,
          "sales_currently_open": true,
          "price": {
            "cents": 35000,
            "currency": "NOK",
            "amount": 350.0,
            "formatted": "350 NOK",
            "abbreviated": "350 NOK"
          }
        }
      ]
    }
  ]
}

Field reference (service)

FieldTypeNotes
public_idstringPublic identifier
namestringDisplay name
descriptionstringMay contain HTML
short_descriptionstringBrief description
kindstring"appointment" or "class" (see below)
booking_modestring"exclusive" or "shared" (see below)
capacityintegerMaximum guests per slot
default_duration_minutesintegerMinutes
slot_interval_minutesintegerMinutes
booking_cutoff_minutesintegerBookings close this many minutes before start
min_advance_hoursinteger | nullDeprecated, see below
max_advance_daysnullDeprecated, see below
allow_customer_resource_preferencebooleanIf customers may pick a preferred staff resource
thumbnailobject | nullMedia (see Types)
service_variantsarrayBooking/price variants

Booking window

Customers can book a slot until booking_cutoff_minutes before it starts, and at most one year ahead. The Service availability endpoint only returns slots inside this window, and adding a slot outside it to a cart fails.

min_advance_hours and max_advance_days are deprecated and will be removed from a future version. min_advance_hours is booking_cutoff_minutes in whole hours, or null when there is no cut-off. max_advance_days is always null. Use booking_cutoff_minutes instead.

Kinds

  • appointment: Guests pick any free slot inside the service's opening hours.
  • class: Guests book a seat in a scheduled session. Handle this value even if you only see appointments today, so a class service added later doesn't break your storefront.

A class service's booking_mode is always "shared". Its sessions set their own times, length and seats, so slot_interval_minutes and allow_customer_resource_preference don't apply, and a booking lasts as long as its session, whatever the variant's duration_minutes.

Booking modes

The booking_mode field determines how time slots are consumed:

  • exclusive: Each booking takes the slot's resources to itself. A slot stays available while another booking could still get every resource the service needs, so a service needing any one of a group takes one booking per free member. A service with no resources takes one booking at a time. Typical for 1-on-1 services like haircuts or consultations.
  • shared: Multiple independent bookings can occupy the same slot, up to the service's capacity. Typical for group experiences like sauna sessions or tours. When adding a booking for a shared service to a cart, use the guest_count attribute to specify how many guests are in the booking. The Service availability endpoint reports available_capacity per slot so you know how many guests can still be added.

Field reference (service variant)

FieldTypeNotes
public_idstringPublic identifier
namestringDisplay name
descriptionstringDescription
duration_minutesintegerMinutes
capacityinteger | nullIf null, inherits service capacity
positionintegerSort order
sales_currently_openbooleanIf currently bookable
priceobjectMoney (see Types)

Get service

Retrieve a single service by public_id.

GET /store/v0/services/{public_id}

Path parameters

ParameterTypeDescription
public_idstringService public identifier

Response

{
  "service": {
    "public_id": "9c1a2b3c-4d5e-4f60-8123-9a0b1c2d3e4f",
    "name": "Haircut"
  }
}

The service object has the same structure as in the list response (fields omitted above for brevity).