Environnements et variables, sans client séparé.
URL de base, variables et en-têtes par défaut par environnement, bascule depuis le bandeau, le tout dans le navigateur du lecteur. La raison de garder un client API à côté de la doc — supprimée.

CAPTURE RÉELLE, AFFICHÉE À 1:1
Un environnement par contexte, couleur comprise.

{
"environments": [
{
"name": "Sandbox",
"baseUrl": "https://sandbox.example.com/v1",
"variables": {
"auth.bearerAuth": { "value": "", "sensitive": true },
"accountId": { "value": "acc_123", "sensitive": false }
},
"defaultHeaders": { "X-Client": "api-docs" }
}
]
}Une variable manquante bloque l’envoi.
{{var}} s’interpole dans l’URL, les en-têtes et le corps. Si une variable n’a pas de valeur dans l’environnement actif, l’envoi est bloqué avec un signal visible — le littéral {{var}} n’est jamais envoyé à votre API, pas une fois. Taper {{ autocomplète depuis les variables disponibles, provenance affichée.L’auth suit vos securitySchemes.
Chaque scheme déclaré par le schéma se remplit : bearer, basic, apiKey en en-tête, query ou cookie, OAuth2, OpenID Connect. La convention tient en une ligne — le scheme X lit la variable auth.X — donc les credentials vivent là où vivent les variables, par environnement.
OAuth2 tourne entièrement dans le navigateur, sans backend : Authorization Code avec PKCE (redirection pleine page, échange du code dans le navigateur) et client credentials. La config porte au plus un clientId — jamais un secret.

La session du lecteur devient l’identifiant.
apidoc.registerCredentialsProvider(async () => {
const r = await fetch("/api/docs-token", { credentials: "include" })
return r.ok ? { bearerAuth: (await r.json()).access_token } : null
})Une seule URL prépare un coéquipier.
https://docs.example.com/#/?setup=eyJ2IjoxLCJlbnYiOnsibmFtZSI6IlN0YWdpbmci…Le mode verrouillé pour les déploiements encadrés.
environmentsLocked: true fige les environnements déclarés : ni création, ni édition, ni suppression — seul le sélecteur reste. Les équipes plateforme publient leur doc interne avec les bons bacs à sable pré-câblés et rien à mal configurer.
Tout ce qu’un environnement porte alimente aussi la console d’essai, et ses valeurs sensibles sont caviardées par défaut dans chaque export et chaque entrée d’historique.
Local veut dire non chiffré.
Voyez-le dans la démo.