Even with the required admin.directory.resource.calendar.readonly scope, Google requires an additional manual step before room calendars can be accessed via the Availability API.
Required Steps for Google Room Resources:
- Authenticate with admin scopes - The admin user must authenticate with admin.directory.resource.calendar.readonly scope
- Fetch room resources - Use GET /v3/grants/{admin_grant_id}/resources to retrieve available rooms
- Manually add rooms to Google Calendar - The admin user must:
- Go to Google Calendar web interface
- Under "Other calendars", select "Browse resources"
- Find and add the specific room resources they want to access
- This subscribes the user to those room calendars
- Use Availability API - After manual subscription, the Availability API will work:
{
"participants": [
{
"email": "admin@example.com",
"calendar_ids": [
"room@resource.calendar.google.com"
]
}
]
}Why This Happens:
Google's admin.directory.resource.calendar.readonly scope allows listing room resources but doesn't automatically grant calendar access to those resources. The manual subscription step in Google Calendar UI establishes the necessary calendar permissions.
Error Symptoms:
- GET /v3/grants/{grant_id}/resources works successfully
- Availability API returns: "None of calendars provided [room_id] belong to [user_email]"
- Event creation with room resources may still work (different permission model)
Microsoft Comparison:
Microsoft's Place.Read.All scope provides direct access to room calendars without requiring manual subscription steps.
Workaround:
For automated workflows, consider using the Free/Busy API (POST /v3/grants/{admin_grant_id}/calendars/free-busy) which may have different permission requirements, or ensure admin users complete the manual subscription process during setup.
Updated
Comments
0 comments
Please sign in to leave a comment.