# Toute la config, en un bloc.

> Toutes les clés de la config ApiGlow en un seul objet copiable, un commentaire par clé : la surface entière telle qu’elle vit dans la page hôte.
>
> Source: https://apiglow.dev/fr/docs/full-reference/index.md


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](/fr/docs/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 v{{< app-version >}}.

```js {title="config.js"}
// 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](/fr/docs/builder/) assemble le même objet dans un formulaire, audite le thème qu’il écrit, et vous rend les deux balises d’installation.

