Skip to main content

Service Architecture

Services in Guile follow a two-level architecture:
  1. Shop Services - Created at the shop level with base configuration (name, description, duration, price, categories)
  2. Barber Service Assignments - Shop services are assigned to individual barbers, who can override visibility and pricing
This architecture allows shops to maintain consistent service offerings while giving barbers flexibility to customize their pricing and control which services they offer.

Creating Shop Services

When you create a service at the shop level, you define the name, description, base price, and duration. Services can be configured as standalone offerings, add-ons to enhance other services, or bundles that package multiple services together at a fixed price. The system supports flexible pricing strategies to match real-world barbering business models. Once created, shop services must be assigned to individual barbers before they can be booked. Barbers can customize the visibility and price of their assigned services.

Assigning Services to Barbers

After creating a shop service, you assign it to one or more barbers using the batch assignment endpoint. When assigning services, you can:
  • Assign multiple services (1-25) to a barber in a single request
  • Set initial visibility (visible or hidden) for each service
  • Set custom pricing that overrides the shop-level price
  • Receive detailed failure information if any assignments fail
Important: Services are hidden by default when created or assigned. You must explicitly set visibility to “visible” if you want the service to appear in booking menus immediately. This default behavior allows you to:
  • Prepare services before making them available to customers
  • Assign services to apprentice barbers who may not be ready to offer them yet
  • Control seasonal service availability (e.g., hide summer specials during winter)
  • Review and configure pricing before going live
The assignment operation supports partial success - if some services fail to assign (e.g., already assigned, not found), the successful assignments are still processed, and you receive detailed problem information for each failure.

Barber Service Overrides

Once a service is assigned to a barber, the barber can customize two aspects:
  • Visibility - Control whether the service appears in their booking menu (visible or hidden)
  • Price - Override the shop-level price with custom pricing (if permitted by the shop)
All other service properties (name, description, duration, categories, bundled add-ons) are managed at the shop level and cannot be modified by individual barbers. To update these properties, you must update the shop service itself. Note: Shops may restrict certain barbers (such as commission-based barbers) from setting custom prices. When a barber attempts to modify pricing but doesn’t have permission, the API will return a 422 Unprocessable Entity error. All barbers can control service visibility regardless of their pricing permissions.

Visibility and Service Listings

Service visibility determines where services appear:
  • Shop-level visibility - Only visible shop services are listed when querying shop services
  • Barber-level visibility - Only visible barber services are listed when querying a barber’s services
This two-level visibility system enables flexible scenarios:
  • An apprentice barber can hide advanced services they haven’t mastered yet
  • Shops can assign all services to new barbers but keep them hidden until training is complete
  • Seasonal services can be hidden during off-season months
  • Barbers can temporarily hide services when they’re fully booked or unavailable

Service Types

Base Services are standalone offerings like “Men’s Haircut” or “Beard Trim” that customers can book directly. These form the foundation of your service menu and can be booked independently without any additional services. Add-ons are services that enhance appointments, such as “Hot Towel” or “Scalp Massage.” Add-ons can be selected by customers when booking any appointment, or included automatically in bundles. When you create an add-on, you set a default price and duration, but these values are ignored when the service is included in a bundle. Bundles are packages that include a base service plus one or more add-ons at a fixed total price. For example, “Premium Haircut Package” might include a haircut, beard trim, and hot towel for $55. When customers book a bundle, the included add-ons cannot be removed, but they can add additional service add-ons for an extra cost.

Bundles and Duration

Bundle duration reflects the sum of all included services. If your base service takes 30 minutes and you include two add-ons (15 minutes and 5 minutes), the bundle duration would likely be set to 50 minutes. Customers who add optional services beyond the bundle will see the duration increase accordingly. When barbers create appointments manually, they can override the system-calculated duration if needed.

Pricing Strategies

Services have a base price set at the shop level. Individual barbers can override this price when the service is assigned to them, allowing for flexible pricing based on experience level or specialization. Add-ons maintain default prices that apply when customers select them individually. However, when an add-on is included in a bundle, its price is ignored—only the bundle’s total price matters. This lets you offer “free” add-ons as part of premium packages while still charging for those same add-ons when added to regular services. For appointments created by customers, all prices and durations use system-defined values (with barber-level overrides applied if set). For appointments created by barbers, the system suggests appropriate pricing, but barbers have full control to override the overall appointment price and duration. Note that barbers override the total appointment price, not individual service prices within the appointment.

Service Configuration

A service can function as a base service, an add-on, or both. For example, “Beard Trim” might be bookable as a standalone service ($15, 15 minutes) or offered as an add-on to a haircut. Cost and duration are optional fields since some add-ons may only exist within bundles and don’t need standalone pricing. Bundles cannot be nested — you cannot include one bundle inside another. Bundles also cannot function as add-ons to other services. This constraint keeps the service structure simple and predictable.

Best Practices

Shop-Level Service Management:
  • Set clear, descriptive names for your services so customers understand what they’re booking
  • Define base prices that work for most barbers in your shop
  • When creating bundles, price them to reflect value—customers should see a benefit compared to booking services separately
  • Calculate bundle durations carefully to ensure schedules remain accurate
  • Organize services by category to help customers make quick decisions
Barber-Level Customization:
  • Assign all relevant services to each barber when they join the shop
  • Remember that services are hidden by default - explicitly set visibility to “visible” when ready
  • Use visibility controls to hide services a barber doesn’t want to offer or isn’t ready to perform
  • Set custom pricing for barbers with different experience levels or specializations
  • Use batch assignment (up to 25 services at once) for efficiency when onboarding new barbers
  • Hide seasonal services during off-season to prevent customer bookings
Service Assignment Workflow:
  1. Create services at the shop level with base configuration (services are hidden by default)
  2. Set shop-level visibility to “visible” when ready to offer the service
  3. Assign services to barbers (individually or in batches)
  4. Set barber-level visibility to “visible” for services each barber is ready to perform
  5. Barbers customize pricing as needed for their experience level
  6. Update shop-level service properties (name, duration, etc.) when needed
  7. Barber-level overrides (visibility, price) persist through shop-level updates