> ## Documentation Index
> Fetch the complete documentation index at: https://docs.guile.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Services overview

> Create shop services, assign them to barbers, and control visibility and price

Use the Services API to define what a shop offers, then assign those services to barbers. Shop services hold the shared catalog; barber assignments control who can sell each service and at what price.

## What you do first

1. Create the shop service with name, description, duration, base price, and categories. A service can be a base offering, an add-on, or a bundle of a base plus add-ons at a fixed price.
2. Set shop-level visibility to `visible` when the catalog entry is ready (new services are **hidden by default**).
3. Assign the service to one or more barbers (batch of 1-25). Set barber visibility and optional price overrides on assign.
4. Set each barber's visibility to `visible` when that barber is ready to offer it.

Assignment can partially succeed: completed assignments stick, and failed ones return problem detail per item.

## States that matter

| Level             | What you control                                                             |
| ----------------- | ---------------------------------------------------------------------------- |
| Shop service      | Name, description, duration, categories, bundled add-ons, shop visibility    |
| Barber assignment | Visibility (`visible` / `hidden`) and price override when the shop allows it |

Only visible shop services appear in shop listings. Only visible barber services appear in that barber's booking menu. Barbers cannot change name, description, duration, categories, or bundled add-ons, update the shop service for those.

**Service kinds**

* **Base**: bookable alone (for example a haircut).
* **Add-on**: enhances an appointment; default price and duration apply when selected alone, and are ignored when the add-on is inside a bundle.
* **Bundle**: fixed total for a base plus included add-ons. Included add-ons cannot be removed; customers can still add other add-ons for extra cost. Bundles cannot nest and cannot act as add-ons.

Bundle duration should reflect the sum of included services. On customer-created appointments, prices and durations use system values (with barber overrides). On barber-created appointments, the barber can override the overall appointment price and duration.

## When a call fails

Failures come back as problem documents. Open the `type` link for the cause, the fix, and whether retrying is safe. If a barber lacks permission to set custom prices, the API returns `422` with a problem body, visibility changes still work for every barber.

## Related paths

* [Appointments](/api-reference/Appointments/overview): booking uses the services a barber has visible
* [Problem types](/api-reference/problems): how to read a failure
