Client Credentials vs Authorization Code for server-side reporting job

Trying to spin up a nightly reporting job in Azure Functions that pulls agent stats from Genesys Cloud. The app runs server-side, no human interaction. I’m confused about which OAuth grant type to use. The docs say:

“The client credentials grant is for confidential clients…”

But another section mentions Authorization Code with PKCE for “modern apps”.

My current setup:

  • .NET 8 Azure Function
  • Genesys Platform SDK (C#)
  • Server-to-server communication
  • No user context needed

I tried Client Credentials first:

var client = new PlatformClientBuilder()
 .WithClientCredentials("my-client-id", "my-client-secret")
 .WithBaseUrl("https://api.mypurecloud.com")
 .Build();

It works for getting organization details but fails when I try to access /api/v2/analytics/queues/summary. Getting a 403 Forbidden.

The error payload says:

{
 "code": "forbidden",
 "message": "Access denied"
}

Do I need to use Authorization Code flow instead? If so, how do I handle the token refresh in a headless function? The SDK seems to expect a user session.

Also, the timezone is America/Sao_Paulo so the reports run at 23:00 local time. Not sure if that affects token validity.

Any code examples for the right approach?