DEV Community

Cover image for Se connecter avec ChatGPT pour les développeurs : flux OAuth, consommation de forfait et impact sur la facturation API
Antoine Laurent
Antoine Laurent

Posted on Originally published at apidog.com

Se connecter avec ChatGPT pour les développeurs : flux OAuth, consommation de forfait et impact sur la facturation API

Se connecter avec ChatGPT est l’intégration OAuth 2.0 et OpenID Connect d’OpenAI, disponible pour les utilisateurs de ChatGPT dans le monde entier. Votre application reçoit un identifiant de compte stable, ainsi que le nom, l’adresse e-mail et la photo de profil de l’utilisateur. Depuis le DevDay du 29 septembre 2026, les utilisateurs Plus et Pro peuvent aussi autoriser des applications participantes à exécuter des requêtes d’IA sur leur plan ChatGPT, dans la limite d’un plafond hebdomadaire défini par application. Votre application ne reçoit jamais leurs conversations, leurs souvenirs ni leur clé API.

Essayez Apidog dès aujourd’hui

Ce guide explique comment implémenter la connexion, décider quand utiliser le plan ChatGPT plutôt que votre clé API, gérer les erreurs de facturation et tester le flux dans Apidog. Pour le contexte de l’événement, consultez le récapitulatif du DevDay 2026. Si la différence entre identité et autorisation n’est pas claire, commencez par OAuth vs OpenID.

Se connecter avec ChatGPT : vue d’ensemble

Élément Ce qu’OpenAI documente
Portées d’identité openid profile email
Portées d’utilisation du plan (flux open-source) offline_access resource.invoke chatgpt.tokens.use.direct, avec resource=https://api.openai.com/v1
Ce que reçoit votre application Un jeton d’identité ; avec l’utilisation du plan, un jeton d’accès et un jeton de rafraîchissement
Éligibilité à l’utilisation du plan Utilisateurs Plus et Pro, dans les applications participantes
Où l’utilisation est comptabilisée Utilisation ChatGPT Work et Codex du plan
Contrôle par application Plafond hebdomadaire en pourcentage de l’utilisation hebdomadaire totale ; les crédits après plafond sont désactivés par défaut
Durée des jetons de plan Jeton d’accès : 1 heure ; jeton de rafraîchissement : 30 jours, remplacé à chaque rafraîchissement
Accès développeur Applications commerciales : essai limité via formulaire d’intérêt. Applications open-source : libre-service

Sources : la documentation Se connecter avec ChatGPT, la référence des jetons et l’article d’aide OpenAI sur l’utilisation de votre plan ChatGPT dans d’autres applications.

Ce que votre application reçoit — et ne reçoit pas

Par défaut, implémentez uniquement l’identité. Un client qui demande les scopes suivants reçoit un jeton d’identité :

openid profile email
Enter fullscreen mode Exit fullscreen mode

D’après le guide web :

  • profile donne accès aux revendications disponibles, notamment le nom et l’image de profil ;
  • email donne accès à l’adresse e-mail et à son état de vérification.

Ces scopes n’accordent aucun accès aux conversations ChatGPT ni aux ressources de l’API OpenAI.

Identifiez le compte avec sub

Ne liez pas un compte local à partir de l’e-mail seul. Utilisez :

  • iss : l’émetteur ;
  • sub : l’identifiant stable de l’utilisateur ;
  • aud : votre ID client.

OpenAI indique qu’une correspondance d’e-mail seule ne prouve pas la propriété du compte. Si un utilisateur existant veut associer ChatGPT à son compte local, demandez une confirmation explicite.

L’utilisation du plan est une autorisation distincte

L’utilisation du plan n’est pas incluse dans la connexion de base. Si l’utilisateur accepte les scopes supplémentaires, la réponse de jeton inclut un access_token utilisable pour des requêtes API de Réponses éligibles.

Pour un client qui ne fait que de l’authentification :

  • n’exigez pas d’access_token ;
  • utilisez l’id_token pour établir votre session ;
  • ne demandez pas de scopes d’utilisation du plan sans besoin fonctionnel.

Implémenter le flux OAuth avec PKCE

Le flux web repose sur le grant Authorization Code avec PKCE, complété par OpenID Connect.

Chargez la configuration OIDC depuis :

https://auth.openai.com/.well-known/openid-configuration
Enter fullscreen mode Exit fullscreen mode

Les endpoints de production documentés sont :

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
Enter fullscreen mode Exit fullscreen mode

Étapes côté backend

  1. Générez un state aléatoire, un nonce et une paire PKCE (code_verifier / code_challenge S256).
  2. Stockez temporairement state, nonce et code_verifier dans une session sécurisée côté serveur.
  3. Redirigez le navigateur vers l’endpoint d’autorisation avec votre client_id, votre URI de redirection exacte et les scopes demandés.
  4. À votre callback, vérifiez que le paramètre state correspond à la valeur stockée.
  5. Échangez le code d’autorisation contre des jetons.
  6. Vérifiez la signature du jeton d’identité avec le JWKS, puis validez iss, aud, exp et nonce.
  7. Créez, trouvez ou liez le compte local à partir de iss et sub.
  8. Émettez votre propre session applicative.

Les clients publics n’envoient pas de secret client. Un client confidentiel qui utilise client_secret_basic transmet son secret uniquement via l’en-tête HTTP Basic.

Cas des outils open-source locaux

Les outils open-source suivent un flux d’enregistrement différent. Le guide de connexion open-source utilise notamment :

client_id=dynamic_agent_client
agent_name_hint=<nom de votre application>
ext_agent_host_id=<identifiant persistant par hôte>
Enter fullscreen mode Exit fullscreen mode

Points à implémenter :

  • utilisez une URI de bouclage 127.0.0.1 comme redirection ;
  • sauvegardez l’ID client émis au callback, typiquement sous la forme oaiapp_... ;
  • réutilisez cet ID client lors des connexions suivantes ;
  • ne configurez pas de secret client.

Expliquer l’utilisation du plan à vos utilisateurs

Votre interface et votre documentation de support doivent expliciter le comportement suivant.

  • Les requêtes éligibles sont déduites du plan. Elles utilisent l’allocation ChatGPT Work et Codex du plan Plus ou Pro.
  • Chaque application possède un plafond hebdomadaire. L’utilisateur le définit comme un pourcentage de son utilisation hebdomadaire globale. La documentation donne un exemple allant de 10 % à 100 %.
  • Le plafond n’est pas un quota réservé. Une utilisation intensive dans ChatGPT ou une autre application peut épuiser l’allocation avant votre application.
  • Les crédits sont facultatifs. Continuer avec des crédits après la limite est désactivé par défaut et nécessite un plafond d’application de 100 %.
  • Plus applique une limite partagée de cinq heures. D’après la page comptes et sessions, cette limite couvre toutes les applications utilisant le plan. Elle ne s’applique pas à Pro.
  • La déconnexion stoppe les utilisations futures. Elle ne retire pas l’utilisation passée et OpenAI ne notifie pas votre application. Vous le détectez lorsqu’un rafraîchissement ou une requête échoue.

Ajoutez dans votre produit un lien Gérer l’utilisation vers chatgpt.com/settings/usage, conformément aux directives d’interface OpenAI.

Obtenir un ID client

Le récapitulatif DevDay d’OpenAI cite 16 partenaires d’utilisation du plan, notamment Devin de Cognition, Notion, Vercel, T3, OpenClaw et Dactyl. The New Stack mentionne également Amp, Warp, Kilo Code et OpenCode, avec Lovable indiqué comme « à venir ». Si vous utilisez OpenClaw, il apparaît dans les deux listes.

Selon une déclaration de Sam Altman rapportée par The New Stack : « maintenant, vous n’avez plus à couvrir leurs coûts de jetons pour les faire démarrer. »

Le parcours dépend de votre type d’application :

  • Application commerciale ou hébergée : la connexion est disponible dans le cadre d’un essai limité. Demandez un ID client via le formulaire d’intérêt OpenAI, que vous utilisiez seulement l’identité ou aussi l’utilisation du plan.
  • Outil open-source hébergé localement : l’utilisation du plan est disponible en libre-service via le flux open-source.

Décider quand utiliser le plan ChatGPT plutôt que votre clé API

L’utilisation du plan transfère le coût du modèle vers l’abonnement de l’utilisateur. Votre marge dépend alors moins de l’intensité d’utilisation IA, mais vous perdez une partie du contrôle sur les limites et les capacités disponibles.

Votre clé API Plan ChatGPT de l’utilisateur
Qui paie Vous, par jeton Le plan de l’utilisateur ; crédits uniquement s’il les active
Utilisateurs concernés Tous les utilisateurs Utilisateurs Plus et Pro ayant accordé chatgpt.tokens.use.direct
Limites Votre niveau de rate limit Utilisation hebdomadaire, plafond par application, fenêtre Plus de cinq heures
Requête requise API de Réponses complète store: false et stream: true obligatoires
Fonctionnalités indisponibles Selon votre configuration API Pas de temperature, max_output_tokens, recherche de fichiers ni Interprète de code
Échec courant HTTP 429 lié à votre rate limit HTTP 429 subscription_sharing_usage_limit_exceeded ou événement response.failed pendant le streaming
Bascule automatique À concevoir dans votre produit Aucune : OpenAI ne modifie pas votre facturation
UI à prévoir Votre propre suivi et tarification « Utilisation du plan ChatGPT », lien Gérer l’utilisation et plans compatibles

Les restrictions sont détaillées dans la page des limitations de prévisualisation. Les fonctionnalités nécessitant un état de conversation persistant ou des outils hébergés ne fonctionnent pas actuellement avec le plan de l’utilisateur.

Stratégie de repli recommandée

Adoptez une stratégie hybride :

  1. utilisez le plan ChatGPT pour les interactions en temps réel des utilisateurs Plus et Pro ;
  2. utilisez votre clé API pour les utilisateurs non éligibles ;
  3. utilisez votre clé API pour les tâches de fond, la CI et les agents planifiés ;
  4. lorsque le plafond est atteint, suspendez les requêtes financées par le plan ;
  5. affichez Gérer l’utilisation et proposez éventuellement vos propres crédits.

Pour approfondir le choix de modèle d’accès, consultez Clé API vs OAuth et OAuth pour les agents d’IA.

Tester la connexion et les erreurs dans Apidog

Apidog ne connecte pas directement vos utilisateurs à ChatGPT : il vous aide à tester votre configuration OAuth, vos échanges de jetons et vos scénarios d’erreur. Téléchargez Apidog, puis créez un environnement dédié.

1. Définir les variables d’environnement

Ajoutez les variables suivantes :

SIWC_CLIENT_ID
SIWC_REDIRECT_URI
SIWC_CLIENT_SECRET
ACCESS_TOKEN
Enter fullscreen mode Exit fullscreen mode

Traitez SIWC_CLIENT_SECRET comme une valeur sensible et référencez les variables dans vos requêtes :

{{SIWC_CLIENT_ID}}
{{SIWC_REDIRECT_URI}}
{{ACCESS_TOKEN}}
Enter fullscreen mode Exit fullscreen mode

Ainsi, vos secrets ne sont pas enregistrés en clair dans les collections.

2. Tester Authorization Code + PKCE

Dans l’onglet Auth d’Apidog :

  1. choisissez OAuth 2.0 ;
  2. sélectionnez Authorization Code with PKCE ;
  3. renseignez les endpoints OpenAI ;
  4. définissez le scope initial sur :
openid profile email
Enter fullscreen mode Exit fullscreen mode
  1. utilisez une URI de rappel déjà enregistrée pour votre client.

Le guide OAuth 2.0 d’Apidog détaille la configuration de chaque champ.

3. Vérifier la réponse de jeton

Créez une requête POST dédiée vers l’endpoint de jetons. Testez au minimum la présence de l’id_token et ses revendications décodées.

const body = pm.response.json();

pm.test("L'échange de jeton retourne un 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("Les claims correspondent à ce 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());
});
Enter fullscreen mode Exit fullscreen mode

Ces tests décodent le jeton, mais ne remplacent pas les contrôles serveur. Votre backend doit toujours vérifier :

  • la signature JWT via le JWKS ;
  • le nonce ;
  • l’émetteur ;
  • l’audience ;
  • l’expiration.

N’échouez pas le test si name, email ou picture sont absents : enregistrez-les seulement lorsqu’ils sont fournis.

Pour l’utilisation du plan, vérifiez aussi que body.scope contient :

chatgpt.tokens.use.direct
Enter fullscreen mode Exit fullscreen mode

4. Simuler les chemins d’échec

Ne testez pas uniquement avec un vrai compte Plus. Créez des réponses simulées avec un serveur de maquette Apidog.

Scénario Réponse simulée Comportement attendu
Utilisation du plan refusée Réponse de jeton sans chatgpt.tokens.use.direct dans scope Conserver la connexion et proposer l’activation du plan ou une autre facturation
Plafond atteint HTTP 429 avec error.code: subscription_sharing_usage_limit_exceeded Suspendre les requêtes financées par le plan
Erreur pendant le streaming Événement response.failed avec le même code Arrêter le flux et afficher une action de récupération
Utilisateur non éligible HTTP 403 subscription_sharing_user_not_eligible Ne pas réessayer ni relancer OAuth en boucle
Utilisateur déconnecté invalid_grant au rafraîchissement ou HTTP 401 subscription_sharing_invalid_user Effacer les jetons et demander une nouvelle connexion

Enchaînez ces cas dans un scénario de test, puis exécutez-le dans votre CI avec la CLI Apidog. La page erreurs et récupération contient la liste complète des erreurs documentées.

5. Vérifier un appel réel au plan

Avec un vrai jeton de plan, envoyez une requête de streaming. Ajoutez Bearer {{ACCESS_TOKEN}} dans Apidog ou testez avec curl.

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
  }'
Enter fullscreen mode Exit fullscreen mode

Considérez response.completed comme le signal de réussite du flux. Un statut HTTP initial réussi ne garantit pas qu’un streaming se terminera correctement.

FAQ

  • Les utilisateurs gratuits peuvent-ils se connecter avec ChatGPT ?

    Oui. La connexion est disponible pour les utilisateurs ChatGPT du monde entier. L’utilisation du plan dans une application tierce nécessite Plus ou Pro.

  • Mon application reçoit-elle la clé API OpenAI de l’utilisateur ?

    Non. Votre application reçoit un jeton d’identité et, pour l’utilisation du plan, un jeton OAuth destiné aux requêtes API de Réponses éligibles.

  • Que se passe-t-il lorsqu’un utilisateur atteint son plafond ?

    Les requêtes échouent avec subscription_sharing_usage_limit_exceeded : HTTP 429 ou événement response.failed après le démarrage du streaming. Suspendez les requêtes du plan et redirigez l’utilisateur vers Gérer l’utilisation.

  • Un utilisateur Plus peut-il exécuter GPT-6.1 Sol via une application partenaire ?

    L’exemple de la documentation utilise gpt-6.1-sol avec un jeton de plan. Listez toutefois les modèles accessibles avec ce jeton avant d’en proposer un dans votre interface. Consultez aussi GPT-6.1 Sol est-il gratuit ?.

Étape suivante

Si vous développez une application commerciale, rejoignez la liste d’attente et implémentez dès maintenant vos scénarios de plafonnement, de déconnexion et de repli à partir de maquettes. Traitez l’utilisation du plan comme une option complémentaire à votre facturation API, pas comme un remplacement total.

Enregistrez vos assertions de jetons et vos scénarios d’échec dans Apidog. Lorsque vous recevrez votre ID client, il ne vous restera qu’à remplacer les variables de test par les identifiants de production.

Top comments (0)