---
title: "Get all practitioners"
method: GET
path: "/shop/practitioners"
tags: ["Practitioners"]
---

# Get all practitioners

`GET /shop/practitioners`

Use this endpoint to retrieve all practitioners (paginated)

## Query parameters

- `page` integer
- `per_page` integer
- `site_id` string
- `query` string
- `zone_ids` string[]

## Response `200`

A list of practitioners (paginated)

- object — Paginated envelope mixin. `allOf` this into any list response that wraps its `data` array with `meta` + `links`; the concrete schema keeps its own title so the SDK surface is unchanged, while the `meta` / `links` shape is sourced from a single definition.
  - `links` PaginationLinks, required — Hypermedia navigation links for paging through a list response. Each property is a fully-qualified URL that preserves the original query string (filters, sort, page size) and only swaps the `page` parameter. `next` and `prev` are `null` at the ends of the result set; `first` and `last` are always present.
    - `first` string, required — The url of the first page for the paginated results set
    - `next` string, nullable, required — The url of the next page for the paginated results set
    - `prev` string, nullable, required — The url of the previous page for the paginated results set
    - `last` string, required — The url of the last page for the paginated results set
  - `meta` PaginationMeta, required — Counts and positional information for the current page of a list response. Use `current_page` and `last_page` to drive pagination UI, `total` for result counts, and `per_page` to confirm the page size the server actually applied (which may differ from the requested value when capped).
    - `from` integer, required — The item number from which this results set starts from
    - `to` integer, required — The item number from which this results set ends at
    - `total` integer, required — The total number of results
    - `current_page` integer, required — The current page number
    - `last_page` integer, required — The page number of the last result set
    - `per_page` integer, required — The number of results per page
    - `path` string, required — The path of this api request
  - `data` Practitioner[], required
    - `id` string, object-id, required — Stable identifier for the practitioner. Used when assigning sessions, appointments and rotas to the practitioner, and when the booking storefront resolves a slot to a specific staff member.
    - `appointment_restrictions` PractitionerAppointmentRestriction[], required
      - `id` string, required — The ID of the restriction
      - `applies_to_type` 'specific' | 'categories', required — The type of the restriction
      - `appointment_type_ids` string[] — The IDs of appointment types that this restriction applies to
      - `appointment_types` object[] — The appointment types associated with this product
        - `id` string, required
        - `name` string, required
      - `categories` object[] — The category associated with this product
        - `id` string, required
        - `name` string, required
      - `category_ids` string[] — The IDs of categories that this restriction applies to
      - `date_from` string, date, required — The first day that this restriction should apply
      - `date_to` string, date, required — The last date that this restriction should apply
      - `max_duration` integer — For a `max_duration` rule, this specifies the maximum number of minutes of the appointment type that the practitioner may offer each day.
      - `occupied_mins` integer
      - `type` 'cannot_offer' | 'max_duration' — The type of the restriction
    - `avatar` Media
      - `id` string, uuid, required — Unique identifier of the uploaded media item, returned from `createMedia`. Pass this ID into any field that accepts a media reference (logos, hero images, product images, etc.).
      - `file_name` string, required — Original filename of the uploaded asset, preserved as provided at upload time. Used for display in the media library and as a hint when serving downloads.
      - `mime_type` string, required — The mime type of the media item.
      - `original_url` string, required — The url of the media resource.
      - `size` integer, required — The size of the media item in bytes.
      - `url` string, required — The url of the converted media resource.
    - `signature` Media
      - `id` string, uuid, required — Unique identifier of the uploaded media item, returned from `createMedia`. Pass this ID into any field that accepts a media reference (logos, hero images, product images, etc.).
      - `file_name` string, required — Original filename of the uploaded asset, preserved as provided at upload time. Used for display in the media library and as a hint when serving downloads.
      - `mime_type` string, required — The mime type of the media item.
      - `original_url` string, required — The url of the media resource.
      - `size` integer, required — The size of the media item in bytes.
      - `url` string, required — The url of the converted media resource.
    - `can_offer_tags` string[], required
    - `gender` string, nullable — Self-identified gender of the practitioner, surfaced to guests who filter the booking storefront by practitioner gender. Free text — common values are `female`, `male` and `non-binary`. `null` when the practitioner hasn't supplied a value.
    - `name` string, required — Public display name of the practitioner. Shown to guests on the booking storefront and on receipts. Should be the name the practitioner wants to appear in front of guests — typically first name plus last initial or full name.
    - `registration_number` string, nullable — Optional registration or license number for the practitioner. Used to track professional credentials or qualifications.
    - `organisation_id` string, uuid, required — Organisation the practitioner belongs to. Practitioners are scoped to a single organisation and are not visible to API callers from other organisations.
    - `site_ids` string[], required
    - `tag_ids` string[], required
    - `tags` Tag[], required
      - `id` string, required
      - `name` string, required
      - `organisation_id` string, required
    - `zones` Zone[], required
      - `id` string, object-id, required — Unique identifier for the zone.
      - `name` string, required — Display name for the zone, shown wherever zones are listed or filtered. Plain text only.
      - `organisation_id` string, uuid, required — ID of the organisation that owns this zone. Inherited from the site on create.
      - `site_id` string, uuid, required — ID of the site this zone belongs to.
    - `commission_package_id` string, mongo-id, nullable — The commission package to use for this practitioner. If not set, the practitioner's default commission package will be the site's default commission package (as defined by `ShopSite.default_commission_package_id`).
    - `external_id` string, nullable, required — Optional external identifier for the practitioner, used to correlate this record with an entry in a third-party system (e.g. a PMS, payroll provider, or CRM). Not interpreted by the platform — treated as an opaque string.
    - `user_id` string, uuid, nullable, required — Staff `User` linked to this practitioner record, if any. Linking lets the user manage their own rota and view their appointments from the staff console. `null` for practitioners that don't have a login account.
    - `created_at` string, date-time, required — When then resource was created.
    - `updated_at` string, date-time, required — When then resource was last updated.

## Other responses

- `401` — The user is unauthenticated

---

[API](https://skmtc.dev/try/apis/trybe-api.md) · [All operations](https://skmtc.dev/try/apis/trybe-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/try/trybe-api/revisions/f37f92702da5/schema)
