---
title: "Get All Services"
method: GET
path: "/v1/smb/services"
tags: ["smb", "SMB"]
---

# Get All Services

`GET /v1/smb/services`

## Request

- Base URL: `https://api.elevenlabs.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.elevenlabs.io/v1/smb/services`
- Auth: none declared

Get all services for the current workspace with optional filters

## Query parameters

- `staff_id` string, nullable
- `asset_id` string, nullable
- `is_active` boolean, nullable
- `kind` 'classic' | 'rental' | 'group': Discriminator for the bookable-service shape. - ``CLASSIC``: staff-delivered service (haircut, consultation, massage, ...). - ``RENTAL``: asset-based reservation (court, room, equipment). - ``GROUP``: multi-participant session (class, workshop, tour).

## Headers

- `xi-api-key` string, nullable: Your API key. This is required by most endpoints to access our API programmatically. You can view your xi-api-key using the 'Profile' tab on the website.
- `xi-workspace-id` string, nullable: The customer workspace a reseller's API key acts on.

## Response `200`

Successful Response

- SMBServiceDBModel[]
  - `pricing_mode` 'fixed' | 'quote': Whether a catalog item's price and duration are known up front. Orthogonal to :class:`SMBServiceKind`, which describes the *resource* model (staff / asset / seats) rather than the price. A quotable service can still be staff-delivered or asset-based, so this cannot be folded into the kind discriminator. - ``FIXED``: catalog price and duration apply (the default, and every pre-existing item). - ``QUOTE``: neither is knowable until the owner has seen the job. The agent collects intake answers and files a quote request instead of booking a slot or taking an order.
  - `intake_questions` SMBIntakeQuestion[]: Questions the agent asks before booking or ordering this item. Required for a useful ``pricing_mode='quote'`` item -- without them a quote request arrives with nothing to price -- but also valid on fixed-price items that need extra detail (current hair color before a dye job, allergies before a treatment).
    - `id` string: Stable identifier referenced by stored answers. Survives label edits so history stays attributable to the right question.
    - `label` string, required
    - `kind` 'text' | 'number' | 'choice': Answer shape for a per-item intake question.
    - `options` StrippedStr[]: Allowed answers for ``kind='choice'``. Must be empty for the other kinds.
    - `required` boolean: On the public booking page this is enforced as a form constraint. On a voice call it is only an instruction to the agent: hard-rejecting a booking mid-conversation because the caller dodged a question is worse for the caller than a booking with a gap the owner can chase. Do not 'fix' this into a server-side constraint for the voice path.
    - `is_active` boolean: Retired questions are deactivated rather than deleted, so answers already stored against them keep resolving.
  - `groups` SMBGroupMembership[]: Group memberships for this item. Each entry carries the group label and the item's 0-based rank within that group.
    - `label` string, required
    - `rank` integer: 0-based display position within this group in the dashboard. Change it with the reorder endpoint; send back the value you read to keep the order, a membership sent without it goes to position 0.
  - `ungrouped_rank` integer, nullable: Display position among items with no group; `null` sorts last. Change it with the reorder endpoint.
  - `name` string, required
  - `description` string
  - `variants` SMBServiceVariant[], required
    - `id` string
    - `duration_minutes` integer, required
    - `price` number, nullable
    - `is_active` boolean
  - `kind` 'classic' | 'rental' | 'group': Discriminator for the bookable-service shape. - ``CLASSIC``: staff-delivered service (haircut, consultation, massage, ...). - ``RENTAL``: asset-based reservation (court, room, equipment). - ``GROUP``: multi-participant session (class, workshop, tour).
  - `buffer_minutes` integer: Turnover/cleanup time reserved after each booking. Applies to every service kind; default 0 means no buffer.
  - `service_location` 'business' | 'customer': Where a classic service is delivered.
  - `add_ons` SMBAddOn[]: Optional extras scraped from the website that can be attached to a booking of this service.
    - `id` string: Stable identifier used by booking requests and calendar snapshots. Survives name/price edits, so rebooking and reporting stay consistent.
    - `name` string, required
    - `description` string
    - `add_duration_minutes` integer: Minutes added to the parent booking when this add-on is selected.
    - `add_price` number: Amount added to the parent booking's total when this add-on is selected.
  - `max_participants` integer, nullable: Capacity for ``kind='group'``: how many seats a single session can sell across all registrations. Must be ``None`` for classic and rental services (those are always exclusive to one client per booking).
  - `capacity` integer, nullable
  - `is_active` boolean
  - `any_staff_member` boolean
  - `staff_ids` string[]: Staff assigned to this service; must be empty for kind='rental'.
  - `asset_ids` string[]
  - `advance_booking_minutes` integer: How far into the future customer-facing channels (public booking page, voice agent) may book this service. Applies to every kind.
  - `location_ids` string[]: Locations where this service is offered; empty list means all locations.
  - `display_on_booking_page` boolean
  - `travel_minutes` integer: Travel time in minutes added before/after appointments for customer-location services. Blocks the staff member's calendar but is not visible to the customer. Ignored when ``service_location='business'``.
  - `travel_before` boolean: Add travel time before the appointment (outbound trip).
  - `travel_after` boolean: Add travel time after the appointment (return trip).
  - `promotions` SMBServicePromotion[]: Time-bound discounts applicable to this service or specific variants.
    - `id` string
    - `name` string, required
    - `target` 'service' | 'add_on'
    - `variant_id` string, nullable: When set (target=service), the promotion applies only to this variant.
    - `add_on_id` string, nullable: When set (target=add_on), the promotion applies only to this add-on.
    - `promotional_price` number, required: The final price when this promotion is applied to a matching line item.
    - `days_of_week` integer[]
    - `start_date` string, date, required
    - `end_date` string, date, required
    - `is_active` boolean
  - `_id` string, required
  - `created_at_unix` integer: Unix timestamp (seconds since epoch)
  - `updated_at_unix` integer: Unix timestamp (seconds since epoch)
  - `duration_minutes` integer, required: Default option's duration; serialized for read compatibility.
  - `price` number, nullable, required: Default option's price; serialized for read compatibility.

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-28** `0e2bfc751634`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/elevenlabs/apis/elevenlabs-api-documentation/changes/v1/smb/services/get.md)

---

[API](https://skmtc.dev/elevenlabs/apis/elevenlabs-api-documentation.md) - [All operations](https://skmtc.dev/elevenlabs/apis/elevenlabs-api-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/elevenlabs/apis/elevenlabs-api-documentation/revisions/0e2bfc751634?raw)
