Statistics API queue observation returning 403 despite valid scopes

I’m building a custom agent desktop widget using the Genesys Cloud Embeddable Client App SDK. The goal is to display real-time queue stats, specifically the number of waiting contacts and available agents, directly in the UI. I’ve set up the OAuth client with the analytics:reports:read and telephony:queue:read scopes, which should be sufficient according to the docs.

The issue is that the initial load works fine, but when I try to refresh the data or query specific queue IDs, I hit a wall. Here is the code snippet handling the API call:

async function fetchQueueStats() {
 const token = await sdkClient.auth.getAccessToken();
 const response = await fetch(
 `https://{{env}}.mygen.com/api/v2/analytics/queues/realtime?queueId=${queueId}`,
 {
 headers: {
 'Authorization': `Bearer ${token}`,
 'Content-Type': 'application/json'
 }
 }
 );
 
 if (!response.ok) {
 console.error('Failed to fetch queue stats', response.status);
 return null;
 }
 return response.json();
}

The response comes back with a 403 Forbidden status. The error payload is pretty generic:

{
 "code": "forbidden",
 "message": "User does not have permission to access this resource",
 "status": 403
}

I’ve double-checked the user permissions in the admin portal. The user has the Telephony and Analytics capabilities enabled. It’s weird because the same token works for fetching conversation history. Is there a specific scope I’m missing for the realtime endpoint, or is this a known limitation with the SDK’s token refresh cycle? The documentation is a bit vague on the exact permissions required for the analytics queue realtime endpoint versus the standard queue endpoint.