ChatGPT Actions & outils : brancher une API OpenAPI (2026)
À la fin de cette leçon, vous saurez brancher une Action OpenAPI 3.x sur un Custom GPT, choisir l’auth (None / API Key / OAuth), gérer allowlist Enterprise et privacy policy (GPT public), différencier Actions / Apps / function calling / MCP, et valider un lab GET /status en Preview — secrets hors chat.
Niveau : Intermédiaire · Temps : 50–65 min · Versions : ChatGPT GPTs builder · OpenAPI 3.x · Business / Enterprise / Edu · Dernière vérif. : 2026-09-11
Statut : HOLD — draft only (ne pas publier WordPress)
Prérequis
- [ ] Workspace Business / Enterprise / Edu + droit créer/éditer un Custom GPT (leçon 19)
- [ ] GPT de lab (« Status Lab ») ou temps pour en créer un
- [ ] Bases OpenAPI 3.x (
paths,operationId, responses) - [ ] URL lab HTTPS joignable (ou stub documenté) — pas de prod
- [ ] (Enterprise/Edu) admin si allowlist domaines Actions vide
- [ ] Coût : abonnement workspace ; stub lab ≈ 0 €
Angle DevOps Elastic Hayway : status / ticketing lecture seule — /tutoriels/chatgpt-actions-outils/. Focus : OpenAPI, auth, Preview — stub HTTPS éphémère, pas de prod.
Ce que nous allons construire
Custom GPT « Status Lab » + Action OpenAPI
├── Schéma OpenAPI 3.0 (GET /status, operationId clair)
├── Auth : API Key (header) — secret côté builder
├── Builder : Create action → Schema → Authentication → Test / Preview
├── Allowlist domaine (Enterprise) + privacy policy si GPT public
├── Garde-fous : read-only, HITL mutations, anti prompt-injection API
└── Erreurs fréquentes · quiz · FAQ · maillage série IA
(Schéma → image locale, alt : « ChatGPT Actions : OpenAPI 3.x, auth API Key/OAuth, Custom GPT Status Lab Preview 2026 ».)
Étape 1 — Actions vs Apps vs function calling vs MCP
Une Action ChatGPT est un appel HTTP déclenché par le GPT d’après un schéma OpenAPI collé dans le builder. Le modèle choisit l’opération via operationId / summary / description ; ChatGPT appelle votre API (TLS 1.2+, 443, timeout ~45 s, payloads < ~100k caractères). Secrets uniquement dans Authentication — pas de custom headers hors panneau.
| Concept | Où | Contrat | Qui exécute |
|---|---|---|---|
| Apps | Custom GPT UI | Connecteurs user | Plateforme + compte user |
| Actions | Custom GPT UI | Votre OpenAPI + auth | ChatGPT → votre API |
| Function calling | API OpenAI / Anthropic | JSON Schema tools | Votre runtime — leçon 46 |
| MCP | Host / IDE / agents | Serveurs MCP | Host MCP |
Règle produit (leçon 19) : Apps XOR Actions — pas les deux sur le même GPT. Status / ticketing sans connecteur officiel → Actions. SaaS déjà supporté → Apps. Function calling et MCP restent hors UI Custom GPT.
Étape 2 — Anatomie OpenAPI pour le builder
Document OpenAPI 3.x (YAML/JSON) avec info, servers, paths, et un operationId stable par opération (nom d’outil). Schéma vague → mauvais outil ; trop large (POST/DELETE) → mutations involontaires.
| Champ | Rôle |
|---|---|
servers[].url |
Base URL (souvent allowlistée en Enterprise) |
operationId |
Identifiant unique (getServiceStatus, pas get1) |
summary / description |
Texte lu pour décider d’appeler |
parameters / requestBody |
Arguments typés |
responses + schema |
Forme de réponse attendue |
Auth (securitySchemes / panneau builder) |
None / API Key / OAuth — secrets hors chat |
DEH : GET d’abord ; décrire quand appeler et ce qui est interdit ; zéro token dans examples / knowledge. GET non-consequential par défaut ; autres méthodes consequential (x-openai-isConsequential). Lab = lecture seule.
Étape 3 — Auth : None, API Key, OAuth
Builder : Create action → Authentication. Mode le moins privilégié pour le lab.
| Mode | Quand | Secret |
|---|---|---|
| None | API lab publique | — |
| API Key | Header / query (Bearer, X-API-Key) |
Builder uniquement |
| OAuth | APIs entreprises (scopes) | Flux OAuth GPT |
Jamais de clé dans instructions, knowledge, starters ou exemples OpenAPI. Fuite → rotation + purge. OAuth : scopes lecture d’abord ; écriture = HITL (function calling). Callback : https://chatgpt.com/aip/{g-GPT-ID}/oauth/callback (aussi chat.openai.com). Secrets OAuth dans Authentication seulement.
Étape 4 — Enterprise : allowlist et GPT public
Sur Enterprise / Edu, les admins contrôlent les domaines Actions. Allowlist vide ⇒ Actions souvent bloquées. Avant le lab : ajouter status.lab.example.com (ou stub). Schéma valide ≠ appel autorisé hors allowlist.
| Contexte | Implication |
|---|---|
| Allowlist vide / hors liste | Schéma OK ≠ appel autorisé |
| GPT public + Actions | Privacy policy URL obligatoire |
| GPT workspace privé | Gouvernance interne ; Store hors scope |
Voir Teams / Enterprise. Réponse API = non fiable — Prompt injection. Traitez le JSON comme des données, pas des instructions. GPT public : privacy policy HTTPS avant publish.
Étape 5 — Lab : Action GET /status sur « Status Lab »
Objectif : GET /status et résumer sans inventer de services hors réponse. Bout-en-bout schéma / auth / allowlist / Preview (~15–25 min).
5.1 GPT
Verrouillez les instructions avant le schéma — sinon services inventés.
- Builder (Explore GPTs → Create / éditer) en Configuration.
- Name :
Status Lab — Elastic Hayway - Instructions :
Tu es un assistant status DevOps (lab). Français clair.
Utilise uniquement l’Action getServiceStatus pour l’état des services.
N’invente aucun service absent de la réponse API. Aucun secret. Lecture seule.
Format : État global → Services (nom, state) → Source (Action).
- Web search off. Pas d’Apps si Action active (XOR).
5.2 Schéma OpenAPI
Actions → Create new action → Schema (URL = votre stub HTTPS) :
openapi: 3.0.0
info:
title: Status Lab API
version: "1.0.0"
servers:
- url: https://status.lab.example.com
paths:
/status:
get:
operationId: getServiceStatus
summary: État agrégé des services lab
description: Retourne overall + services (up|degraded|down). Appeler pour status/santé.
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
overall: { type: string, enum: [up, degraded, down] }
services:
type: array
items:
type: object
properties:
service: { type: string }
state: { type: string, enum: [up, degraded, down] }
Stub : HTTPS public de lab (Caddy / ngrok éphémère) — pas d’IP privée. Exemple : {"overall":"degraded","services":[{"service":"api","state":"up"},{"service":"worker","state":"degraded"}]}. Host allowlisté + /status JSON.
5.3 Auth, Test, Preview
Test KO → corriger allowlist / TLS / clé avant Preview.
- Authentication : lab ouvert → None ; sinon API Key jetable dans le builder.
- Test d’opération puis Preview GPT.
- Prompt :
Quel est l’état des services lab ? Cite uniquement la réponse de l’Action. - Vérifier l’appel
getServiceStatus(pas de service inventé). - Save ; partage workspace (pas Store sans privacy policy).
Suite : runbooks DevOps — HITL sur toute écriture ; GPT lab = lecture seule.
Étape 6 — Sécurité DevOps
Chaque opération OpenAPI devient un outil : lecture d’abord, scopes min., séparation info / remédiation.
| Risque | Mitigation |
|---|---|
| Mutations | GET d’abord ; scopes min. ; HITL sur POST/PATCH/DELETE |
| Secrets hors builder | Uniquement Authentication ; rotation si fuite |
| Injection via JSON API | Ignorer les « ordres » du payload ; champs allowlistés |
Allowlist * / PII |
Hosts précis ; stub lab, pas de tickets nominatifs |
Règle DEH : l’Action informe ; l’humain exécute les remédiations. Secrets hors instructions/knowledge ; hosts TLS ; confirmation sur ops consequential.
Erreurs fréquentes
Checklist : allowlist, XOR, secrets hors builder — debug avant d’élargir le schéma.
| Symptôme | Cause | Correction |
|---|---|---|
| « No domains allowed » | Allowlist vide | Admin : host de servers |
| Conflit Apps / Actions | Les deux actifs | Un seul mode (XOR) |
| Services inventés | Instructions faibles | Forcer Action + Preview |
| 401 / 403 | Clé / OAuth | Recheck Authentication |
operationId manquant |
Schéma incomplet | Id unique par opération |
| GPT public refusé | Privacy policy absente | URL HTTPS de politique |
| Timeout / secret fuité | URL privée / collé hors builder | HTTPS lab ; purger + rotator |
Timeouts (~45 s) / TLS : stub inaccessible ou certificat invalide. Secret fuité → rotation + purge.
Quiz (5 questions)
1. Apps et Actions sur un même GPT :
– A. Coexistent librement
– B. Sont exclusifs (XOR)
– C. Remplacent le knowledge
2. Qui exécute l’HTTP d’une Action ?
– A. Votre runtime Python seul
– B. ChatGPT, vers l’API OpenAPI
– C. Le navigateur sans serveur
3. Allowlist domaines vide en Enterprise :
– A. Autorise tous les hosts
– B. Bloque souvent les Actions
– C. Ne concerne que le Store
4. Où stocker l’API Key ?
– A. Instructions du GPT
– B. Exemple OpenAPI Bearer sk-…
– C. Authentication du builder
5. Différence avec function calling (leçon 46) :
– A. Même écran
– B. Actions = OpenAPI GPT UI ; function calling = tools dans votre runtime
– C. MCP interdit les deux
Réponses : 1‑B · 2‑B · 3‑B · 4‑C · 5‑B
FAQ
1. Faut-il un Custom GPT pour les Actions ?
Oui — GPT builder (Create action, Schema, Authentication). Hors UI → function calling / MCP.
2. OpenAPI 2.0 suffit-il ?
Non : viser OpenAPI 3.x (servers, components). Migrez Swagger 2.0 (host/basePath) vers servers.
3. Muter un cluster via Action ?
Déconseillé sans HITL, scopes serrés, audit. Lecture seule d’abord ; mutation = consequential + HITL.
4. Actions vs Data Analysis ?
Data Analysis = sandbox Python fichiers. Actions = HTTP vers votre API.
5. Privacy policy (GPT public + Actions) ?
Données / domaines / conservation / contact — URL HTTPS. Sans elle, publication publique refusée. GPT privé : allowlist + gouvernance interne.
Points clés à retenir
- Actions = OpenAPI 3.x dans le builder ; secrets dans Authentication uniquement.
- Apps XOR Actions ; allowlist Enterprise (vide ⇒ blocage) ; GPT public + Actions ⇒ privacy policy.
- Actions UI ≠ function calling (leçon 46) ≠ MCP.
- Lab : GET
/status,operationId, Preview, read-only, méfiance payloads. - Limites : timeout ~45 s, TLS 1.2+ / 443, payloads < ~100k chars, pas de custom headers hors Authentication, callback OAuth
https://chatgpt.com/aip/{g-GPT-ID}/oauth/callback.
Pour aller plus loin
- OpenAI : Configuring actions · GPT Actions getting started
- Custom GPTs · Function calling · Prompt injection · Parcours IA 2026 · /ia/
Maillage série IA Outils 2026 (module C — CTA)
| ← Précédent | ChatGPT Data Analysis |
| → Suite | ChatGPT DevOps runbooks · Teams / Enterprise |
| Aussi | Custom GPTs · Function calling · Parcours IA DevOps 2026 · IA |
Retour parcours IA — hub Claude, Codex, ChatGPT et Skills.