Server-to-Server OAuth returns 400 invalid_request

Hello Zoom Developer Support/Community,

I am integrating Zoom Live Classes and student attendance into an ASP.NET Core application using a Server-to-Server OAuth application.

My S2S OAuth token request consistently returns:

HTTP 400 Bad Request

{“reason”:“Bad Request”,“error”:“invalid_request”}

I have verified:

  • App type: Server-to-Server OAuth
  • App level: Account-level
  • App status: Activated
  • App owner: Zoom Account Owner
  • Account ID: copied directly from App Credentials
  • Client ID: copied directly from App Credentials
  • Client Secret: regenerated and copied directly from App Credentials
  • Required participant scope: meeting:read:participant:admin

I tested the OAuth request independently of my ASP.NET Core application using both PowerShell and curl.exe.

I tested the documented application/x-www-form-urlencoded request:

POST https://zoom.us/oauth/token

Body:
grant_type=account_credentials&account_id=<ACCOUNT_ID>

Authorization:
Basic <Base64(client_id:client_secret)>

The same invalid_request error occurs with the query-string format as well.

Zoom tracking ID:

v=2.0;clid=us05;rid=WEB_7405b2a64fd12a7b7bcd517380a015d4

Could someone please help identify why the active S2S OAuth application is returning invalid_request?

I have not included my Client Secret for security reasons.

Thank you.

To be sure, have you included a Content-Type: application/x-www-form-urlencoded; charset=utf-8 HTTP header alongside the request body? In .NET, I believe this will be populated when using the FormUrlEncodedContent class.

Zoom has a sample Node.js implementation of Server-to-Server OAuth Tokens that you can review.