Skip to main content
A Treatment is a service offered by a venue. Each venue has its own catalogue. Treatments can have variants (e.g. a “Swedish massage” with 30/60/90-minute options, or single / couple variants).
Prices are decimal amounts in the venue’s currency (e.g. 120.00 for 120 €), not integer cents. Pair each price with the treatment’s currency field.

The Treatment object

id
string
Stable, opaque identifier (UUID).
slug
string | null
Human-readable identifier for the treatment.
name
string
Display name in French.
name_en
string | null
Display name in English.
description
string | null
Description in French.
description_en
string | null
Description in English.
category
string | null
High-level grouping (e.g. massage, facial, body, ritual).
service_for
string | null
Intended audience: women, men, all, or couple.
duration
integer
Duration in minutes for the default variant.
price
number | null
Public price for the default variant, as a decimal amount in currency. null when price_on_request is true.
price_on_request
boolean
If true, price is not public and the customer must request a quote.
currency
string | null
ISO 4217 currency code for price (e.g. EUR).
lead_time
integer | null
Minimum number of minutes between “now” and the earliest bookable start. Used to prevent last-minute bookings.
image
string | null
Illustration URL.
sort_order
integer | null
Ordering hint within the catalogue (ascending).
is_bestseller
boolean
Merchandising flag surfaced by the venue.
is_addon
boolean
If true, this treatment can only be added to another booking, not booked alone.
is_bundle
boolean
If true, this entry represents a treatment package / cure rather than a single service.
bundle_id
string | null
When is_bundle is true, the id of the underlying bundle definition.
available_days
integer[] | null
Days of the week the treatment is bookable, 0 (Sunday) … 6 (Saturday). null means no per-treatment restriction.
variants
Variant[]
List of bookable variants. May be empty if the treatment has no explicit variants.

The Variant object

id
string
Variant identifier.
label
string
Variant label in French (e.g. 60 minutes, Duo).
label_en
string | null
Variant label in English.
duration
integer
Duration in minutes for this variant.
price
number | null
Price as a decimal amount in the treatment’s currency, or null if on request.
price_on_request
boolean
Whether this variant’s price is on request.
guest_count
integer
Number of guests this variant is designed for (typically 1 or 2).
is_default
boolean
Whether this is the variant shown by default.
sort_order
integer | null
Ordering hint among variants (ascending).

Example

{
  "id": "a1c2e3f4-5678-49ab-cdef-0123456789ab",
  "slug": "massage-suedois",
  "name": "Massage suédois",
  "name_en": "Swedish massage",
  "description": "Un massage relaxant aux huiles essentielles.",
  "description_en": "A relaxing massage with essential oils.",
  "category": "massage",
  "service_for": "all",
  "duration": 60,
  "price": 120.00,
  "price_on_request": false,
  "currency": "EUR",
  "lead_time": 120,
  "image": "https://xfkujlgettlxdgrnqluw.supabase.co/storage/v1/object/public/treatments/swedish.jpg",
  "sort_order": 1,
  "is_bestseller": true,
  "is_addon": false,
  "is_bundle": false,
  "bundle_id": null,
  "available_days": [1, 2, 3, 4, 5, 6],
  "variants": [
    {
      "id": "b2d3f4a5-6789-4abc-def0-123456789abc",
      "label": "60 minutes",
      "label_en": "60 minutes",
      "duration": 60,
      "price": 120.00,
      "price_on_request": false,
      "guest_count": 1,
      "is_default": true,
      "sort_order": 1
    }
  ]
}