An API that connects multiple Microsoft services, enabling data access and automation across platforms
Bookings.ReadWrite.All alone is not sufficient for this call pattern with app-only access.
For the Bookings business GET API, the documented least-privileged application permission is BookingsAppointment.ReadWrite.All. The API page for GET /solutions/bookingBusinesses/{id} lists:
- Delegated:
Bookings.Read.Allas least privileged - Application:
BookingsAppointment.ReadWrite.Allas least privileged
A matching Microsoft Q&A resolution for this exact symptom states that an app using only Bookings.ReadWrite.All received unauthorized/server errors, and the fix was to also grant BookingsAppointment.ReadWrite.All application permission and confirm that role is present in the app-only token.
Action to take:
- In Microsoft Entra admin center → App registrations → the app → API permissions.
- Add Microsoft Graph → Application permissions → BookingsAppointment.ReadWrite.All.
- Grant admin consent again.
- Acquire a new app-only token and verify the token contains the
rolesclaim forBookingsAppointment.ReadWrite.All. - Retry
GET /solutions/bookingBusinesses/{id}.
What this means for the current behavior:
- Delegated works because the endpoint supports delegated permissions and the signed-in user has access.
- App-only fails because the token permission set does not match what this endpoint requires for application access.
The provided material does not show any tenant-level or booking-business setting that blocks app access in this scenario. The supported explanation in the available documentation is a permission mismatch between delegated and application access.