開発者向けChatGPTログイン:OAuthフロー、プラン利用、API請求額への影響

開発者向けChatGPTでサインイン:アプリが受け取るもの、プラスおよびプロプランの利用状況と週次キャップの仕組み、およびOAuthフローのテスト方法。

Emmanuel Mumba

Emmanuel Mumba

2 10月 2026

開発者向けChatGPTログイン:OAuthフロー、プラン利用、API請求額への影響

Apidog エンタープライズ

オンプレミスデプロイ

SSO & RBAC

SOC 2 準拠

Apidog Enterpriseを見る

「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
  1. バックエンドは、新しいstate、S256チャレンジ付きのPKCEベリファイア、およびnonceを生成します。
  2. ブラウザを、クライアントID、正確なリダイレクトURI、およびスコープと共に認可エンドポイントにリダイレクトします。
  3. ユーザーが同意すると、OpenAIはあなたのコールバックにコードを返します。
  4. バックエンドはstateをチェックし、コードを交換し、IDトークンの署名、発行者、オーディエンス、有効期限、およびnonceを検証します。
  5. ローカルアカウントを検索、作成、またはリンクし、独自のセッションを発行します。

公開クライアントはシークレットを送信しません。client_secret_basicを使用する機密クライアントは、HTTP Basicヘッダー内でのみシークレットを送信します。

オープンソースツールは異なる方法で登録されます。オープンソースのサインインガイドは、client_id=dynamic_agent_client、アプリ名に設定されたagent_name_hint、およびホストごとの永続的なext_agent_host_idから始まります。コールバックは、保存して再利用するための発行されたクライアントID(oaiapp_...など)を返します。リダイレクトは127.0.0.1のループバックURIであり、クライアントシークレットは関与しません。

ユーザーにとってのプラン利用の仕組み

ユーザーが見るもの、そしてサポートドキュメントで説明すべきこと:

ユーザーはこれらすべてを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が報じたサム・アルトマンのステージでのプレゼンテーション:「今や、ユーザーを動かすためにトークン費用を負担する必要はありません。」

参加方法は、あなたが提供するものによって異なります。

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モックサーバーから以下を返します。

これらのケースをテストシナリオに連結し、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が届く日には、唯一の新しい変数は実際のトークンだけになります。

ボタン

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる