An API that connects multiple Microsoft services, enabling data access and automation across platforms
Create bookingAppointment returns 500 UnknownError on v1.0 but succeeds on beta
Summary Creating a Microsoft Bookings appointment through Microsoft Graph v1.0 fails with HTTP 500, error code “UnknownError” and an empty message. The identical request to the beta endpoint succeeds with 201 Created and returns the Teams join link. We need this to work on v1.0, because Microsoft states beta is not supported for production use.
Environment
- Endpoint:
POST https://graph.microsoft.com/v1.0/solutions/bookingBusinesses/{id}/appointments - Booking business:
******@email.com.au, created 13 Oct 2026 - Authentication: delegated, with
Bookings.ReadWrite.Allconsented. The signed-in user is an Administrator of the booking business. - Client: Microsoft Graph Explorer
Steps to reproduce
- Create a service with one staff member,
isLocationOnline: true, and a scheduling policy withallowStaffSelection: trueandcustomWeeklyHours. - Send the request body below to the v1.0 endpoint. The result is 500 UnknownError.
- Send the same body to
https://graph.microsoft.com/beta/solutions/bookingBusinesses/{id}/appointments. The result is 201 Created, withjoinWebUrlpopulated.
Request body
{
"serviceId": "8ac8a87d-cd23-4435-a3fc-a3939f59e379",
"staffMemberIds": ["9c15e4d6-edb9-4386-99f5-3fd9b6edf3f3"],
"isLocationOnline": true,
"optOutOfCustomerEmail": false,
"customerTimeZone": "Australia/Sydney",
"start": { "dateTime": "2026-10-14T10:30:00.0000000+00:00", "timeZone": "UTC" },
"end": { "dateTime": "2026-10-14T10:45:00.0000000+00:00", "timeZone": "UTC" },
"customers": [
{
"@odata.type": "#microsoft.graph.bookingCustomerInformation",
"name": "TEST Lead",
"emailAddress": "test-lead@example.com"
}
]
}
Already ruled out
- Availability: the request also fails for slots the self-service booking page offers as available.
- Staff selection: it fails with
allowStaffSelectionboth true and false, and with and withoutstaffMemberIds. - Request format:
-
start/endwith and without@odata.typeand a UTC offset- a
customersarray and top-level customer fields- both IANA and Windows time zone names
- Staff time zone: setting the staff member’s
timeZonetoAustralia/Sydneymade no difference. - Permissions: the same token can create services, customers and staff members, update scheduling policies and business hours, and read appointments on v1.0.
- Existing customer: booking an existing customer by
customerIdstill returns 500. The customer was created successfully through v1.0POST /customers, and the request copied the documentation example’s full shape, including both customer formats and the@odata.typeannotations.
- a
-
Request IDs for failed v1.0 calls (13 Oct 2026, UTC)
- 01:31:44: request-id
a4de7462-6a22-4a01-a433-ca5f9c6b62ae, client-request-id952d1e05-e380-dfe1-1c1a-31392ea07a61 - 01:32:20: request-id
1a85f974-55fe-4f2e-9764-899c7e8cfe5e, client-request-idb2bc63ea-bc44-b812-37d7-b14be43f3e81 - Booking an existing customer by
customerId: request-idb95821e7-a876-4629-9517-e9dd9f634589
Questions
- Is creating appointments on v1.0 supported with delegated permissions? If so, what causes this 500?
- Is there a fix or workaround on v1.0? If not, when will v1.0 match beta for this call?Summary Creating a Microsoft Bookings appointment through Microsoft Graph v1.0 fails with HTTP 500, error code “UnknownError” and an empty message. The identical request to the beta endpoint succeeds with 201 Created and returns the Teams join link. We need this to work on v1.0, because Microsoft states beta is not supported for production use. Environment
- Endpoint:
POST https://graph.microsoft.com/v1.0/solutions/bookingBusinesses/{id}/appointments - Booking business:
******@email.com.au, created 13 Oct 2026 - Authentication: delegated, with
Bookings.ReadWrite.Allconsented. The signed-in user is an Administrator of the booking business. - Client: Microsoft Graph Explorer
- Endpoint:
- Create a service with one staff member,
isLocationOnline: true, and a scheduling policy withallowStaffSelection: trueandcustomWeeklyHours.- Send the request body below to the v1.0 endpoint. The result is 500 UnknownError.
- Send the same body to
https://graph.microsoft.com/beta/solutions/bookingBusinesses/{id}/appointments. The result is 201 Created, withjoinWebUrlpopulated.
{
"serviceId": "8ac8a87d-cd23-4435-a3fc-a3939f59e379", "staffMemberIds": ["9c15e4d6-edb9-4386-99f5-3fd9b6edf3f3"], "isLocationOnline": true, "optOutOfCustomerEmail": false, "customerTimeZone": "Australia/Sydney", "start": { "dateTime": "2026-10-14T10:30:00.0000000+00:00", "timeZone": "UTC" }, "end": { "dateTime": "2026-10-14T10:45:00.0000000+00:00", "timeZone": "UTC" }, "customers": [
{
"@odata.type": "#microsoft.graph.bookingCustomerInformation",
"name": "TEST Lead",
"emailAddress": "test-lead@example.com"
}
``` ]
}
```yaml
**Already ruled out**
- **Availability:** the request also fails for slots the self-service booking page offers as available.
- **Staff selection:** it fails with `allowStaffSelection` both true and false, and with and without `staffMemberIds`.
- **Request format:**
- `start`/`end` with and without `@odata.type` and a UTC offset
- a `customers` array and top-level customer fields
- both IANA and Windows time zone names
- **Staff time zone:** setting the staff member’s `timeZone` to `Australia/Sydney` made no difference.
- **Permissions:** the same token can create services, customers and staff members, update scheduling policies and business hours, and read appointments on v1.0.
- **Existing customer:** booking an existing customer by `customerId` still returns 500. The customer was created successfully through v1.0 `POST /customers`, and the request copied the documentation example’s full shape, including both customer formats and the `@odata.type` annotations.
**Request IDs for failed v1.0 calls (13 Oct 2026, UTC)**
- 01:31:44: request-id `a4de7462-6a22-4a01-a433-ca5f9c6b62ae`, client-request-id `952d1e05-e380-dfe1-1c1a-31392ea07a61`
- 01:32:20: request-id `1a85f974-55fe-4f2e-9764-899c7e8cfe5e`, client-request-id `b2bc63ea-bc44-b812-37d7-b14be43f3e81`
- Booking an existing customer by `customerId`: request-id `b95821e7-a876-4629-9517-e9dd9f634589`
**Questions**
1. Is creating appointments on v1.0 supported with delegated permissions? If so, what causes this 500?
1. Is there a fix or workaround on v1.0? If not, when will v1.0 match beta for this call?