{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/microsoft-bookings/json-schema/microsoft-bookings-microsoft-graph-booking-service-schema.json",
  "title": "microsoft.graph.bookingService",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/microsoft-bookings-graph-openapi.yml#/components/schemas/microsoft.graph.bookingService",
  "allOf": [
    {
      "$ref": "#/$defs/microsoft.graph.entity"
    },
    {
      "title": "bookingService",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "additionalInformation": {
          "type": [
            "string",
            "null"
          ],
          "description": "Additional information that is sent to the customer when an appointment is confirmed."
        },
        "createdDateTime": {
          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
          "type": [
            "string",
            "null"
          ],
          "description": "The date, time, and time zone when the service was created. The timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.",
          "format": "date-time"
        },
        "customQuestions": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.bookingQuestionAssignment"
          },
          "description": "Contains the set of custom questions associated with a particular service."
        },
        "defaultDuration": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "The default length of the service, represented in numbers of days, hours, minutes, and seconds. For example, P11D23H59M59.999999999999S.",
          "format": "duration"
        },
        "defaultLocation": {
          "anyOf": [
            {
              "$ref": "#/$defs/microsoft.graph.location"
            },
            {
              "type": [
                "object",
                "null"
              ]
            }
          ],
          "description": "The default physical location for the service."
        },
        "defaultPrice": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The default monetary price for the service."
        },
        "defaultPriceType": {
          "$ref": "#/$defs/microsoft.graph.bookingPriceType"
        },
        "defaultReminders": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.bookingReminder"
          },
          "description": "The default set of reminders for an appointment of this service. The value of this property is available only when reading this bookingService by its ID."
        },
        "description": {
          "type": [
            "string",
            "null"
          ],
          "description": "A text description for the service."
        },
        "displayName": {
          "type": "string",
          "description": "A service name."
        },
        "isAnonymousJoinEnabled": {
          "type": "boolean",
          "description": "Indicates if an anonymousJoinWebUrl(webrtcUrl) is generated for the appointment booked for this service. The default value is false."
        },
        "isCustomerAllowedToManageBooking": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Indicates that the customer can manage bookings created by the staff. The default value is false."
        },
        "isHiddenFromCustomers": {
          "type": "boolean",
          "description": "True indicates that this service isn't available to customers for booking."
        },
        "isLocationOnline": {
          "type": "boolean",
          "description": "Indicates that the appointments for the service are held online. The default value is false."
        },
        "languageTag": {
          "type": "string",
          "description": "The language of the self-service booking page."
        },
        "lastUpdatedDateTime": {
          "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
          "type": [
            "string",
            "null"
          ],
          "description": "The date, time, and time zone when the service was last updated. The timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.",
          "format": "date-time"
        },
        "maximumAttendeesCount": {
          "maximum": 2147483647,
          "minimum": -2147483648,
          "type": "number",
          "description": "The maximum number of customers allowed in a service. If maximumAttendeesCount of the service is greater than 1, pass valid customer IDs while creating or updating an appointment. To create a customer, use the Create bookingCustomer operation.",
          "format": "int32"
        },
        "notes": {
          "type": [
            "string",
            "null"
          ],
          "description": "Additional information about this service."
        },
        "postBuffer": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "The time to buffer after an appointment for this service ends, and before the next customer appointment can be booked.",
          "format": "duration"
        },
        "preBuffer": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "The time to buffer before an appointment for this service can start.",
          "format": "duration"
        },
        "schedulingPolicy": {
          "anyOf": [
            {
              "$ref": "#/$defs/microsoft.graph.bookingSchedulingPolicy"
            },
            {
              "type": [
                "object",
                "null"
              ]
            }
          ],
          "description": "The set of policies that determine how appointments for this type of service should be created and managed."
        },
        "smsNotificationsEnabled": {
          "type": "boolean",
          "description": "True indicates SMS notifications can be sent to the customers for the appointment of the service. Default value is false."
        },
        "staffMemberIds": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": "Represents those staff members who provide this service."
        },
        "webUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "The URL a customer uses to access the service.",
          "readOnly": true
        },
        "@odata.type": {
          "type": "string"
        }
      },
      "description": "Represents a particular service offered by a booking business."
    }
  ],
  "x-ms-discriminator-value": "#microsoft.graph.bookingService",
  "$defs": {
    "ReferenceNumeric": {
      "enum": [
        "-INF",
        "INF",
        "NaN"
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "microsoft.graph.bookingPriceType": {
      "title": "bookingPriceType",
      "enum": [
        "undefined",
        "fixedPrice",
        "startingAt",
        "hourly",
        "free",
        "priceVaries",
        "callUs",
        "notSet",
        "unknownFutureValue"
      ],
      "type": "string",
      "description": "Represents the type of pricing of a booking service.",
      "x-ms-enum": {
        "name": "bookingPriceType",
        "modelAsString": false,
        "values": [
          {
            "value": "undefined",
            "description": "The price of the service is not defined.",
            "name": "undefined"
          },
          {
            "value": "fixedPrice",
            "description": "The price of the service is fixed.",
            "name": "fixedPrice"
          },
          {
            "value": "startingAt",
            "description": "The price of the service starts with a particular value, but can be higher based on the final services performed.",
            "name": "startingAt"
          },
          {
            "value": "hourly",
            "description": "The price of the service depends on the number of hours a staff member works on the service.",
            "name": "hourly"
          },
          {
            "value": "free",
            "description": "The service is free.",
            "name": "free"
          },
          {
            "value": "priceVaries",
            "description": "The price of the service varies.",
            "name": "priceVaries"
          },
          {
            "value": "callUs",
            "description": "The price of the service is not listed.",
            "name": "callUs"
          },
          {
            "value": "notSet",
            "description": "The price of the service is not set.",
            "name": "notSet"
          }
        ]
      }
    },
    "microsoft.graph.bookingQuestionAssignment": {
      "title": "bookingQuestionAssignment",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "isRequired": {
          "type": "boolean",
          "description": "Indicates whether it's mandatory to answer the custom question."
        },
        "questionId": {
          "type": "string",
          "description": "The ID of the custom question."
        },
        "@odata.type": {
          "type": "string"
        }
      }
    },
    "microsoft.graph.bookingReminder": {
      "title": "bookingReminder",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "message": {
          "type": "string",
          "description": "The message in the reminder."
        },
        "offset": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "The amount of time before the start of an appointment that the reminder should be sent. It's denoted in ISO 8601 format.",
          "format": "duration"
        },
        "recipients": {
          "$ref": "#/$defs/microsoft.graph.bookingReminderRecipients"
        },
        "@odata.type": {
          "type": "string"
        }
      },
      "description": "This type represents when and to whom to send an e-mail reminder."
    },
    "microsoft.graph.bookingReminderRecipients": {
      "title": "bookingReminderRecipients",
      "enum": [
        "allAttendees",
        "staff",
        "customer",
        "unknownFutureValue"
      ],
      "type": "string"
    },
    "microsoft.graph.bookingSchedulingPolicy": {
      "title": "bookingSchedulingPolicy",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "allowStaffSelection": {
          "type": "boolean",
          "description": "True to allow customers to choose a specific person for the booking."
        },
        "customAvailabilities": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.bookingsAvailabilityWindow"
          },
          "description": "Custom availability of the service in a given time frame."
        },
        "generalAvailability": {
          "anyOf": [
            {
              "$ref": "#/$defs/microsoft.graph.bookingsAvailability"
            },
            {
              "type": [
                "object",
                "null"
              ]
            }
          ],
          "description": "General availability of the service defined by the scheduling policy."
        },
        "isMeetingInviteToCustomersEnabled": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Indicates whether the meeting invite is sent to the customers. The default value is false."
        },
        "maximumAdvance": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "Maximum number of days in advance that a booking can be made. It follows the ISO 8601 format.",
          "format": "duration"
        },
        "minimumLeadTime": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "The minimum amount of time before which bookings and cancellations must be made. It follows the ISO 8601 format.",
          "format": "duration"
        },
        "sendConfirmationsToOwner": {
          "type": "boolean",
          "description": "True to notify the business via email when a booking is created or changed. Use the email address specified in the email property of the bookingBusiness entity for the business."
        },
        "timeSlotInterval": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "Duration of each time slot, denoted in ISO 8601 format.",
          "format": "duration"
        },
        "@odata.type": {
          "type": "string"
        }
      },
      "description": "This type represents the set of policies that dictate how bookings can be created in a Booking Calendar."
    },
    "microsoft.graph.bookingWorkHours": {
      "title": "bookingWorkHours",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "day": {
          "$ref": "#/$defs/microsoft.graph.dayOfWeek"
        },
        "timeSlots": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.bookingWorkTimeSlot"
          },
          "description": "A list of start/end times during a day."
        },
        "@odata.type": {
          "type": "string"
        }
      },
      "description": "This type represents the set of working hours in a single day of the week."
    },
    "microsoft.graph.bookingWorkTimeSlot": {
      "title": "bookingWorkTimeSlot",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "endTime": {
          "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?$",
          "type": "string",
          "description": "The time of the day when work stops. For example, 17:00:00.0000000.",
          "format": "time"
        },
        "startTime": {
          "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?$",
          "type": "string",
          "description": "The time of the day when work starts. For example, 08:00:00.0000000.",
          "format": "time"
        },
        "@odata.type": {
          "type": "string"
        }
      }
    },
    "microsoft.graph.bookingsAvailability": {
      "title": "bookingsAvailability",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "availabilityType": {
          "$ref": "#/$defs/microsoft.graph.bookingsServiceAvailabilityType"
        },
        "businessHours": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.bookingWorkHours"
          },
          "description": "The hours of operation in a week. The business hours value is set to null if the availability type isn't customWeeklyHours."
        },
        "@odata.type": {
          "type": "string"
        }
      }
    },
    "microsoft.graph.bookingsAvailabilityWindow": {
      "allOf": [
        {
          "$ref": "#/$defs/microsoft.graph.bookingsAvailability"
        },
        {
          "title": "bookingsAvailabilityWindow",
          "required": [
            "@odata.type"
          ],
          "type": "object",
          "properties": {
            "endDate": {
              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
              "type": [
                "string",
                "null"
              ],
              "description": "End date of the availability window.",
              "format": "date"
            },
            "startDate": {
              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
              "type": [
                "string",
                "null"
              ],
              "description": "Start date of the availability window.",
              "format": "date"
            },
            "@odata.type": {
              "type": "string",
              "default": "#microsoft.graph.bookingsAvailabilityWindow"
            }
          }
        }
      ],
      "x-ms-discriminator-value": "#microsoft.graph.bookingsAvailabilityWindow"
    },
    "microsoft.graph.bookingsServiceAvailabilityType": {
      "title": "bookingsServiceAvailabilityType",
      "enum": [
        "bookWhenStaffAreFree",
        "notBookable",
        "customWeeklyHours",
        "unknownFutureValue"
      ],
      "type": "string"
    },
    "microsoft.graph.dayOfWeek": {
      "title": "dayOfWeek",
      "enum": [
        "sunday",
        "monday",
        "tuesday",
        "wednesday",
        "thursday",
        "friday",
        "saturday"
      ],
      "type": "string"
    },
    "microsoft.graph.entity": {
      "title": "entity",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The unique identifier for an entity. Read-only."
        },
        "@odata.type": {
          "type": "string"
        }
      }
    },
    "microsoft.graph.location": {
      "title": "location",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "address": {
          "anyOf": [
            {
              "$ref": "#/$defs/microsoft.graph.physicalAddress"
            },
            {
              "type": [
                "object",
                "null"
              ]
            }
          ],
          "description": "The street address of the location."
        },
        "coordinates": {
          "anyOf": [
            {
              "$ref": "#/$defs/microsoft.graph.outlookGeoCoordinates"
            },
            {
              "type": [
                "object",
                "null"
              ]
            }
          ],
          "description": "The geographic coordinates and elevation of the location."
        },
        "displayName": {
          "type": [
            "string",
            "null"
          ],
          "description": "The name associated with the location."
        },
        "locationEmailAddress": {
          "type": [
            "string",
            "null"
          ],
          "description": "Optional email address of the location."
        },
        "locationType": {
          "anyOf": [
            {
              "$ref": "#/$defs/microsoft.graph.locationType"
            },
            {
              "type": [
                "object",
                "null"
              ]
            }
          ],
          "description": "The type of location. The possible values are: default, conferenceRoom, homeAddress, businessAddress,geoCoordinates, streetAddress, hotel, restaurant, localBusiness, postalAddress. Read-only."
        },
        "locationUri": {
          "type": [
            "string",
            "null"
          ],
          "description": "Optional URI representing the location."
        },
        "uniqueId": {
          "type": [
            "string",
            "null"
          ],
          "description": "For internal use only."
        },
        "uniqueIdType": {
          "anyOf": [
            {
              "$ref": "#/$defs/microsoft.graph.locationUniqueIdType"
            },
            {
              "type": [
                "object",
                "null"
              ]
            }
          ],
          "description": "For internal use only."
        },
        "@odata.type": {
          "type": "string"
        }
      }
    },
    "microsoft.graph.locationType": {
      "title": "locationType",
      "enum": [
        "default",
        "conferenceRoom",
        "homeAddress",
        "businessAddress",
        "geoCoordinates",
        "streetAddress",
        "hotel",
        "restaurant",
        "localBusiness",
        "postalAddress"
      ],
      "type": "string"
    },
    "microsoft.graph.locationUniqueIdType": {
      "title": "locationUniqueIdType",
      "enum": [
        "unknown",
        "locationStore",
        "directory",
        "private",
        "bing"
      ],
      "type": "string"
    },
    "microsoft.graph.outlookGeoCoordinates": {
      "title": "outlookGeoCoordinates",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "accuracy": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The accuracy of the latitude and longitude. As an example, the accuracy can be measured in meters, such as the latitude and longitude are accurate to within 50 meters."
        },
        "altitude": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The altitude of the location."
        },
        "altitudeAccuracy": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The accuracy of the altitude."
        },
        "latitude": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The latitude of the location."
        },
        "longitude": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The longitude of the location."
        },
        "@odata.type": {
          "type": "string"
        }
      }
    },
    "microsoft.graph.physicalAddress": {
      "title": "physicalAddress",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "city": {
          "type": [
            "string",
            "null"
          ],
          "description": "The city."
        },
        "countryOrRegion": {
          "type": [
            "string",
            "null"
          ],
          "description": "The country or region. It's a free-format string value, for example, 'United States'."
        },
        "postalCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "The postal code."
        },
        "state": {
          "type": [
            "string",
            "null"
          ],
          "description": "The state."
        },
        "street": {
          "type": [
            "string",
            "null"
          ],
          "description": "The street."
        },
        "@odata.type": {
          "type": "string"
        }
      }
    }
  }
}