Offerings catalog

Session Types

A SessionType represents a type of session that can be booked at a site.

The SessionType object

Attributes

  • idobject-idrequired

    Unique identifier of the session type. Returned from createSessionType; used to look up the type, manage its recurrence groups, set up bookings, and copy it.

  • namestringrequired

    The name of this session type

  • descriptionstringrequired

    A description of the session type

  • product_codestringrequired

    A custom product code for the session type.

  • currencystringrequired

    The ISO-4217 currency code in lower case

  • external_idstringrequirednullable

    An external identifier for this offering, used by integrations to map this SessionType to an external system.

  • hidden_on_schedulebooleanoptional

    When true, this session type is excluded from the staff schedule view in the admin UI even though sessions are still visible to customers and bookable. Used to keep operational sessions (e.g. private member-only programmes) off the main calendar without making them unbookable.

  • image_iduuidrequirednullable

    Media ID of the hero image for the session type, shown on the storefront listing and detail page. Upload via createMedia first and pass the returned ID here. Pass null to remove the image.

  • imageoptional
  • offered_onlinebooleanrequired

    Whether this session type is bookable online

  • privatebooleanrequired

    Whether this is private. When private, it is accessible from the URL but doesn't appear on category pages and isn't indexed on search engines.

  • site_iduuidrequired

    Identifier of the site this session type is published at. Session types are scoped per site so each venue can run its own programme; the type's bookings, capacity, and pricing are managed against this site.

  • durationintegerrequired

    The duration of the session type.

  • Limit the number of baskets that may create bookings for a single session.

  • The maximum time before a session's start time that it may be booked, as an ISO8601 string. See https://en.wikipedia.org/wiki/ISO_8601#Durations

  • The minimum time before a session's start time that it may be booked, as an ISO8601 string. See https://en.wikipedia.org/wiki/ISO_8601#Durations

  • customers_onlybooleanoptional

    Whether this session requires the customer to be logged in to book.

  • members_onlybooleanrequired

    Whether this session requires an active membership in order to book.

  • The maximum number of bookings a member may make on a single session.

  • If this session is for members only, this property may be used to restrict the offering further so it may only be booked by active members with of one of the given membership types.

  • Whether membership-specific booking windows should be enabled for this session type.

  • Whether bookings of this type may be cancelled online by customers. A value of unpaid means this booking my be cancelled only if no payments have been recorded against the order it is part of.

  • The minimum duration that must be left before the booking in order for the customer to cancel, as an ISO8601 string. See https://en.wikipedia.org/wiki/ISO_8601#Durations

  • waitlist_enabledbooleanrequired

    Whether the waitlist is enabled for sessions of this type.

  • min_guestsintegerrequired

    The minimum guests allowed in a booking for this session

  • max_guestsintegerrequired

    The maximum guests allowed in a booking for this session

  • max_per_basketintegerrequirednullable

    Maximum number of times this session type can appear in a single basket. Null = unlimited. Use to throttle blanket bookings of capacity-constrained sessions.

  • max_per_guestintegerrequirednullable

    Maximum number of times this session type can be assigned to a single guest within a basket. Null = unlimited. Defends against accidental duplicate bookings of the same guest.

  • price_rulesobject[]required

    The rules defining prices for this session type.

  • category_idsstring[]required

    The category IDs associated with this session type

  • categoriesobject[]required

    The category associated with this session type

  • recurrence_groupsobject[]optionalDeprecated

    An array of recurrence groups for this session type

  • metaobjectrequired
  • upsell_offeringsobject[]required
  • cross_sell_offeringsobject[]required
  • revenue_centrestringrequired

    The revenue centre to assign revenue to for this offering

  • Whether the booking engine calendar should display pricing under each date

  • visibilitystringrequired

    Visibility on the shopfront. public = listed in search and browse; link_only = bookable only via direct link (excluded from search/browse); private = admin-only, never offered to customers.

    Possible values:link_onlyprivatepublic
  • updated_atdate-timerequired

    The time and date that the appointment type was last updated.

  • deleted_atdate-timerequirednullable

    The time and date that the appointment type was archived.

{
  "id": "64a9f3b2c3d8e1f4a5b6c7d8",
  "name": "Vinyasa yoga",
  "description": "A dynamic form of yoga",
  "product_code": "MAS123",
  "currency": "gbp",
  "external_id": "ext-yoga-vinyasa",
  "hidden_on_schedule": false,
  "image_id": "00000000-0000-0000-0000-000000000000",
  "image": "string",
  "offered_online": false,
  "private": false,
  "site_id": "00000000-0000-0000-0000-000000000000",
  "duration": 60,
  "max_baskets_per_session": 1,
  "max_advance_bookings_interval": "P2W",
  "min_advance_bookings_interval": "P2D",
  "customers_only": false,
  "members_only": true,
  "max_bookings_per_member": 1,
  "permitted_membership_type_ids": [
    "string"
  ],
  "membership_booking_windows_enabled": true,
  "membership_booking_windows": [
    "string"
  ],
  "customer_cancellation_permitted": "string",
  "customer_cancellation_min_duration": "P7D",
  "waitlist_enabled": true,
  "min_guests": 1,
  "max_guests": 2,
  "max_per_basket": 4,
  "max_per_guest": 2,
  "price_rules": [
    {
      "id": "64a9f3b2c3d8e1f4a5b6c7d8",
      "session_type_id": "64a9f3b2c3d8e1f4a5b6c7d8",
      "date_from": "2020-02-01",
      "date_to": "2020-04-01",
      "weekdays": [
        "monday"
      ],
      "time_from": "16:00",
      "time_to": "17:00",
      "price": 1500
    }
  ],
  "category_ids": [
    "string"
  ],
  "categories": [
    {
      "id": "64a9f3b2c3d8e1f4a5b6c7d8",
      "name": "Massages"
    }
  ],
  "recurrence_groups": [
    "string"
  ],
  "meta": {
    "title": "string",
    "description": "Free-form text from the resource."
  },
  "upsell_offerings": [
    "string"
  ],
  "cross_sell_offerings": [
    "string"
  ],
  "related_retail_offerings": [
    "string"
  ],
  "revenue_centre": "spa",
  "include_pricing_on_calendar": false,
  "visibility": "public",
  "updated_at": "2020-02-24T12:00:00+01:00",
  "deleted_at": "2020-02-24T12:00:00+01:00"
}
get/shop/session-types

List session types

listSessionTypes

Returns a paginated list of SessionTypes configured at the given site, matching the optional query substring. Use this to populate admin settings or a shopfront browse page. Pass include_recurrence_groups=true (the default) to embed each session type's recurrence relations alongside the data — useful when you also want to render upcoming sessions.

Query parameters

  • querystringoptional

    A search query to filter session types by. This will search the name of the session type.

  • Whether to include the SessionRecurrenceGroup relations.

  • site_idstringoptional

    Filter results by the site they belong to

  • archivedbooleanoptional

    Whether to include archived resources in the response. When true, archived resources are returned; when false or omitted, only non-archived resources are returned.

  • pageintegeroptional

    The page to retrieve results from

  • per_pageintegeroptional

    The number of results to return per page

Responses

  • 200

    The Session Types were successfully retrieved.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

post/shop/session-types

Create a session type

createSessionType

Creates a new SessionType at the caller's current site. Sessions are recurring offerings that run on a schedule (yoga classes, fitness sessions, group treatments). Once created, attach a SessionRecurrenceGroup to drive when occurrences happen.

Requires the SETTINGS_MANAGE permission on the site.

Request body

  • namestringrequired

    Display name for the session type, shown to customers in the shopfront and to staff in the admin UI. Plain text only — HTML tags are rejected.

  • descriptionstringoptional

    Long-form description shown to customers when they're selecting the session type. Markdown is rendered.

  • product_codestringoptionalnullable

    Optional product code used to map this session type to an external POS/PMS catalog. Free-form; uniqueness not enforced server-side.

  • external_idstringoptionalnullable

    External identifier used by integrations to reference this offering.

  • currencystringoptional

    The ISO-4217 currency code.

  • organisation_iduuidoptional

    Optional organisation to attribute this offering to. Defaults to the caller's primary organisation.

  • durationintegeroptional

    Length of each session occurrence in minutes. Sessions have a single duration (unlike appointment types which can support several).

  • max_baskets_per_sessionintegeroptionalnullable

    Maximum number of baskets (= customer parties) that can book a single session occurrence. Beyond this, the session is full. Null = unlimited.

  • category_idsstring[]optional

    Category IDs for shopfront grouping.

  • offered_onlinebooleanoptional

    When true, the session type is bookable via the public shopfront. When false, it's admin-only.

  • privatebooleanoptional

    When true, only customers with the direct link can book this session type.

  • visibilitystringoptional

    Visibility override. public = everyone; hidden = out of search/browse (still bookable by direct link); members_only = restricted to permitted membership-type holders.

    Possible values:publichiddenmembers_only
  • customers_onlybooleanoptional

    When true, only registered customers can book.

  • members_onlybooleanoptional

    When true, only members of permitted membership types can book.

  • permitted_membership_type_idsstring[]optionalnullable

    Membership type IDs whose members can book when members_only=true. Out-of-brand membership types are filtered out.

  • When true, members get extended advance-booking windows per membership_booking_windows.

  • Per-membership-type advance-window overrides.

  • Cap on how many concurrent bookings a single member can hold for this session type. Helps prevent block-booking of limited-capacity offerings.

  • max_guestsintegeroptionalnullable

    Maximum guests per basket when booking this session type. Null = unlimited (subject to max_baskets_per_session).

  • waitlist_enabledbooleanoptional

    When true, customers can join a waitlist once the session is full; they're notified if a spot opens up.

  • max_advance_bookings_intervalstringoptionalnullable

    ISO 8601 duration limiting how far in advance customers can book. e.g. P30D = 30 days, P1Y = 1 year.

  • min_advance_bookings_intervalstringoptionalnullable

    ISO 8601 duration of minimum notice before booking. e.g. PT2H = at least 2 hours.

  • revenue_centrestringoptionalnullable

    Revenue centre to post session bookings to. Must be valid for the caller's site.

  • upsell_offeringsobject[]optional

    Upsell candidates at booking confirmation.

  • cross_sell_offeringsobject[]optional

    Cross-sell candidates during the booking flow.

  • metaobjectoptional

    SEO metadata for the shopfront page.

Responses

  • 201

    The session type was created.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 422

    The request didn't pass validation

get/shop/session-types/{sessionTypeId}

Retrieve a session type

getSessionType

Returns the full SessionType model for the given ID. Use this to populate an admin edit screen or to look up settings when building a booking against a known session type.

Path parameters

Responses

  • 200

    The session type details were successfully retrieved.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

put/shop/session-types/{sessionTypeId}

Update a session type

updateSessionType

Partially updates a SessionType. Every field is optional; only fields you send are written. Omitted fields retain their current values. Requires the SETTINGS_MANAGE permission on the session type's site.

Path parameters

Request body

  • namestringoptional

    Display name. Plain text only.

  • descriptionstringoptionalnullable

    Long-form description. Markdown rendered.

  • product_codestringoptionalnullable

    Optional product code for POS/PMS mapping.

  • external_idstringoptionalnullable

    External identifier for integrations.

  • currencystringoptional

    The ISO-4217 currency code.

  • durationintegeroptional

    Session length in minutes.

  • max_baskets_per_sessionintegeroptionalnullable

    Maximum baskets per session occurrence.

  • category_idsstring[]optional
  • offered_onlinebooleanoptional

    Whether bookable via the public shopfront.

  • privatebooleanoptional

    Direct-link-only booking.

  • visibilitystringoptional

    Visibility override that determines who sees this session type on the shopfront. public = everyone; hidden = out of search/browse (still bookable by direct link); members_only = restricted to permitted membership-type holders.

    Possible values:publichiddenmembers_only
  • customers_onlybooleanoptional

    Restrict to registered customers.

  • members_onlybooleanoptional

    Restrict to permitted membership-type members.

  • permitted_membership_type_idsstring[]optionalnullable

    Membership-type IDs whose members may book.

  • Whether to honour per-membership advance windows.

  • Concurrent-booking cap per member.

  • max_guestsintegeroptionalnullable

    Maximum guests per basket for this session type. Subject to max_baskets_per_session and the overall session capacity. Null = no per-basket cap.

  • waitlist_enabledbooleanoptional

    Allow customers to join a waitlist when full.

  • max_advance_bookings_intervalstringoptionalnullable

    ISO 8601 max-advance booking duration.

  • min_advance_bookings_intervalstringoptionalnullable

    ISO 8601 min-advance booking duration.

  • revenue_centrestringoptionalnullable

    Revenue centre for session bookings.

  • upsell_offeringsobject[]optional
  • cross_sell_offeringsobject[]optional
  • image_idstringoptionalnullable

    ID of an uploaded Media for the cover image.

  • metaobjectoptional

    SEO metadata for the session type's public shopfront page — page title and meta description used in browser tabs and search engine snippets.

Responses

  • 200

    The session type was updated successfully.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

delete/shop/session-types/{sessionTypeId}

Delete a session type

deleteSessionType

Soft-deletes a SessionType. Future session occurrences are no longer offered; existing bookings are unaffected. Use POST .../restore to bring it back.

Requires the SETTINGS_MANAGE permission on the session type's site.

Path parameters

Responses

  • 204

    Session type deleted successfully.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

post/shop/session-types/{sessionTypeId}/copy

Copy a session type

copySessionType

Duplicate an existing SessionType to bootstrap a near-identical variant. Any properties supplied in the request body override the source values on the copy. Use the include_price_rules and include_recurrence_groups query parameters to opt in to copying those related collections; by default only the core session type is duplicated.

Path parameters

Query parameters

Request body

  • idobject-idrequired

    Unique identifier of the session type. Returned from createSessionType; used to look up the type, manage its recurrence groups, set up bookings, and copy it.

  • namestringrequired

    The name of this session type

  • descriptionstringrequired

    A description of the session type

  • product_codestringrequired

    A custom product code for the session type.

  • currencystringrequired

    The ISO-4217 currency code in lower case

  • external_idstringrequirednullable

    An external identifier for this offering, used by integrations to map this SessionType to an external system.

  • hidden_on_schedulebooleanoptional

    When true, this session type is excluded from the staff schedule view in the admin UI even though sessions are still visible to customers and bookable. Used to keep operational sessions (e.g. private member-only programmes) off the main calendar without making them unbookable.

  • image_iduuidrequirednullable

    Media ID of the hero image for the session type, shown on the storefront listing and detail page. Upload via createMedia first and pass the returned ID here. Pass null to remove the image.

  • imageobjectoptional
  • offered_onlinebooleanrequired

    Whether this session type is bookable online

  • privatebooleanrequired

    Whether this is private. When private, it is accessible from the URL but doesn't appear on category pages and isn't indexed on search engines.

  • site_iduuidrequired

    Identifier of the site this session type is published at. Session types are scoped per site so each venue can run its own programme; the type's bookings, capacity, and pricing are managed against this site.

  • durationintegerrequired

    The duration of the session type.

  • Limit the number of baskets that may create bookings for a single session.

  • The maximum time before a session's start time that it may be booked, as an ISO8601 string. See https://en.wikipedia.org/wiki/ISO_8601#Durations

  • The minimum time before a session's start time that it may be booked, as an ISO8601 string. See https://en.wikipedia.org/wiki/ISO_8601#Durations

  • customers_onlybooleanoptional

    Whether this session requires the customer to be logged in to book.

  • members_onlybooleanrequired

    Whether this session requires an active membership in order to book.

  • The maximum number of bookings a member may make on a single session.

  • If this session is for members only, this property may be used to restrict the offering further so it may only be booked by active members with of one of the given membership types.

  • Whether membership-specific booking windows should be enabled for this session type.

  • Whether bookings of this type may be cancelled online by customers. A value of unpaid means this booking my be cancelled only if no payments have been recorded against the order it is part of.

    Possible values:alloweddisallowedunpaid
  • The minimum duration that must be left before the booking in order for the customer to cancel, as an ISO8601 string. See https://en.wikipedia.org/wiki/ISO_8601#Durations

  • waitlist_enabledbooleanrequired

    Whether the waitlist is enabled for sessions of this type.

  • min_guestsintegerrequired

    The minimum guests allowed in a booking for this session

  • max_guestsintegerrequired

    The maximum guests allowed in a booking for this session

  • max_per_basketintegerrequirednullable

    Maximum number of times this session type can appear in a single basket. Null = unlimited. Use to throttle blanket bookings of capacity-constrained sessions.

  • max_per_guestintegerrequirednullable

    Maximum number of times this session type can be assigned to a single guest within a basket. Null = unlimited. Defends against accidental duplicate bookings of the same guest.

  • price_rulesobject[]required

    The rules defining prices for this session type.

  • category_idsstring[]required

    The category IDs associated with this session type

  • categoriesobject[]required

    The category associated with this session type

  • recurrence_groupsobject[]optionalDeprecated

    An array of recurrence groups for this session type

  • metaobjectrequired
  • upsell_offeringsobject[]required
  • cross_sell_offeringsobject[]required
  • revenue_centrestringrequired

    The revenue centre to assign revenue to for this offering

  • Whether the booking engine calendar should display pricing under each date

  • visibilitystringrequired

    Visibility on the shopfront. public = listed in search and browse; link_only = bookable only via direct link (excluded from search/browse); private = admin-only, never offered to customers.

    Possible values:link_onlyprivatepublic
  • updated_atdate-timerequired

    The time and date that the appointment type was last updated.

  • deleted_atdate-timerequirednullable

    The time and date that the appointment type was archived.

Responses

  • 201

    The SessionType was successfully copied.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

post/shop/session-types/{sessionTypeId}/restore

Restore a deleted session type

restoreSessionType

Un-deletes a previously soft-deleted SessionType. Past bookings are unaffected by either the delete or the restore; future session occurrences resume being offered once active recurrence groups are restored too.

Requires the SETTINGS_MANAGE permission on the session type's site. No request body.

Path parameters

Responses

  • 200

    The session type was restored successfully.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

get/shop/session-types/{sessionTypeId}/price-rules

List price rules for a session type

listSessionTypePriceRules

Returns all PriceRules configured for a SessionType, filterable by date range and weekday. Price rules let you charge different prices for the same session type at different times — peak vs off-peak, weekday vs weekend, seasonal overrides. The first rule whose conditions match the session occurrence wins.

Path parameters

Query parameters

  • date_fromdateoptional

    Restrict results to those on or after this date, ISO-8601 YYYY-MM-DD.

  • date_todateoptional

    Restrict results to those on or before this date, ISO-8601 YYYY-MM-DD.

  • weekdaysstring[]optional

    Filter for price rules that are apply on any of the given weekdays.

  • pageintegeroptional

    The page to retrieve results from

  • per_pageintegeroptional

    The number of results to return per page

Responses

  • 200

    A list of price rules for a session type.

  • 401

    The user is unauthenticated

  • 404

    The resource couldn't be found

post/shop/session-types/{sessionTypeId}/price-rules

Create a price rule for a session type

createSessionTypePriceRule

Adds a new PriceRule to a SessionType. Filters (date range, time range, weekdays) combine to express common pricing scenarios. The first rule whose conditions match a given session occurrence determines the price; omitting all filters creates a fallback "always applies" rule.

Requires the SETTINGS_MANAGE permission on the session type's site.

Path parameters

Request body

  • priceintegerrequired

    Price in the smallest currency unit (e.g. pence, cents). 4800 means £48.00 in a GBP-denominated site.

  • date_fromdateoptionalnullable

    First date this rule applies (inclusive). Defaults to today in the site's timezone if omitted.

  • date_todateoptionalnullable

    Last date this rule applies (inclusive). When omitted, the rule has no end date.

  • time_fromstringoptionalnullable

    Start of the time-of-day window in 24-hour HH:MM.

  • time_tostringoptionalnullable

    End of the time-of-day window in 24-hour HH:MM. Must be later than time_from.

  • weekdaysstring[]optionalnullable

    Days of the week the rule applies on. Empty/null means every day.

Responses

  • 201

    A single PriceRule on a SessionType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

get/shop/session-types/{sessionTypeId}/price-rules/{priceRuleId}

Retrieve a price rule

getSessionTypePriceRule

Returns a single PriceRule belonging to the given SessionType.

Path parameters

  • sessionTypeIdobject-idrequired

    The ID of the session type

  • priceRuleIdobject-idrequired

    The unique identifier of the price rule.

Responses

  • 200

    A single PriceRule on a SessionType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

put/shop/session-types/{sessionTypeId}/price-rules/{priceRuleId}

Update a price rule

updateSessionTypePriceRule

Partially updates a PriceRule. Every field is optional; omitted fields keep their current values. Requires the SETTINGS_MANAGE permission on the session type's site.

Path parameters

  • sessionTypeIdobject-idrequired

    The ID of the session type

  • priceRuleIdobject-idrequired

    The unique identifier of the price rule.

Request body

  • priceintegeroptional

    Price in the smallest currency unit.

  • date_fromdateoptionalnullable

    First date this rule applies.

  • date_todateoptionalnullable

    Last date this rule applies.

  • time_fromstringoptionalnullable

    Start of the time-of-day window in HH:MM.

  • time_tostringoptionalnullable

    End of the time-of-day window in HH:MM.

  • weekdaysstring[]optionalnullable

Responses

  • 200

    A single PriceRule on a SessionType.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found

  • 422

    The request didn't pass validation

delete/shop/session-types/{sessionTypeId}/price-rules/{priceRuleId}

Delete a price rule

deleteSessionTypePriceRule

Removes a PriceRule from a SessionType. Past bookings already priced under this rule are unaffected — they retain the price set at booking time. Future sessions are repriced using whatever rules remain.

Path parameters

  • sessionTypeIdobject-idrequired

    The ID of the session type

  • priceRuleIdobject-idrequired

    The unique identifier of the price rule.

Responses

  • 204

    Price rule deleted successfully.

  • 401

    The user is unauthenticated

  • 403

    The authenticated user does not have permission.

  • 404

    The resource couldn't be found