Phorest Bookings API

Booking creation and lifecycle, plus real-time availability checks.

Documentation

Specifications

OpenAPI Specification

phorest-bookings-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Phorest Third-Party Appointments Bookings API
  description: The Phorest API exposes a partner-gated business's salon/spa data - clients, appointments, bookings, staff, services, products, purchases, vouchers, loyalty, and reporting - for approved integrators. Access is granted by Phorest support on request (quoting a Phorest Account Number), not through self-service signup. Requests use HTTP Basic authentication with a `global/{email}` username and a Phorest-issued API password, and are scoped in the URL path to a `businessId` and, for most resources, a `branchId`. Endpoints, methods, and parameters in this document are transcribed from Phorest's public API reference at developer.phorest.com/reference; a small number of item-level paths (marked in their description) are modeled by convention from the confirmed collection-level siblings because Phorest's public reference does not expose every single-resource path in plain text.
  version: '1.0'
  contact:
    name: Phorest API Support
    email: api-requests@phorest.com
    url: https://developer.phorest.com/docs/getting-started
  license:
    name: Proprietary - partner access only
    url: https://developer.phorest.com/docs/requesting-assistance-with-the-phorest-api
servers:
- url: https://api-gateway-eu.phorest.com/third-party-api-server/api/business
  description: EU production gateway
- url: https://api-gateway-us.phorest.com/third-party-api-server/api/business
  description: US/AUS production gateway
- url: https://platform.phorest.com/third-party-api-server/api/business
  description: EU production alias documented in Phorest support articles
security:
- basicAuth: []
tags:
- name: Bookings
  description: Booking creation and lifecycle, plus real-time availability checks.
paths:
  /{businessId}/branch/{branchId}/appointments/availability:
    parameters:
    - $ref: '#/components/parameters/BusinessId'
    - $ref: '#/components/parameters/BranchId'
    post:
      operationId: checkAppointmentAvailability
      tags:
      - Bookings
      summary: Check appointment availability
      description: 'Returns available appointment slots for a set of requested services within a time window; optionally scoped to a client or an existing booking being rescheduled. Confirmed: developer.phorest.com/reference/checkappointmentavailability.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AvailabilityRequest'
      responses:
        '200':
          description: Appointment availabilities listed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  availableSlots:
                    type: array
                    items:
                      $ref: '#/components/schemas/AvailabilitySlot'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
  /{businessId}/branch/{branchId}/booking:
    parameters:
    - $ref: '#/components/parameters/BusinessId'
    - $ref: '#/components/parameters/BranchId'
    post:
      operationId: createBooking
      tags:
      - Bookings
      summary: Create a booking
      description: 'Creates a booking (one or more scheduled services) for a client. Confirmed: developer.phorest.com/reference/createbooking.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingInput'
      responses:
        '201':
          description: Booking created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Booking'
        '400':
          description: Booking data is invalid, unable to create a booking.
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
  /{businessId}/branch/{branchId}/booking/{bookingId}/cancel:
    parameters:
    - $ref: '#/components/parameters/BusinessId'
    - $ref: '#/components/parameters/BranchId'
    - name: bookingId
      in: path
      required: true
      schema:
        type: string
    post:
      operationId: cancelBooking
      tags:
      - Bookings
      summary: Cancel a booking
      description: 'Cancels a booking. Confirmed to exist: developer.phorest.com/reference/cancelbooking; sub-path modeled by convention.'
      responses:
        '200':
          description: Booking canceled successfully.
        '404':
          $ref: '#/components/responses/NotFound'
  /{businessId}/branch/{branchId}/booking/{bookingId}/activate:
    parameters:
    - $ref: '#/components/parameters/BusinessId'
    - $ref: '#/components/parameters/BranchId'
    - name: bookingId
      in: path
      required: true
      schema:
        type: string
    post:
      operationId: activateBooking
      tags:
      - Bookings
      summary: Activate a reserved booking
      description: 'Activates a RESERVED booking, turning a temporary hold into an ACTIVE booking. Confirmed to exist: developer.phorest.com/reference/activatebooking; sub-path modeled by convention.'
      responses:
        '200':
          description: Booking activated successfully.
        '404':
          $ref: '#/components/responses/NotFound'
  /{businessId}/branch/{branchId}/booking/{bookingId}/note:
    parameters:
    - $ref: '#/components/parameters/BusinessId'
    - $ref: '#/components/parameters/BranchId'
    - name: bookingId
      in: path
      required: true
      schema:
        type: string
    post:
      operationId: appendNoteToBooking
      tags:
      - Bookings
      summary: Append a note to a booking
      description: 'Appends a service/colour note to an existing booking. Confirmed to exist: developer.phorest.com/reference/appendnotetobooking; sub-path modeled by convention.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                note:
                  type: string
                  maxLength: 50000
      responses:
        '200':
          description: Note appended successfully.
        '404':
          $ref: '#/components/responses/NotFound'
  /{businessId}/branch/{branchId}/deposit-payment-link:
    parameters:
    - $ref: '#/components/parameters/BusinessId'
    - $ref: '#/components/parameters/BranchId'
    post:
      operationId: createDepositPaymentLink
      tags:
      - Bookings
      summary: Create a deposit payment link
      description: 'Creates a hosted payment link so a client can pay a booking deposit online. Confirmed to exist: developer.phorest.com/reference/createdepositpaymentlink; sub-path modeled by convention.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                bookingId:
                  type: string
                amount:
                  type: number
      responses:
        '201':
          description: Deposit payment link created successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  paymentLinkUrl:
                    type: string
                    format: uri
        '404':
          $ref: '#/components/responses/NotFound'
components:
  responses:
    RateLimited:
      description: Request rate limit exceeded. Current limit set to 100 requests per second.
    NotFound:
      description: The specified business, branch, or resource does not exist.
    ServerError:
      description: Internal server error.
    BadRequest:
      description: The request was invalid.
  schemas:
    BookingInput:
      type: object
      required:
      - clientId
      properties:
        bookingStatus:
          type: string
          enum:
          - ACTIVE
          - RESERVED
          - CANCELED
        clientId:
          type: string
        note:
          type: string
          maxLength: 50000
        clientAppointmentSchedules:
          type: array
          items:
            type: object
            properties:
              serviceId:
                type: string
              staffId:
                type: string
              startTime:
                type: string
                format: date-time
    AvailabilityRequest:
      type: object
      required:
      - startTime
      - endTime
      - clientServiceSelections
      properties:
        clientId:
          type: string
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        clientServiceSelections:
          type: array
          items:
            type: object
            properties:
              serviceId:
                type: string
              staffId:
                type: string
        rescheduleBookingId:
          type: string
        isOnlineAvailability:
          type: boolean
    Booking:
      allOf:
      - $ref: '#/components/schemas/BookingInput'
      - type: object
        properties:
          bookingId:
            type: string
    AvailabilitySlot:
      type: object
      properties:
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        staffId:
          type: string
  parameters:
    BusinessId:
      name: businessId
      in: path
      required: true
      description: The Phorest business (salon group) identifier.
      schema:
        type: string
    BranchId:
      name: branchId
      in: path
      required: true
      description: The Phorest branch (location) identifier.
      schema:
        type: string
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: Username is `global/{email}`, using the email address Phorest associated with the granted API access. Password is the API password issued by Phorest support.