# Server-to-Server OAuthのトークン取得でinvalid\_requestエラー

**URL:** <https://devforum.zoom.us/t/server-to-server-oauth-invalid-request/145617>\
**Category:** Webinars\
**Created:** [August 17, 2026, 2:41am UTC](https://devforum.zoom.us/t/server-to-server-oauth-invalid-request/145617 "2026-08-17T02:41:18Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Junette](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/junette/32/76049_2.png) [@Junette](https://devforum.zoom.us/u/Junette)\
**Post date:** [August 17, 2026, 2:41am UTC](https://devforum.zoom.us/t/server-to-server-oauth-invalid-request/145617/1 "2026-08-17T02:41:18Z")

</div>

件名: Server-to-Server OAuthアプリのトークン取得で invalid\_request エラー

お世話になっております。

Server-to-Server OAuthアプリを作成し、アクティベーションまで完了しましたが、  
アクセストークンの取得リクエストが常に失敗します。

【症状】  
POST [https://zoom.us/oauth/token](https://zoom.us/oauth/token)  
に対して、公式ドキュメント通りのリクエスト（grant\_type=account\_credentials、  
account\_id、Basic認証ヘッダー）を送っていますが、以下のエラーが返ってきます。

{“reason”:“Bad Request”,“error”:“invalid\_request”}

【確認済みのこと】

- アプリは「有効化済み」状態です（サーバー間OAuthアプリ、アカウントレベル）
- Account ID / Client ID / Client Secret は、アプリ認証情報ページに表示された値と  
一致していることを確認済みです（コピー&ペーストのミスなし）
- Client Secretは「再生する」で作り直し、直後に試しても同じエラーが出ます
- リクエストのgrant\_typeは “account\_credentials” にしています
- grant\_type・account\_idをURLクエリに入れる方法、リクエストボディに入れる方法、  
両方試しましたが結果は同じです
- 別々の実装（fetch、Node.jsのhttpsモジュール）でも同じ結果です

【アプリ情報】

- アプリ名: クラウド録画 ZoomToYoutube
- タイプ: サーバー間OAuth
- Account ID: QCOyj1NvS8umdUyjMqluhw

アカウント側の設定に何か制限や不足がないか、ご確認いただけますでしょうか。  
よろしくお願いいたします。

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [August 18, 2026, 3:19am UTC](https://devforum.zoom.us/t/server-to-server-oauth-invalid-request/145617/2 "2026-08-18T03:19:15Z")

</div>

@Junette could you check if you are doing something similar to thise code? Let me know if you are using a specific programming language

app.get(‘/s2soauth’, (req, res) =\> {  
res.status(200).json({  
message: ‘Live S2S OAuth token requests are disabled on this public demo.’,  
liveTokenRequestDisabled: true,  
grantType: ‘account\_credentials’,  
tokenUrl: ‘[https://zoom.us/oauth/token?grant\_type=account\_credentials&account\_id={ACCOUNT\_ID}](https://zoom.us/oauth/token?grant_type=account_credentials&account_id=%7BACCOUNT_ID%7D)’,  
requestShape: {  
method: ‘POST’,  
headers: {  
Authorization: ‘Basic base64({CLIENT\_ID}:{CLIENT\_SECRET})’,  
‘Content-Type’: ‘application/x-www-form-urlencoded’,  
},  
},  
expectedResponseFields: [  
‘access\_token’,  
‘token\_type’,  
‘expires\_in’,  
‘scope’,  
‘api\_url’,  
],  
});  
});
