API REST

Routes extraites du routeur réel à chaque build, avec leurs frontières d’authentification.

Sur cette page

Session, origine et CSRF

L’API /api/v1 sert principalement l’administration. Les routes privées exigent une session ou, sur les routes explicitement autorisées, un jeton d’intégration. Le cookie est HttpOnly, SameSite=Lax et Secure lorsque CMS_ORIGIN utilise HTTPS. Les endpoints publics d’extensions sont déclarés séparément et n’exposent pas toutes les fonctions d’administration.

Les mutations par session contrôlent Origin égal à CMS_ORIGIN et x-csrf-token obtenu avec la session. Les requêtes Bearer explicitement autorisées n’utilisent ni cookie ni CSRF. Les corps JSON utilisent Content-Type: application/json ; les uploads média sont binaires. Les mutations publiques d’extensions utilisent leur propre jeton signé.

Depuis l’origine du CMS après connexion
const sessionResponse = await fetch("/api/v1/session", { credentials: "same-origin" });
if (!sessionResponse.ok) throw new Error("Session required");
const result = await fetch("/api/v1/content", { credentials: "same-origin" });
if (!result.ok) throw new Error("Content request failed");
const contents = await result.json();

Contrat et erreurs

GET /api/v1/openapi expose le contrat de l’instance avec tools.read. La référence est extraite des mêmes déclarations. Une permission de route n’énumère pas tous les contrôles métier ; les endpoints d’extensions vérifient leurs permissions déclarées dans le module.

Toutes les routes CMS enregistrées disposent de contrats de paramètres, requêtes, réponses et erreurs. Les réponses HTML, CSS, binaires et les redirections sont distinguées du JSON ; les flux ne sont pas relus pour les valider. Les endpoints concrets des extensions actives sont ajoutés selon les droits de la session et leurs schémas déclarés. Cette documentation ne rend aucune nouvelle route compatible Bearer : seules les 25 routes explicitement autorisées l’acceptent.

StatutInterprétation
400Entrée invalide.
401Session absente ou invalide.
403Droits ou origine/CSRF refusés.
409Conflit de version, unicité ou référence.
421Hôte ou origine de transport refusé par la politique de domaine.
429Limitation de tentatives ; respecter Retry-After.
500Erreur interne à corréler par requestId.
503Service indisponible, maintenance ou transport HTTPS non établi.
Structure d’erreur
{ "error": { "code": "conflict", "message": "Message de l’opération.", "requestId": "identifiant" } }

Les erreurs localisables peuvent ajouter messageKey et params au code et au message de référence. Les clés doivent être connues du catalogue ; les paramètres sont bornés. Un client sans cette clé conserve le message fourni. Les erreurs internes inattendues restent génériques et n’exposent ni SQL, ni pile, ni secret. Certaines protections de domaine interviennent avant le routeur ; vérifiez toujours le statut et le type de réponse.

Filtrer et trier six collections

Les routes administratives content, terms, media, users, audit et jobs acceptent sort et order. sort désigne un seul champ de la liste autorisée ; order vaut asc ou desc. Avec sort seul, le sens est asc. Avec order seul, le sens s’applique au champ historique. Sans ces paramètres, l’ordre antérieur est conservé.

Route sous /api/v1FiltresChamps sortOrdre historique
/contentsearch, type, status, ids, termtitle, createdAt, updatedAt, publishedAtupdatedAt desc
/termssearch, type, taxonomy, idslabel, slug, taxonomylabel asc
/mediasearch, mimeTypefilename, createdAt, sizecreatedAt desc
/userssearch, status, roleIdname, email, status, createdAtcreatedAt desc
/auditaction, actorIdid, action, createdAtid desc
/jobsstatus, typecreatedAt, runAt, finishedAt, type, statuscreatedAt desc
Requêtes authentifiées selon les droits de chaque route
GET /api/v1/content?type=page&status=draft&sort=title&order=asc&page=2
GET /api/v1/media?mimeType=application%2Fpdf&sort=size&order=desc
GET /api/v1/jobs?status=failed&sort=finishedAt&order=desc

Les filtres se combinent avec un ET logique et s’appliquent avant le décompte et la pagination. search accepte jusqu’à 100 caractères ; la recherche ILIKE porte sur le titre du contenu, le libellé du terme, le nom du fichier média ou le nom et l’e-mail utilisateur. Les motifs % et _ gardent leur sens PostgreSQL. mimeType accepte image/webp ou application/pdf, les formats stockés ; le nouveau titre d’un média n’est pas un champ de recherche ou de tri.

page va de 1 à 100 000, avec 1 par défaut. La réponse conserve items, total, page et pageSize. La taille reste fixe : 25 éléments, ou 50 pour l’audit. La sélection par ids de content et terms conserve une taille de 100. Un paramètre inconnu ou répété, un sort vide ou non autorisé et un sens invalide sont refusés avec HTTP 400. Les noms SQL restent privés et les valeurs sont paramétrées.

L’identifiant unique départage les égalités dans l’ordre croissant, sauf le tri direct de l’audit par id qui suit le sens demandé. Les dates nulles publishedAt et finishedAt restent à la fin dans les deux sens. L’ordre est stable pour un jeu de données inchangé ; OFFSET et les lectures séparées du total et des éléments ne fournissent pas un snapshot entre pages. Des écritures concurrentes peuvent déplacer les résultats.

content et terms exigent content.read, media exige media.read ; leurs accès Bearer existants restent plafonnés aux droits actuels. users, audit et jobs restent réservés aux sessions avec users.manage, audit.read et tools.read. Aucun nouveau contrôle de tri n’est ajouté à l’administration par ce contrat API.

Lire et comparer les révisions

GET /api/v1/content/:id/revisions conserve ses pages de 25 instantanés. L’interface compare une version à celle qui la précède immédiatement, en chargeant au besoin une seule page adjacente. Si une écriture concurrente décale cette paire hors de la page, elle demande d’actualiser plutôt que de comparer deux versions non consécutives. La première révision correspond à la création.

Le helper SDK compareContentRevisions(previous, current) compare les informations, les champs par chemin et les blocs par identifiant stable. La vue signale ajouts, retraits, modifications et déplacements, sans diff mot à mot. Elle limite les champs à 100 différences, les blocs à 50 et leurs paramètres à 100 différences au total ; les extraits de texte sont limités à 300 caractères. Les instantanés conservés ne sont pas réécrits.

La lecture exige content.read et n’enregistre rien. Le rendu échappe les valeurs sans exécuter le HTML ni charger les URL des anciennes versions. La restauration reste une mutation confirmée et versionnée, avec content.update et les contrôles de publication existants ; elle crée un nouveau brouillon. Aucun endpoint de comparaison ni migration n’est ajouté.

API avant PostgreSQL

Quand aucune connexion de base n’est configurée, GET /api/v1/openapi est public et ne décrit que les quatre routes du serveur d’amorçage : bootstrap, install/prerequisites, install/database et openapi. Les contrôles du jeton d’installation, d’origine, de taille et de fréquence restent actifs. Après préparation de la base, le même serveur passe au routeur CMS et l’OpenAPI complet exige tools.read. Une base configurée mais inaccessible ne réactive pas ce serveur d’installation.

Upload et actions média

POST /api/v1/media attend les octets du fichier, x-filename encodé avec encodeURIComponent, Origin et CSRF. Limite : 10 Mo. Le client envoie application/octet-stream, pas multipart/form-data. Les formats acceptés sont JPEG, PNG, WebP, AVIF non animés et PDF ; SVG n’est pas accepté.

MediaEntry expose title, distinct de filename, alt et caption. La migration additive content:2 initialise les médias existants à une chaîne vide, sans modifier leurs versions ou fichiers ; les imports commencent aussi sans titre. Le champ accepte de 0 à 200 unités UTF-16 sans NUL. Les corps HTTP refusent également les substituts Unicode isolés.

PUT /api/v1/media/:id exige media.update et conserve alt et caption requis. title est facultatif pour les anciens clients : son omission conserve la valeur actuelle et une chaîne vide l’efface. Envoyez version pour obtenir le contrôle de concurrence HTTP 409 ; l’interface le fait systématiquement, tandis que l’omission historique de version reste acceptée sans cette garantie. La mutation réussie incrémente la version et journalise media.updated.

Les actions crop et variants sont versionnées. Le recadrage produit un nouveau média avec variantes WebP/AVIF et copie title, alt et caption sans modifier l’original. usage inspecte les dépendances avant remove ; la suppression logique est refusée si le média est référencé. Les PDF sont servis en téléchargement attachment avec nosniff.

Routes enregistrées

169 routes extraites du routeur de cette version. « Session » indique une route authentifiée dont les droits détaillés sont contrôlés dans le service.

GET/api/v1/integrations/options

Read available integration scopes and webhook capabilities

integrations.manage
GET/api/v1/integrations/tokens

List own API tokens without secret material

integrations.manage
POST/api/v1/integrations/tokens

Create a scoped API token, returned once

integrations.manage
POST/api/v1/integrations/tokens/:id/revoke

Revoke an API token owned by the current user

integrations.manage
GET/api/v1/integrations/webhooks

List webhook subscriptions without secrets

integrations.manage
POST/api/v1/integrations/webhooks

Create a signed webhook and return its secret once

integrations.manage
PUT/api/v1/integrations/webhooks/:id

Update or disable a versioned webhook; old queued deliveries are cancelled

integrations.manage
POST/api/v1/integrations/webhooks/:id/rotate

Rotate a webhook signing secret and cancel old queued deliveries

integrations.manage
POST/api/v1/integrations/webhooks/:id/test

Queue a signed test event to an enabled webhook

integrations.manage
GET/api/v1/integrations/webhooks/:id/deliveries

Read paginated webhook delivery history

integrations.manage
GET/api/v1/integrations/deliveries/:id/attempts

Read paginated attempt history without remote response bodies

integrations.manage
POST/api/v1/integrations/deliveries/:id/retry

Retry a failed delivery whose destination remains unchanged and enabled

integrations.manage
POST/api/v1/install/prerequisites

Verify installation prerequisites with the setup token

Accès public, contrôles de l’opération applicables
POST/api/v1/install/database

Verify the configured PostgreSQL connection

Accès public, contrôles de l’opération applicables
POST/api/v1/install/packs

List verified starter packs and their exact contents

Accès public, contrôles de l’opération applicables
POST/api/v1/install

Install this site and its optional pack once

Accès public, contrôles de l’opération applicables
GET/api/v1/appearance/drafts/:kind/:name

Read the author's private site draft

appearance.edit
PUT/api/v1/appearance/drafts/:kind/:name

Autosave private site work with draft and live version preconditions

appearance.edit
POST/api/v1/appearance/drafts/:kind/:name/discard

Discard a versioned private site draft

appearance.edit
GET/api/v1/appearance/draft-tokens/:kind/:name

Private stylesheet for a versioned site draft preview

appearance.edit
GET/api/v1/patterns/catalog

Named theme compositions available as copies or synchronized references

Session
GET/api/v1/themes

List installed themes

themes.manage
POST/api/v1/themes

Install a verified theme package

themes.manage
GET/api/v1/themes/updates

Read theme update and rollback history

themes.manage
POST/api/v1/themes/:id/update

Back up and atomically update a theme with compatibility checks

themes.manage
POST/api/v1/themes/updates/:id/rollback

Back up and restore the code of a previous theme version

themes.manage
POST/api/v1/themes/:id/activate

activate a theme

themes.manage
POST/api/v1/themes/:id/remove

remove a theme

themes.manage
GET/api/v1/appearance/documents

List templates, parts and patterns

appearance.edit
POST/api/v1/appearance/documents

Save a versioned site document

appearance.edit
POST/api/v1/appearance/reset

Reset a site document to its theme default

appearance.edit
GET/api/v1/appearance/settings

Read global styles and theme settings

appearance.edit
PUT/api/v1/appearance/settings

Save validated global styles

appearance.edit
GET/api/v1/patterns

Reusable content block compositions

content.read
GET/api/v1/appearance/revisions/:kind/:name

Read site document revision history

appearance.edit
POST/api/v1/appearance/restore

Restore a site document as a new revision

appearance.edit
GET/api/v1/editor-drafts/:key

Read the current author's private recovery draft

content.read
PUT/api/v1/editor-drafts/:key

Autosave private work with draft and content version preconditions

content.read
POST/api/v1/editor-drafts/:key/discard

Discard only the expected version of the current author's recovery draft

content.read
GET/api/v1/taxonomies

List content taxonomies

content.read
POST/api/v1/taxonomies

Create or update a versioned taxonomy

taxonomy.manage
GET/api/v1/terms

Search and select taxonomy terms

content.read
POST/api/v1/terms

Create a taxonomy term

taxonomy.manage
PUT/api/v1/terms/:id

Update a versioned taxonomy term

taxonomy.manage
POST/api/v1/terms/:id/remove

Remove an unused taxonomy term

taxonomy.manage
PUT/api/v1/backups/schedule

Configure a versioned backup schedule

backups.manage
POST/api/v1/backups/:id/copy-remote

copy-remote an encrypted backup

backups.manage
POST/api/v1/backups/:id/import-remote

import-remote an encrypted backup

backups.manage
GET/api/v1/jobs

Read background jobs with pagination

tools.read
GET/api/v1/jobs/:id/history

Read job attempt history

tools.read
POST/api/v1/jobs/:id/retry

Retry a failed background job

jobs.manage
POST/api/v1/jobs/run

Run due registered background jobs

jobs.manage
POST/api/v1/cache/clear

Clear the server cache

settings.manage
GET/api/v1/maintenance

Read backup readiness and operation history

backups.manage
GET/api/v1/backups

List verified encrypted backups

backups.manage
POST/api/v1/backups

Create and verify an encrypted backup

backups.manage
GET/api/v1/backups/:id/export

Download a verified encrypted backup archive

backups.manage
POST/api/v1/backups/:id/verify

Verify all encrypted backup files

backups.manage
POST/api/v1/backups/:id/restore-plan

Prepare a user-bound expiring restore plan

backups.manage
POST/api/v1/backups/restore

Restore a reviewed backup after saving the current state

backups.manage
GET/api/v1/backups/retention

Read local backup retention policy

backups.manage
PUT/api/v1/backups/retention

Configure local retention after an authenticated complete preview

backups.manage
POST/api/v1/backups/retention/preview

Enqueue a non-destructive bounded retention preview

backups.manage
POST/api/v1/backups/retention/run

Enqueue the currently enabled retention policy

backups.manage
GET/api/v1/backups/retention/runs

Read paginated retention runs

backups.manage
GET/api/v1/backups/retention/runs/:id

Read a retention run and paginated archive decisions

backups.manage
POST/api/v1/backups/retention/runs/:id/cancel

Stop retention at the next safe batch boundary

backups.manage
POST/api/v1/backups/retention/runs/:id/resume

Resume an interrupted local retention under an identical enabled policy

backups.manage
POST/api/v1/login/mfa

Complete second-factor verification and create a session

Accès public, contrôles de l’opération applicables
POST/api/v1/password-reset/request

Request account recovery without disclosing account existence

Accès public, contrôles de l’opération applicables
POST/api/v1/password-reset/complete

Consume a single-use password-reset token and revoke sessions

Accès public, contrôles de l’opération applicables
GET/api/v1/account/security

Read own second-factor configuration without secrets

Session
POST/api/v1/account/mfa/begin

begin own TOTP authentication

Session
POST/api/v1/account/mfa/confirm

confirm own TOTP authentication

Session
POST/api/v1/account/mfa/disable

disable own TOTP authentication

Session
POST/api/v1/account/mfa/regenerate

regenerate own TOTP authentication

Session
GET/api/v1/central/status

Read the optional local account connection status

registry.manage
GET/api/v1/central/key

Inspect the remote signing key before explicitly trusting its fingerprint

registry.manage
PUT/api/v1/central/key

Pin a verified registry signing key

registry.manage
POST/api/v1/central/start

start an optional account connection

registry.manage
POST/api/v1/central/poll

poll an optional account connection

registry.manage
POST/api/v1/central/cancel

cancel an optional account connection

registry.manage
POST/api/v1/central/disconnect

disconnect an optional account connection

registry.manage
GET/api/v1/central/catalog

Search the central catalogue with local installation status

registry.manage
GET/api/v1/central/entitlements

Read the connected account's acquisitions

registry.manage
POST/api/v1/central/install

Acquire and install a signed catalogue package without activating it

registry.manage
GET/api/v1/updates

Read core distribution compatibility and update history

updates.manage
POST/api/v1/updates/import

Verify and stage a signed runtime distribution

updates.manage
POST/api/v1/updates/apply

Back up and restart on a compatible signed core release

updates.manage
POST/api/v1/updates/rollback

Restore the pre-update core and database after explicit confirmation

updates.manage
POST/api/v1/content-types/:name/validate

Validate a versioned schema migration against all existing content

content.types
PUT/api/v1/content-types/:name

Atomically migrate a content schema and valid existing values

content.types
GET/api/v1/content-user-options

Select active user display names for structured content fields

content.read
POST/api/v1/content/:id/remove

Permanently delete unreferenced trashed content and its revisions

content.delete
GET/api/v1/media-options

Select live media with image filtering

media.read
GET/api/v1/media/:id/usage

Inspect media dependencies including revisions and private drafts

media.read
POST/api/v1/media/:id/crop

Create an immutable cropped image with responsive variants

media.create
POST/api/v1/media/:id/variants

Generate missing responsive image variants

media.update
POST/api/v1/media/:id/remove

Tombstone an unused media object before delayed physical purging

media.delete
GET/api/v1/extensions

Read permitted declarative extension contributions

Session
GET/api/v1/extensions/:plugin/pages/:page

Read a permitted extension admin page

Session
POST/api/v1/extensions/:plugin/blocks/:name/render

Validate extension block values and generate its native fallback

Session
GET/api/v1/public-extensions/:plugin/token

Issue a same-origin expiring public submission token

Accès public, contrôles de l’opération applicables
GET/api/v1/extensions/:plugin/endpoints/:name

Call a declared extension endpoint with fresh permissions

Session
GET/api/v1/public-extensions/:plugin/endpoints/:name

Call a rate-limited public extension endpoint

Accès public, contrôles de l’opération applicables
POST/api/v1/extensions/:plugin/endpoints/:name

Call a declared extension endpoint with fresh permissions

Session
POST/api/v1/public-extensions/:plugin/endpoints/:name

Call a rate-limited public extension endpoint

Accès public, contrôles de l’opération applicables
PUT/api/v1/extensions/:plugin/endpoints/:name

Call a declared extension endpoint with fresh permissions

Session
PUT/api/v1/public-extensions/:plugin/endpoints/:name

Call a rate-limited public extension endpoint

Accès public, contrôles de l’opération applicables
GET/api/v1/appearance/taxonomy-options

List taxonomies for template targeting

appearance.edit
GET/api/v1/menus/options

List logical menu slots for site editing

Session
GET/api/v1/menus/targets

Search visible content or taxonomy links with pagination

Session
GET/api/v1/menus

Read all editable named menus

menus.manage
POST/api/v1/menus

Create or save a menu with a version precondition

menus.manage
POST/api/v1/menus/:name/remove

Remove a secondary menu with a version precondition

menus.manage
GET/api/v1/menu

Read primary navigation (legacy); use menus for references

menus.manage
PUT/api/v1/menu

Save primary navigation with If-Match (legacy)

menus.manage
GET/api/v1/seo/domains

Read configured canonical domain and trusted proxy policy

settings.manage
GET/api/v1/seo/redirects

List editorial redirects

settings.manage
POST/api/v1/seo/redirects

Save a redirect with a version precondition

settings.manage
POST/api/v1/seo/redirects/:id/remove

Remove a versioned redirect

settings.manage
GET/api/v1/observability

Read bounded process metrics and explicit error reporting status

tools.read
GET/api/v1/languages

List verified interface languages

Accès public, contrôles de l’opération applicables
GET/api/v1/languages/catalog

Read an installed catalog with a French fallback

Accès public, contrôles de l’opération applicables
GET/api/v1/account/locale

Read the current user's interface preference

Session
POST/api/v1/account/locale

Set the current user's interface preference without changing site content

Session
POST/api/v1/language-packs

Install or update an Ed25519 signed declarative language pack

settings.manage
POST/api/v1/language-packs/rollback

Restore the previous compatible signed catalog

settings.manage
GET/api/v1/language-packs/history

Read paginated language pack changes

settings.manage
POST/api/v1/plugins

Install a verified extension package

plugins.manage
POST/api/v1/plugins/:id/update

Back up then transactionally update an extension

plugins.manage
GET/api/v1/plugin-updates

Read extension update and backup history

plugins.manage
GET/api/v1/plugins

List installed plugin packages

plugins.manage
POST/api/v1/plugins/:id/activate

activate a plugin

plugins.manage
POST/api/v1/plugins/:id/deactivate

deactivate a plugin

plugins.manage
POST/api/v1/plugins/:id/remove

remove a plugin

plugins.manage
GET/api/v1/plugins/:id/settings

Read plugin settings schema and values

plugins.manage
PUT/api/v1/plugins/:id/settings

Save validated plugin settings

plugins.manage
GET/api/v1/bootstrap

Installation status

Accès public, contrôles de l’opération applicables
POST/api/v1/login

Create a session

Accès public, contrôles de l’opération applicables
GET/api/v1/session

Current user and CSRF token

Session
POST/api/v1/logout

Revoke the current session

Session
GET/api/v1/content-types

List registered content types

content.read
POST/api/v1/account/password

Change own password and revoke all sessions

Session
PUT/api/v1/users/:id

Update a versioned user and assigned roles

users.manage
PUT/api/v1/roles/:id

Update a versioned custom role

roles.manage
POST/api/v1/roles/:id/remove

Remove an unassigned custom role

roles.manage
POST/api/v1/content-types

Register a content type and fields

content.types
GET/api/v1/content

Search content with pagination

content.read
POST/api/v1/content

Create content with its first revision

content.create
GET/api/v1/content/:id

Read a content entry

content.read
PUT/api/v1/content/:id

Save content with a version precondition

content.update
GET/api/v1/content/:id/revisions

Read paginated revision history

content.read
POST/api/v1/content/:id/restore/:revision

Restore a revision into a new draft

content.update
GET/api/v1/media

List image and PDF library

media.read
POST/api/v1/media

Validate a PDF or re-encode an image with responsive variants

media.create
PUT/api/v1/media/:id

Update image accessibility metadata

media.update
GET/api/v1/settings

Read site settings

settings.manage
GET/api/v1/settings/home-options

Choose a published home page

settings.manage
PUT/api/v1/settings

Save validated site settings

settings.manage
GET/api/v1/users

List users without credential material

users.manage
POST/api/v1/users

Create a local user

users.manage
POST/api/v1/users/:id/revoke

Revoke every session for a user

users.manage
GET/api/v1/roles

Read configurable roles

Session
POST/api/v1/roles

Create a role from granted permissions

roles.manage
GET/api/v1/permissions

Read registered permissions

roles.manage
GET/api/v1/health

Read measured site health

tools.read
GET/api/v1/audit

Read paginated administrative audit log

audit.read
GET/api/v1/openapi

Read the actual registered route contract

tools.read

Rechercher dans les guides

Saisissez un mot-clé.

↑↓ ParcourirEntrée OuvrirEsc Fermer