Toute la config, en un bloc.
Toutes les clés qu’ApiGlow accepte, dans la forme que la config prend dans la page, un commentaire par clé. Référence de configuration parcourt la même surface clé par clé — valeurs par défaut, sémantique, règles par spec ; cette page-ci en est la version copiable, en date de la v0.3.0.
// Le même objet, sans les commentaires, peut vivre inline dans la page en
// JSON strict : <script id="api-doc-config" type="application/json">{ … }</script>
window.API_DOC_CONFIG = {
openapi: {
// La seule clé requise : votre schéma, JSON ou YAML, lisible en CORS.
url: "https://example.com/openapi.json",
// …ou le schéma porté par la page — aucune requête, aucun CORS ; gagne sur url.
// spec: { openapi: "3.1.0", … },
// …ou plusieurs API dans une installation ; presque toutes les clés
// ci-dessous sont redéclarables par entrée. Gagne sur url.
// specs: [{ id: "payments", title: "API Paiements", url: "…" }],
// default: "payments", // spec affichée à l'arrivée (multi-spec)
// Masquage documentaire, pas contrôle d'accès — par tag, méthode + chemin,
// chemin, ou operationId.
hide: ["tag:Internal", "DELETE /admin/*"],
// Documents OpenAPI Overlay 1.1 appliqués au schéma au chargement, dans l'ordre.
overlays: ["/overlays/fix-descriptions.json"],
// Un correctif de départ amorcé dans l'éditeur d'overlay du lecteur.
userOverlay: null
},
theme: {
default: "light", // thème du premier chargement (défaut "system" : suit l'OS) ; le choix du lecteur prime ensuite
available: ["light", "dark", "nord"], // entrées du sélecteur — les 35 thèmes daisyUI sont dans le bundle
custom: [ // votre thème, sans étape de build (racine uniquement en multi-spec)
{ name: "acme", extends: "dark", tokens: { "--color-primary": "#7c3aed" } }
]
},
language: {
default: "browser", // suit les langues du navigateur ; ou épinglez un code
available: ["en", "fr"] // les langues non actives se téléchargent à la demande
},
environments: [ // pré-remplis au premier chargement ; le stockage du lecteur prime ensuite
{
name: "sandbox",
color: "green", // le rouge signale la production d'un coup d'œil
baseUrl: "https://sandbox.example.com",
variables: { "auth.bearerAuth": { value: "demo-token", sensitive: true } },
defaultHeaders: { "X-Client": "docs" }
}
],
environmentsLocked: false, // true retire tout point d'entrée de création ou d'édition
docsPages: [ // vos guides markdown, tissés dans la nav
{ slug: "premiers-pas", title: "Premiers pas", url: "/docs/premiers-pas.md" },
{ slug: "changelog", title: "Journal des versions", url: "/docs/changelog.md", kind: "changelog" },
// nav: "bottom" envoie une entrée de premier niveau en zone d'annexe, sous la référence.
{ slug: "support", title: "Support", url: "/docs/support.md", nav: "bottom" }
],
announcements: [ // un bandeau au-dessus de l'en-tête — ou "/news.json", un fichier que vos ops éditent
{ id: "v2", text: "**La v2 est là** — voir le [guide de migration](/migrate).", level: "info" },
{ text: "Maintenance dimanche, 02:00–06:00 UTC.", level: "warning", dismissible: false,
startsAt: "2026-09-01T00:00:00Z", endsAt: "2026-09-07T06:00:00Z" }
],
feedback: {
url: null // votre endpoint pour « Cette page vous a-t-elle été utile ? » — null retire la ligne
},
scenarios: [ // scénarios exécutables livrés avec la doc
{ id: "premiere-commande", title: "Commander un animal", url: "/scenarios/premiere-commande.json", pinned: true }
],
features: {
scenarios: true, // false retire la fonctionnalité en entier
audit: true, // false retire l'audit de schéma
onboarding: false, // true ajoute la page « Premier appel » générée (#/first-call)
ci: true // false retire le panneau « Automatiser ce scénario »
},
audit: { // configuration des règles, lue par #/audit comme par `apiglow audit`
rules: { "property-described": "off" }, // identifiant de règle → "error" | "warning" | "info" | "off"
overrides: [ // la même chose, sous des motifs de pointeurs JSON — la dernière l'emporte
{ paths: ["/paths/~1legacy~1*"], rules: { "response-example": "off" }, reason: "frozen legacy API" }
]
},
branding: {
productName: "API Acme", // nom dans l'en-tête
logoUrl: "/logo.svg" // logo dans l'en-tête
},
tryIt: {
proxyUrl: null, // proxy CORS optionnel que vous hébergez — "{{target}}" = URL cible encodée
requestCredentials: "same-origin" // "include" pour l'auth par cookie de session cross-origin
},
history: {
maxEntries: 500, // purge au-delà de ce nombre…
maxAgeDays: 30 // …ou de cet âge (racine uniquement en multi-spec)
},
oauth: {
// Clé = le nom du scheme dans securitySchemes. Jamais de client secret.
acme_auth: { clientId: "public-client-id" }
},
seo: {
index: true // false injecte un noindex robots avant le premier rendu (racine uniquement)
}
}Seule openapi.url, spec ou specs est requise : supprimez toute ligne qui ne vous sert pas, l’app appliquera ses valeurs par défaut. Le builder assemble le même objet dans un formulaire, audite le thème qu’il écrit, et vous rend les deux balises d’installation.