# Every setting on a service

> The complete reference for a service — all four pricing models, per-person prices and durations, buffers, combos, add-ons, resources and archiving. Every field, what it changes, and what happens when it is left empty.

_Last verified: 2026-09-10. Source: https://bookodile.com/docs/reference-services_

A service is the thing a customer books, and it is the most configurable object
in Bookodile. This page lists every setting on one, what each changes, and what
happens when it is left alone. Where a setting has a name in the data, it is
given in `code`, so an assistant answering a question about your account can be
precise.

Services live at **Services** in the dashboard. The settings below are on the
add and edit screens; ordering and archiving are on the list itself.

## The two price settings, and why there are two

The single most common confusion on this page. There are two independent
settings and they answer different questions:

| Setting | Question it answers |
|---|---|
| **Pricing model** (`pricing_model`) | How the price is *worked out* when someone books |
| **Price type** (`price_type`) | How the price is *displayed* before they book |

So a service can advertise "from €25" while the real charge is resolved from
whichever person the customer picked. That is deliberate, and it means changing
what is displayed does not change what is charged.

### The four pricing models

**Fixed** (`pricing_model: fixed`). One price for everyone, held in `price`.

**Per employee** (`per_employee`). Each assigned person has their own price for
this service. The customer sees each person's price while choosing.

**Per category** (`per_category`). The price is stored once per *category of
team member* rather than per person, so a new hire is priced the moment you put
them in a category. Two prices to maintain instead of eight.

**Hourly** (`hourly`). A rate per hour in `hourly_rate`, with `min_hours` and
`max_hours` bounding what the customer may choose. The customer picks the
length and the price is the rate times the hours. Used for rooms, studios,
courts and equipment rather than treatments.

> **Worked example — the same setting in three trades.** A barbershop puts its
> master barber at €35 and its junior at €20 for the same cut: *per employee*.
> A hair salon with eight stylists in two grades sets Senior €45 and Junior €30
> once and never touches it again when someone joins: *per category*. A photo
> studio renting its space at €50 an hour, minimum two, maximum eight: *hourly*.

### What each price type shows, and what it charges

`price_type` changes the label on your booking page. Three of the five leave the
amount alone. The other two say there is nothing to charge, and they are
honoured wherever they appear.

| Price type | The customer sees | The booking is recorded at |
|---|---|---|
| Fixed | `€25` | `price` |
| From | `€25+` | `price` — the floor |
| Range | `€30 – €60` | `price` — the **low** end. `price_max` is never charged |
| Free | "Free" | Zero, on every pricing model |
| On request | "On request" | Zero on a fixed price. The person's own rate on per-person or per-category pricing |

Three of these are worth pausing on.

**Range** shows a span and records the bottom of it. The span is a quote, not a
calculation: whoever performs the service adjusts the price afterwards if it
lands higher. If you never adjust it, you are billing the floor.

**On request** on a fixed price records nothing to pay. The booking arrives at
zero and you set the amount once you have seen the job. Moving a €25 service to
"On request" does not carry the €25 over: the customer was shown no figure, so
they are not billed one. A groomer quoting per animal and a garage quoting per
repair both work this way — the slot is booked, the price is agreed in person.

On per-person or per-category pricing, "On request" hides the figure from the
service list only. Each person's own rate is still real and still charged, and
the total on the confirmation step shows that number before the customer
commits. Use it where a rate is not what you want a visitor to read first: a
clinic listing consultants and a studio listing senior stylists both price by
who does the work without advertising the spread.

**Free** genuinely charges nothing, and it beats the pricing model. A service
marked Free that also carries per-person rates is free for everyone on it, and
free by the hour costs nothing however many hours are booked. The option appears
on fixed pricing; a service that reaches another model still marked Free — by
changing how it is priced afterwards — stays free. Saving a service as Free asks
you to confirm, because it is easy to reach by accident.

## Duration, and how it differs from price

**Duration** (`duration`) is how long the service takes, in minutes, from 5 to
480.

**How long does this service take** (`duration_mode`) has two settings, exactly
like pricing:

- **Same for everyone** — one duration for the whole team.
- **Per employee** — each person can carry their own duration for this service.

**A missing per-person duration and a missing per-person price behave
oppositely, and this is the most useful thing on the page:**

| | Per-person **price** missing | Per-person **duration** missing |
|---|---|---|
| On the settings screen | Blocks saving | Saves fine |
| On your booking page | That person **disappears from the picker** | That person is offered, timed by the service's own duration |
| Meaning | Broken setup | "Same as everyone" |

That asymmetry is on purpose. A missing price has no correct answer, so the
product refuses to guess and hides the person rather than letting a customer
reach a dead end. A missing duration has an obvious correct answer — the
service's own — so it is simply used.

The practical consequence is that per-person duration is **additive**: switch
the mode on, type a longer time next to the one person who needs it, and
everybody else is timed exactly as they were before. Nothing to backfill.

> **Worked example — why price and duration are separate axes.** In a
> barbershop, a junior barber charges less than the master *and* takes longer
> for the same cut: both settings change. In a physiotherapy clinic every
> practitioner charges the identical published fee, but the newest one is given
> 60 minutes for an assessment the senior does in 45: duration changes, price
> does not. Tying the two together would force one of these shops to lie.

Per-employee duration does not apply to combos, where each stage carries its
own timing, or to hourly services, where the customer chooses the length.

## Buffer time

**Buffer time** (`buffer_time`), 0 to 120 minutes, is real time that blocks your
calendar after the service ends — for cleaning down, resetting a room or taking
a breath. The customer never sees it and is never charged for it.

A 30-minute service ending at 10:30 with a 15-minute buffer means the same
person cannot start again until 10:45. If the service used a room, the room is
held for the buffer too.

**The buffer is allowed to run past your closing time.** A 30-minute service at
a shop closing at 17:00 can start at 16:30; the buffer simply extends past
close and blocks nothing, because there is nothing after it. Only the service
itself must fit inside opening hours.

## Who performs it

The **Who does this service** card is the list of people who can be booked for
it. Three things have to be true before a customer is offered someone: the
person is active, their role is listed as a service provider, and they are
ticked here.

Assignment is per service. There is no "assign to everything" that keeps
applying as you add services.

**If nobody is ticked, everybody is eligible.** That is correct for a
one-person business and becomes wrong the day they hire, so tick people
deliberately once you have a team.

When a customer does not choose a person, Bookodile picks the first eligible
one who is free — in your roster order, not by who finishes earliest. Ordering
by finish time would systematically starve whoever is slowest, which is usually
the newest member of the team.

## Rooms, chairs and equipment

The **Resources** card links a service to the things it needs — a room, a
chair, a machine. The card only appears once you have created at least one
resource.

A service can also inherit resources from its category, shown as read-only
chips. The pool a booking actually uses is the union of both.

**No employee needed** (`skip_employee`) removes the "who will serve you?" step
entirely, so availability comes from the resource alone. That is how a studio
rents a room, or a venue rents a court, with nobody attending.

> **Worked example.** A nail studio has six technicians and four manicure
> stations: the stations are resources, and the fifth simultaneous booking is
> refused however many staff are free. A yoga studio rents its second room by
> the hour with nobody teaching: that service has "no employee needed" ticked
> and a room attached.

Detail: [every setting on a resource](/docs/reference-resources).

## Categories

A category groups services on your booking page and sets an add-on default for
everything inside it. `service_category_id` is the link; a service with no
category renders in an unlabelled group at the top of your page.

**Archiving a category archives the services inside it**
(`archived_with_category` records which ones went that way, so restoring the
category brings back exactly those and not any service you had archived
individually beforehand).

**Restoring a single service out of an archived category** brings it back on
its own. It is bookable again and renders in the unlabelled group at the top of
your booking page, and of your services list, until you restore the category —
then it rejoins it. Only a service's own **Active** switch decides whether it
can be booked; archiving a category archives the services inside it and hides
the heading, it is not a second switch. A service you restore by hand is no
longer counted as archived with its category, so archiving it again on its own
keeps it archived through a later category restore.

## Combos

**Combo** (`is_combo`) chains several stages into one booking. Each stage has
its own name, its own length, and optionally its own team member and its own
room — so a colour-and-cut can be two people back to back, and each person is
occupied only for their own stage.

Three things a combo forces, because they cannot mean anything else:

- The price becomes **fixed** — a combo cannot be priced per person.
- The total `duration` is the sum of the stages, overwriting whatever was
  typed.
- Per-employee duration is switched off; the stages carry the timing.

> **Worked example.** A hair salon books colour with the colourist, then a
> 20-minute development with nobody, then a cut and finish with a stylist. The
> colourist is free during the development and can start someone else; the
> stylist is only occupied for the last stage.

## Add-ons offered while booking

Add-ons are extra services offered during the booking flow, either listed
directly on a service or inherited from a category.

**Maximum add-on services per booking** (`max_upsells`) caps how many a
customer may attach. A service with no limit of its own falls back to its
category's default; with neither set, and add-ons available, the booking page
offers up to three. `upsell_group_order` records the order the add-on groups
appear in when they come from several categories.

Add-ons are scheduled **after** the service they hang off. Anything that
naturally happens first cannot be an add-on, however much you would like to
sell it that way. The pattern that works is a base service that deliberately
leaves something out, sold back at the end: a cut without a wash, with the wash
and the wash-plus-massage as the add-ons.

An hourly service can never offer add-ons.

## The rest of the fields

**Name** (`name`) and **Description** (`description`). The description shows as
two lines under the service name on your booking page and is cut off after
that, with no way for the customer to read the rest — keep it short.

**Colour** (`color`) is the block colour on your calendar. It has no effect on
the booking page.

**Active** (`is_active`) is the archive switch. An archived service disappears
from your booking page and keeps every booking it ever had.

**Requires online payment** (`requires_payment`), and the deposit fields
(`deposit_type`, `deposit_amount`), exist in the data but are **not available**:
Bookodile does not process payments, no screen writes them, and nothing acts on
them. See [Money](/docs/payments-and-money).

## Worked examples

**A barbershop, four barbers, three chairs.** Haircut is priced *per employee*
— master €35, senior €28, two juniors €20 — and timed *per employee*, with the
juniors at 45 minutes against the master's 30. Buffer 5 minutes. The three
chairs are resources, so the fourth simultaneous booking is refused even though
four barbers are on shift. Beard trim is a €12 fixed-price add-on on the
haircut, so it is offered after it and extends the appointment.

**A hair salon, eight stylists, two grades.** Every service is priced *per
category*: Senior and Junior, set once. Colour is a combo — colourist, then a
25-minute development stage with nobody assigned, then cut and finish — so the
colourist takes another client during the development. Blow-dry is an add-on
with a 10% upsell discount.

**A nail studio, six technicians, four stations.** Services are fixed-price
because the price does not vary by person. The four stations are resources with
capacity one each, which is also what the bill is based on: four booking spots,
not six technicians. Gel removal is an add-on capped at two per booking.

**A physiotherapy practice, three rooms.** Assessment is 60 minutes, follow-up
30, both fixed-price. Duration is *per employee* so the newest practitioner
gets 75 minutes for an assessment. Each service needs a treatment room, so
three concurrent appointments is the ceiling regardless of who is working.

## Limits

- **A service uses one pricing model at a time.** There is no "per employee,
  except on Tuesdays".
- **Price and duration modes are set separately.** Being priced per employee
  does not make a service timed per employee.
- **There is no per-service opening window.** A service cannot be restricted to
  certain days or times of its own. To offer something only on Tuesday
  evenings, attach it to a resource whose working hours are just those windows.
- **`price_max` is display only** and is never the amount recorded.
- **Deposits and required payment are not available**, whatever the settings
  screen's data suggests.
- **Add-ons come after the service**, never before it.
- **An hourly service cannot have add-ons**, and cannot use per-employee price
  or duration.
- **Archiving is not deleting.** Bookings keep their service, and the history
  stays intact.
- **Bookodile does not take the money.** Everything here decides what is quoted
  and recorded; collecting payment is between you and your customer.
