「ChatGPTでサインイン」は、OpenAIのOAuth 2.0およびOpenID Connectログインで、世界中のChatGPTユーザーが利用できます。あなたのアプリは、安定したアカウントIDに加え、個人の氏名、メールアドレス、プロフィール写真を取得します。2026年9月29日のDevDay以降、PlusおよびProユーザーは、参加アプリに対して、APIキーではなくChatGPTプランに基づいてAIリクエストを実行させることができます(アプリごとに設定された週ごとの上限内)。あなたのアプリが、ユーザーの会話、記憶、またはAPIキーを受け取ることは決してありません。
後半では、料金について触れます。このガイドでは、フロー、ユーザーから見たプランの使用状況、現在統合できるユーザー、ユーザーのプランがAPIキーに取って代わるべき時、そしてApidogでサインインとその失敗パスをテストする方法について説明します。イベントの残りの部分については、DevDay 2026のまとめをご覧ください。IDと認証の区別が曖昧な場合は、まずOAuthとOpenIDをお読みください。
ChatGPTでサインイン(概要)
| 項目 | OpenAIがドキュメント化している内容 |
|---|---|
| IDスコープ | openid profile email |
| プラン使用スコープ(オープンソースフロー) | offline_access resource.invoke chatgpt.tokens.use.direct、resource=https://api.openai.com/v1を伴う |
| あなたのアプリが受け取るもの | IDトークン。プラン使用の場合、アクセストークンとリフレッシュトークン |
| プラン使用の資格 | 参加アプリのPlusおよびProユーザー |
| 使用量がカウントされる場所 | プランのChatGPT WorkおよびCodexの使用量 |
| アプリごとの制御 | 全体的な週ごとの使用量に対する週ごとの上限。上限を超えた後のクレジットはデフォルトで無効 |
| プラン使用トークン | アクセストークンは1時間、リフレッシュトークンは30日(更新ごとに置き換えられる) |
| 開発者アクセス | 商用アプリ:興味表明フォーム経由での限定トライアル。オープンソースアプリ:セルフサービス |
情報源:Sign in with ChatGPTドキュメント、トークンリファレンス、およびOpenAIの他のアプリでChatGPTプランを使用する方法に関するヘルプ記事。
あなたのアプリが受け取るもの、受け取らないもの
IDはデフォルトです。openid profile emailを要求するクライアントはIDトークンを取得します。ウェブサイトガイドによると、profileは氏名やプロフィール画像などの利用可能なクレームをカバーし、emailはメールアドレスとメール認証クレームをカバーします。IDスコープは、ChatGPTの会話やOpenAI APIリソースへのアクセスを許可しません。
アカウントは、メールアドレスではなく、検証済みのsubと発行者、クライアントIDに基づいてキーを設定してください。OpenAIは、メールアドレスの一致だけでは所有権の証明にならないと警告しているため、既存のユーザーにはリンクの確認を求めるようにしてください。
プランの使用は別の許可です。ユーザーが追加のスコープを承認した場合、トークン応答は、対象となるResponses APIリクエスト用のアクセストークンを追加します。IDのみのクライアントはaccess_tokenを全く必要としません。id_tokenが唯一必要なアーティファクトです。
OAuthフローの仕組み
ウェブサイトフローは、標準的なPKCE付き認可コードグラントにOIDCを追加したものです。エンドポイントはhttps://auth.openai.com/.well-known/openid-configurationからロードします。ドキュメントには以下の本番環境の値が記載されています。
Issuer: https://auth.openai.com
Authorization endpoint: https://auth.openai.com/api/accounts/authorize
Token endpoint: https://auth.openai.com/api/accounts/oauth/token
JWKS URI: https://auth.openai.com/.well-known/jwks.json
- バックエンドは、新しい
state、S256チャレンジ付きのPKCEベリファイア、およびnonceを生成します。 - ブラウザを、クライアントID、正確なリダイレクトURI、およびスコープと共に認可エンドポイントにリダイレクトします。
- ユーザーが同意すると、OpenAIはあなたのコールバックにコードを返します。
- バックエンドは
stateをチェックし、コードを交換し、IDトークンの署名、発行者、オーディエンス、有効期限、およびnonceを検証します。 - ローカルアカウントを検索、作成、またはリンクし、独自のセッションを発行します。
公開クライアントはシークレットを送信しません。client_secret_basicを使用する機密クライアントは、HTTP Basicヘッダー内でのみシークレットを送信します。
オープンソースツールは異なる方法で登録されます。オープンソースのサインインガイドは、client_id=dynamic_agent_client、アプリ名に設定されたagent_name_hint、およびホストごとの永続的なext_agent_host_idから始まります。コールバックは、保存して再利用するための発行されたクライアントID(oaiapp_...など)を返します。リダイレクトは127.0.0.1のループバックURIであり、クライアントシークレットは関与しません。
ユーザーにとってのプラン利用の仕組み
ユーザーが見るもの、そしてサポートドキュメントで説明すべきこと:
- 対象となるリクエストはプランにカウントされます。 ユーザーのPlusまたはProプランにおけるChatGPT WorkとCodexの使用量に基づきます。
- 各アプリには週ごとの上限があります。 ユーザーは、週ごとの全体的な使用量に対する割合として上限を設定します(ドキュメントの設定例では10%から100%)。これは上限であり、予約されたプールではないため、他の場所での大量使用によって先にプランが使い果たされる可能性があります。
- クレジットはオプトインです。 制限後にクレジットを継続することはデフォルトでオフになっており、アプリの上限を100%にする必要があります。
- Plusには共有の5時間制限があります。 アカウントとセッションのページによると、これはプランを使用するすべてのアプリに適用されます。Proには適用されません。
- 切断すると今後の使用が停止します。 既に消費された使用量を元に戻すことはなく、OpenAIがあなたのアプリに通知することはありません。リクエストまたは更新が失敗したときにわかります。
ユーザーはこれらすべてをChatGPTの設定、使用量(chatgpt.com/settings/usage)で管理します。OpenAIのUIガイドラインは、使用量を管理というリンクでそこに誘導するよう求めています。
リリース時に参加しているのは誰か、そしてクライアントIDの取得方法
OpenAIのDevDayまとめでは、CognitionのDevin、Notion、Vercel、T3、OpenClaw、Dactylを含む16のプラン利用パートナーが挙げられています。The New Stackは、Amp、Warp、Kilo Code、OpenCodeなどを挙げ、Lovableは近日公開予定と記されています。OpenClawを運営している場合、両方のリストに記載されています。
The New Stackが報じたサム・アルトマンのステージでのプレゼンテーション:「今や、ユーザーを動かすためにトークン費用を負担する必要はありません。」
参加方法は、あなたが提供するものによって異なります。
- 商用またはホスト型アプリ: サインインは限定トライアルです。IDのみを希望する場合でも、プランの使用も希望する場合でも、OpenAIの興味表明フォームを通じてウェイトリストに参加し、クライアントIDをリクエストします(ドキュメントのURLではプランの使用を「トークン共有」と呼んでいます)。
- オープンソースおよびローカルホスト型ツール: プランの使用は、上記のセルフサービスフローを通じてすべてのオープンソースパートナーに開放されています。
API料金に何が変わるか
今日、あなたはトークンごとに支払い、その費用を価格設定を通じて回収しています。プランの使用により、モデルのコストはユーザーのサブスクリプションに移行するため、あなたの利益はAIの使用頻度に依存しなくなります。トレードオフは制御です。
| あなたのAPIキー | ユーザーのChatGPTプラン | |
|---|---|---|
| 誰が支払うか | あなた(トークンごと) | ユーザーのプラン(オプトインした場合のみクレジット) |
| 誰が使えるか | すべてのユーザー | chatgpt.tokens.use.directを許可したPlusおよびProユーザー |
| 制限 | あなたのレート制限ティア | 週ごとのプラン使用量、アプリごとの上限、Plusの5時間枠 |
| リクエストの形式 | Responses API全体 | store: falseとstream: trueが必須。temperature、max_output_tokens、ファイル検索、Code Interpreterは使用不可 |
| 典型的な失敗 | ティアを超過した場合の429 | 429 subscription_sharing_usage_limit_exceeded、またはストリーム途中でのresponse.failed内の同コード |
| フォールバック | あなたが設計するもの | 自動なし:OpenAIは請求を切り替えない |
| 表示するもの | あなたの使用量と価格設定 | 「ChatGPTプランを使用中」、使用量管理リンク、あなたのプランのうちどれがそれをサポートしているか |
これらの制限は、プレビュー制限ページに記載されています。保存された会話状態やホスト型ツールを必要とする機能は、現在、ユーザーのプランでは実行されません。
妥当なデフォルトはハイブリッド型です。PlusおよびProユーザーによるインタラクティブな作業にはプラン利用を、その他のすべてのユーザー、バックグラウンドジョブ、CI、スケジュールされたエージェントにはあなたのキーを使用します。上限に達したら、「使用量を管理」を表示し、二次的なオプションとして独自のクレジットを提供します。APIキーとOAuthの比較では一般的なトレードオフについて、AIエージェント向けのOAuthではユーザーの代理として安全に動作する方法について説明しています。
Apidogでサインインフローと失敗パスをテストする方法
ApidogはChatGPTでサインインする機能ではありません。あなたのOAuth設定、トークン呼び出し、エラー処理を検証します。Apidogをダウンロードして環境を作成してください。
1. クライアントを変数として保存します。 SIWC_CLIENT_ID、SIWC_REDIRECT_URI、そして機密クライアントの場合はSIWC_CLIENT_SECRETを機密値として追加し、さらにプラン使用のためのACCESS_TOKENも追加します。保存されたリクエストにシークレットが残らないように、それらを{{SIWC_CLIENT_ID}}として参照してください。
2. 認可コードフローを実行します。 「Auth」タブで、PKCE付きのOAuth 2.0認可コードを選択し、上記のエンドポイントを入力し、スコープをopenid profile emailに設定し、クライアント用に登録されたコールバックURLを使用します。Apidog OAuth 2.0ガイドで各フィールドについて詳しく説明しています。
3. 取得したIDトークンを検証します。 トークン交換をトークンエンドポイントへの独自のPOST(コード、ベリファイア、リダイレクトURI、クライアントID)として保存し、ポストプロセッサを追加します。署名とnonceのチェックは引き続きバックエンドで行います。
const body = pm.response.json();
pm.test("token exchange returned an ID token", () => {
pm.expect(pm.response.code).to.eql(200);
pm.expect(body.id_token).to.be.a("string");
});
const decode = require("atob");
const part = body.id_token.split(".")[1].replace(/-/g, "+").replace(/_/g, "/");
const claims = JSON.parse(decode(part + "=".repeat((4 - (part.length % 4)) % 4)));
pm.test("ID token claims match this client", () => {
pm.expect(claims.iss).to.eql("https://auth.openai.com");
pm.expect(claims.aud).to.include(pm.environment.get("SIWC_CLIENT_ID"));
pm.expect(claims.sub).to.be.a("string").and.not.empty;
pm.expect(claims.exp * 1000).to.be.above(Date.now());
});
name、email、pictureは利用可能な場合に返されるため、それらをアサートするのではなくログに記録してください。プランの使用については、body.scopeにchatgpt.tokens.use.directが含まれていることをアサートしてください。
4. 失敗パスをモックします。 実際のPlusアカウントは不適切なフィクスチャであるため、Apidogモックサーバーから以下を返します。
- プラン利用が拒否された場合:
scopeにchatgpt.tokens.use.directが含まれていないトークン応答。あなたのアプリはサインインを維持し、プラン利用の有効化を提案するか、別の請求パスを使用するべきです。 - 上限に達した場合:
error.codeがsubscription_sharing_usage_limit_exceededの429、さらにストリーム途中のresponse.failedストリームイベント内に同じコード。あなたのアプリがプランリクエストを一時停止することを確認します。 - 資格がない場合: 403
subscription_sharing_user_not_eligible。再試行したり、OAuthをループさせたりしないでください。 - 切断された場合:
invalid_grantを返すリフレッシュ、または401subscription_sharing_invalid_user。トークンをクリアし、再度サインインを求めます。
これらのケースをテストシナリオに連結し、Apidog CLIでCIで実行します。エラーと回復のページに全セットが記載されています。
5. ライブ呼び出しを確認します。 実際のプラントークンを使用して、ドキュメントのストリーミングリクエスト(ApidogではBearer {{ACCESS_TOKEN}}として)を送信し、ストリームが唯一の成功シグナルであるresponse.completedで終了することを確認します。
curl --no-buffer https://api.openai.com/v1/responses \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6.1-sol",
"input": [{"role": "user", "content": "Say exactly: Hello, world!"}],
"store": false,
"stream": true
}'
よくある質問
無料ユーザーはChatGPTでサインインできますか? サインインは世界中のChatGPTユーザーが利用できます。他のアプリ内でプランを使用するには、PlusまたはProが必要です。
私のアプリはユーザーのOpenAI APIキーを取得しますか? いいえ。あなたはIDトークンと、プラン利用の場合には、対象となるResponses APIリクエスト用のOAuthアクセストークンを取得します。
ユーザーが上限に達した場合、どうなりますか? リクエストはsubscription_sharing_usage_limit_exceededというエラーで失敗します。これはHTTP 429、またはストリーミング開始後のresponse.failedイベントです。一時停止し、使用量管理にリンクしてください。
Plusユーザーはパートナーアプリを通じてGPT-6.1 Solを実行できますか? ドキュメントの例ではプラントークンでgpt-6.1-solを使用していますが、提供する前にそのトークンでアカウントのモデルをリストしてください。GPT-6.1 Solは無料かで詳細をご確認ください。
次のステップ
商用アプリを運営している場合は、今すぐウェイトリストに参加し、待っている間にモックに対して上限と切断の処理を構築してください。プラン利用は、独自のAPI請求に代わるものではなく、その隣にあるオプションとして扱います。トークンのアサーションと失敗シナリオをApidogに保存しておけば、クライアントIDが届く日には、唯一の新しい変数は実際のトークンだけになります。
