{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/microsoft-bookings/json-schema/microsoft-bookings-microsoft-graph-booking-appointment-schema.json",
  "title": "microsoft.graph.bookingAppointment",
  "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.bookingAppointment",
  "allOf": [
    {
      "$ref": "#/$defs/microsoft.graph.entity"
    },
    {
      "title": "bookingAppointment",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "additionalInformation": {
          "type": [
            "string",
            "null"
          ],
          "description": "Additional information that is sent to the customer when an appointment is confirmed."
        },
        "anonymousJoinWebUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "The URL of the meeting to join anonymously."
        },
        "appointmentLabel": {
          "type": [
            "string",
            "null"
          ],
          "description": "The custom label that can be stamped on this appointment by users."
        },
        "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 appointment 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"
        },
        "customerEmailAddress": {
          "type": [
            "string",
            "null"
          ],
          "description": "The SMTP address of the bookingCustomer who books the appointment."
        },
        "customerName": {
          "type": [
            "string",
            "null"
          ],
          "description": "The customer's name."
        },
        "customerNotes": {
          "type": [
            "string",
            "null"
          ],
          "description": "Notes from the customer associated with this appointment. You can get the value only when you read this bookingAppointment by its ID. You can set this property only when you initially create an appointment with a new customer."
        },
        "customerPhone": {
          "type": [
            "string",
            "null"
          ],
          "description": "The customer's phone number."
        },
        "customers": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.bookingCustomerInformationBase"
          },
          "description": "A collection of customer properties for an appointment. An appointment contains a list of customer information and each unit will indicate the properties of a customer who is part of that appointment. Optional."
        },
        "customerTimeZone": {
          "type": [
            "string",
            "null"
          ],
          "description": "The time zone of the customer. For a list of possible values, see dateTimeTimeZone."
        },
        "duration": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "The length of the appointment, denoted in ISO8601 format.",
          "format": "duration",
          "readOnly": true
        },
        "endDateTime": {
          "$ref": "#/$defs/microsoft.graph.dateTimeTimeZone"
        },
        "filledAttendeesCount": {
          "maximum": 2147483647,
          "minimum": -2147483648,
          "type": "number",
          "description": "The current number of customers in the appointment.",
          "format": "int32",
          "readOnly": true
        },
        "isCustomerAllowedToManageBooking": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Indicates that the customer can manage bookings created by the staff. The default value is false."
        },
        "isLocationOnline": {
          "type": "boolean",
          "description": "Indicates that the appointment is held online. The default value is false."
        },
        "joinWebUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "The URL of the online meeting for the appointment."
        },
        "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 booking business 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 an appointment. 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"
        },
        "optOutOfCustomerEmail": {
          "type": "boolean",
          "description": "If true indicates that the bookingCustomer for this appointment doesn't wish to receive a confirmation for this appointment."
        },
        "postBuffer": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "The amount of time to reserve after the appointment ends, for cleaning up, as an example. The value is expressed in ISO8601 format.",
          "format": "duration"
        },
        "preBuffer": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": "string",
          "description": "The amount of time to reserve before the appointment begins, for preparation, as an example. The value is expressed in ISO8601 format.",
          "format": "duration"
        },
        "price": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The regular price for an appointment for the specified bookingService."
        },
        "priceType": {
          "$ref": "#/$defs/microsoft.graph.bookingPriceType"
        },
        "reminders": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.bookingReminder"
          },
          "description": "The collection of customer reminders sent for this appointment. The value of this property is available only when reading this bookingAppointment by its ID."
        },
        "selfServiceAppointmentId": {
          "type": [
            "string",
            "null"
          ],
          "description": "Another tracking ID for the appointment, if the appointment was created directly by the customer on the scheduling page, as opposed to by a staff member on behalf of the customer."
        },
        "serviceId": {
          "type": [
            "string",
            "null"
          ],
          "description": "The ID of the bookingService associated with this appointment."
        },
        "serviceLocation": {
          "anyOf": [
            {
              "$ref": "#/$defs/microsoft.graph.location"
            },
            {
              "type": [
                "object",
                "null"
              ]
            }
          ],
          "description": "The location where the service is delivered."
        },
        "serviceName": {
          "type": "string",
          "description": "The name of the bookingService associated with this appointment.This property is optional when creating a new appointment. If not specified, it's computed from the service associated with the appointment by the serviceId property."
        },
        "serviceNotes": {
          "type": [
            "string",
            "null"
          ],
          "description": "Notes from a bookingStaffMember. The value of this property is available only when reading this bookingAppointment by its ID."
        },
        "smsNotificationsEnabled": {
          "type": "boolean",
          "description": "If true, indicates SMS notifications will be sent to the customers for the appointment. Default value is false."
        },
        "staffMemberIds": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": "The ID of each bookingStaffMember who is scheduled in this appointment."
        },
        "startDateTime": {
          "$ref": "#/$defs/microsoft.graph.dateTimeTimeZone"
        },
        "@odata.type": {
          "type": "string"
        }
      },
      "description": "Represents a booked appointment of a service by a customer in a business."
    }
  ],
  "x-ms-discriminator-value": "#microsoft.graph.bookingAppointment",
  "$defs": {
    "ReferenceNumeric": {
      "enum": [
        "-INF",
        "INF",
        "NaN"
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "microsoft.graph.bookingCustomerInformationBase": {
      "title": "bookingCustomerInformationBase",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "@odata.type": {
          "type": "string"
        }
      }
    },
    "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.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.dateTimeTimeZone": {
      "title": "dateTimeTimeZone",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "dateTime": {
          "type": "string",
          "description": "A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000)."
        },
        "timeZone": {
          "type": [
            "string",
            "null"
          ],
          "description": "Represents a time zone, for example, 'Pacific Standard Time'. See below for more possible values."
        },
        "@odata.type": {
          "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"
        }
      }
    }
  }
}