---
title: "Create a booking"
method: POST
path: "/api/business/{businessId}/branch/{branchId}/booking"
tags: ["Booking"]
---

# Create a booking

`POST /api/business/{businessId}/branch/{branchId}/booking`

Create and return a booking with appointments for specified services

## Path parameters

- `businessId` string, required
- `branchId` string, required

## Query parameters

- `force_selected_time` boolean

## Request body

- BookingCreateRequest — booking details
  - `bookingStatus` 'ACTIVE' | 'RESERVED' | 'CANCELED'
  - `clientId` string, required — The unique identifier of the client for which this booking applies.
  - `note` string — The service/colour note to append for the client on the booking date. This is a write-only property
  - `schedules` ServiceSchedule[] — Deprecated - Use clientAppointmentSchedules instead. The list of services to schedule in one booking
    - `serviceId` string, required — The unique identifier for the service
    - `startTime` string, date-time, required — The time this service would start
    - `endTime` string, date-time — The time this service would end
    - `appointmentId` string — The unique identifier of the appointment that this service is scheduled for.
    - `staffId` string, required — The unique identifier of the staff member who would be performing the service
    - `roomId` string — The unique identifier of the room where the service would be performed
    - `machineId` string — The unique identifier of the machine which would be used to perform this service, if applicable for the service
    - `branchServiceGroupId` string — The unique identifier of the group to which this service belongs. Applicable only if this service is part of a grouping of services for the purpose of a package or special offer
    - `serviceGroupItemOptionId` string — The unique identifier of the option within the group to which this service belongs. Applicable only if this service is part of a grouping of services for the purpose of a package or special offer
    - `alternativeStaffMember` boolean — Will only be set to true if a staff member was specified in the request to perform the service but a different staff member was specified in the staffId field of the response. This will happen if the preferred staff member is unable to perform the service but another suitable staff member is available
    - `staffRequest` boolean — Set to true if a staff member was specified in the request to perform the service
    - `clientCourseItemId` string — The unique identifier of the course item id. If this is passed with a booking request, the system will try to deduct the service unit from the remaining number of units in the course.
    - `price` number — The price of the service. If this is passed with a booking request, it will override the system price. If not sent the price will be calculated automatically using the branches configuration
  - `clientAppointmentSchedules` ClientAppointmentSchedule[] — The list of appointment schedules per client
    - `clientId` string — The unique identifier of the client for which this service schedule applies. Only present if the request specified the client identifier as part of the service selections
    - `serviceSchedules` ServiceSchedule[] — Details of the schedule for the client's chosen set of services
      - `serviceId` string, required — The unique identifier for the service
      - `startTime` string, date-time, required — The time this service would start
      - `endTime` string, date-time — The time this service would end
      - `appointmentId` string — The unique identifier of the appointment that this service is scheduled for.
      - `staffId` string, required — The unique identifier of the staff member who would be performing the service
      - `roomId` string — The unique identifier of the room where the service would be performed
      - `machineId` string — The unique identifier of the machine which would be used to perform this service, if applicable for the service
      - `branchServiceGroupId` string — The unique identifier of the group to which this service belongs. Applicable only if this service is part of a grouping of services for the purpose of a package or special offer
      - `serviceGroupItemOptionId` string — The unique identifier of the option within the group to which this service belongs. Applicable only if this service is part of a grouping of services for the purpose of a package or special offer
      - `alternativeStaffMember` boolean — Will only be set to true if a staff member was specified in the request to perform the service but a different staff member was specified in the staffId field of the response. This will happen if the preferred staff member is unable to perform the service but another suitable staff member is available
      - `staffRequest` boolean — Set to true if a staff member was specified in the request to perform the service
      - `clientCourseItemId` string — The unique identifier of the course item id. If this is passed with a booking request, the system will try to deduct the service unit from the remaining number of units in the course.
      - `price` number — The price of the service. If this is passed with a booking request, it will override the system price. If not sent the price will be calculated automatically using the branches configuration
  - `bookingId` string

## Response `201`

Booking created successfully

- BookingResponse
  - `bookingStatus` 'ACTIVE' | 'RESERVED' | 'CANCELED'
  - `clientId` string, required — The unique identifier of the client for which this booking applies.
  - `note` string — The service/colour note to append for the client on the booking date. This is a write-only property
  - `schedules` ServiceSchedule[] — Deprecated - Use clientAppointmentSchedules instead. The list of services to schedule in one booking
    - `serviceId` string, required — The unique identifier for the service
    - `startTime` string, date-time, required — The time this service would start
    - `endTime` string, date-time — The time this service would end
    - `appointmentId` string — The unique identifier of the appointment that this service is scheduled for.
    - `staffId` string, required — The unique identifier of the staff member who would be performing the service
    - `roomId` string — The unique identifier of the room where the service would be performed
    - `machineId` string — The unique identifier of the machine which would be used to perform this service, if applicable for the service
    - `branchServiceGroupId` string — The unique identifier of the group to which this service belongs. Applicable only if this service is part of a grouping of services for the purpose of a package or special offer
    - `serviceGroupItemOptionId` string — The unique identifier of the option within the group to which this service belongs. Applicable only if this service is part of a grouping of services for the purpose of a package or special offer
    - `alternativeStaffMember` boolean — Will only be set to true if a staff member was specified in the request to perform the service but a different staff member was specified in the staffId field of the response. This will happen if the preferred staff member is unable to perform the service but another suitable staff member is available
    - `staffRequest` boolean — Set to true if a staff member was specified in the request to perform the service
    - `clientCourseItemId` string — The unique identifier of the course item id. If this is passed with a booking request, the system will try to deduct the service unit from the remaining number of units in the course.
    - `price` number — The price of the service. If this is passed with a booking request, it will override the system price. If not sent the price will be calculated automatically using the branches configuration
  - `clientAppointmentSchedules` ClientAppointmentSchedule[] — The list of appointment schedules per client
    - `clientId` string — The unique identifier of the client for which this service schedule applies. Only present if the request specified the client identifier as part of the service selections
    - `serviceSchedules` ServiceSchedule[] — Details of the schedule for the client's chosen set of services
      - `serviceId` string, required — The unique identifier for the service
      - `startTime` string, date-time, required — The time this service would start
      - `endTime` string, date-time — The time this service would end
      - `appointmentId` string — The unique identifier of the appointment that this service is scheduled for.
      - `staffId` string, required — The unique identifier of the staff member who would be performing the service
      - `roomId` string — The unique identifier of the room where the service would be performed
      - `machineId` string — The unique identifier of the machine which would be used to perform this service, if applicable for the service
      - `branchServiceGroupId` string — The unique identifier of the group to which this service belongs. Applicable only if this service is part of a grouping of services for the purpose of a package or special offer
      - `serviceGroupItemOptionId` string — The unique identifier of the option within the group to which this service belongs. Applicable only if this service is part of a grouping of services for the purpose of a package or special offer
      - `alternativeStaffMember` boolean — Will only be set to true if a staff member was specified in the request to perform the service but a different staff member was specified in the staffId field of the response. This will happen if the preferred staff member is unable to perform the service but another suitable staff member is available
      - `staffRequest` boolean — Set to true if a staff member was specified in the request to perform the service
      - `clientCourseItemId` string — The unique identifier of the course item id. If this is passed with a booking request, the system will try to deduct the service unit from the remaining number of units in the course.
      - `price` number — The price of the service. If this is passed with a booking request, it will override the system price. If not sent the price will be calculated automatically using the branches configuration
  - `bookingId` string

## Other responses

- `400` — Booking data is invalid, unable to create a booking
- `404` — Business or branch with the specified ids don't exist
- `429` — Request rate limit exceeded. Current limit set to 100 rps.
- `500` — An error occurred while trying to create a booking

---

[API](https://skmtc.net/phorest/apis/third-party-api.md) · [All operations](https://skmtc.net/phorest/apis/third-party-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/phorest/third-party-api/revisions/2218bc90d39c/schema)
