---
title: "Create a practitioner rota"
method: POST
path: "/shop/practitioner-rotas"
tags: ["PractitionerRotas"]
---

# Create a practitioner rota

`POST /shop/practitioner-rotas`

Creates a new `PractitionerRota` for the practitioner identified
by `practitioner_id` in the request body. Equivalent to calling
the nested `POST /shop/practitioners/{practitionerId}/rotas`
endpoint but doesn't require the practitioner ID in the URL.

## Request body

- object
  - `practitioner_id` string, object-id, required — Practitioner the new rota applies to. The caller must have `SCHEDULE_MANAGE` (or equivalent) on every site the practitioner works at — otherwise the request is rejected with `403`.
  - `start_date` string, date, nullable — The date from which this rota is active (YYYY-MM-DD).
  - `end_date` string, date, nullable — The date on which this rota ends. Omit or pass null for an open-ended rota.
  - `scheduling_week_interval` integer, required — The number of weeks in the rolling schedule cycle.
  - `availability_rules` PractitionerRotaAvailabilityRule[], required — The availability rules for this rota.
    - `week_num` integer, required — The week number within the rota cycle that this rule applies to (1-indexed).
    - `weekday` 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday', required — The day of the week this rule applies to.
    - `time_from` string, required — The start time of the availability window in HH:MM format.
    - `time_to` string, required — The end time of the availability window in HH:MM format.
    - `offerings` OfferingIdentifier[] — The offerings the practitioner is assigned to during this window. An empty array means the practitioner is not linked to specific offerings for this window.
      - `offering_id` string, mongo-id, required — The ID of the offering.
      - `offering_name` string, required — The name of the offering.
      - `offering_type` 'appointment' | 'appointment_enquiry' | 'area_booking' | 'course' | 'hotel_room_reservation' | 'membership' | 'package' | 'product' | 'session' | 'table_reservation' | 'voucher', required — Discriminator describing what kind of sellable item an `Offering` represents. The value determines which downstream schema (`Appointment`, `Session`, `Package`, etc.) the offering's `offering_id` resolves against, and which checkout/booking flow applies.

## Response `201`

A single `PractitionerRota` object.

- object
  - `data` PractitionerRota, required — A `PractitionerRota` defines a practitioner's recurring availability schedule over a date range.
    - `id` string, object-id, required — The ID of the rota.
    - `practitioner_id` string, object-id, required — The ID of the practitioner this rota belongs to.
    - `start_date` string, date-time, nullable, required — The date from which this rota is active.
    - `end_date` string, date-time, nullable, required — The date on which this rota ends. Null indicates an open-ended rota.
    - `scheduling_week_interval` integer, required — The number of weeks in the rolling schedule cycle (e.g. 2 for a fortnightly rota).
    - `availability_rules` PractitionerRotaAvailabilityRule[], required — The availability rules that define when the practitioner is available within the rota cycle.
      - `week_num` integer, required — The week number within the rota cycle that this rule applies to (1-indexed).
      - `weekday` 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday', required — The day of the week this rule applies to.
      - `time_from` string, required — The start time of the availability window in HH:MM format.
      - `time_to` string, required — The end time of the availability window in HH:MM format.
      - `offerings` OfferingIdentifier[] — The offerings the practitioner is assigned to during this window. An empty array means the practitioner is not linked to specific offerings for this window.
        - `offering_id` string, mongo-id, required — The ID of the offering.
        - `offering_name` string, required — The name of the offering.
        - `offering_type` 'appointment' | 'appointment_enquiry' | 'area_booking' | 'course' | 'hotel_room_reservation' | 'membership' | 'package' | 'product' | 'session' | 'table_reservation' | 'voucher', required — Discriminator describing what kind of sellable item an `Offering` represents. The value determines which downstream schema (`Appointment`, `Session`, `Package`, etc.) the offering's `offering_id` resolves against, and which checkout/booking flow applies.

## Other responses

- `401` — The user is unauthenticated
- `403` — The authenticated user does not have permission.
- `404` — The resource couldn't be found
- `422` — The request didn't pass validation

---

[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)
