API Endpoint
POST https://zoom.us/oauth/token
Description
We are validating BYOK client authentication for an Admin-managed General App using Development credentials and OAuth Authorization Code with PKCE S256.
The authorization flow reaches the callback successfully, but the token exchange is rejected before authorization-code or PKCE validation.
Error
HTTP 400:
{"error":"invalid_client","reason":"Invalid client_id or client_secret"}
Authentication and request details verified
- App credential mode is Public Key (BYOK), not Client Secret.
- The request uses
application/x-www-form-urlencoded. - No
Authorizationheader, Basic authentication, orclient_secretis sent. - The body contains
grant_type,code,redirect_uri,code_verifier,client_id,client_assertion_type, andclient_assertion. - The assertion header uses
alg=RS256and akidmatching the registered Development JWK. issandsubexactly match the Development Client ID.audis exactlyhttps://zoom.us/oauth/token.iatandexpare integers, the lifetime is 60 seconds, andjtiis unique for every assertion.
How to reproduce
- Configure an Admin-managed General App’s Development credentials to use Public Key.
- Register a valid public JWK with a matching
kid. - Complete a fresh OAuth authorization and receive a new authorization code.
- Exchange the code at the token endpoint using the form fields listed above and a newly signed client assertion.
- Observe HTTP 400
invalid_client.
Additional isolation completed
- A client-auth-only probe using a fresh assertion and a dummy code returns the same
invalid_client, indicating rejection before code or PKCE validation. - Removing the existing Development app grant and completing a fresh consent flow did not change the result.
- Inline RSA, temporary RSA, EC P-256, and a temporary JWKS URL registration all returned the same error.
- After testing, the active Development configuration was restored to the original inline RSA public JWK.
- Zoom Technical Support classified this as developer configuration and directed us to this forum.
Could someone clarify:
- Is BYOK client authentication supported for General App Development credentials?
- Does BYOK require separate account or ISV enablement in addition to selecting Public Key in App Credentials?
- Is
https://zoom.us/oauth/tokenthe exact expectedaudvalue? - Is any request element required beyond the documented
client_idandclient_assertionfields? - Is there a provisioning step or propagation delay before the registered Development public key becomes available to the token endpoint?
We have intentionally not added Basic authentication, changed the documented audience, or fallen back to a client secret.
Thank you.