# L’API d’administration du CMS de Total.js : gérer un site depuis le code, sauvegarde et restauration

> L’API JSON derrière l’admin du CMS sur /admin/ : le format des appels, les actions de chaque plugin et leurs permissions, l’envoi de fichiers et les trois routes de sauvegarde, restauration et effacement, y compris ce que fait vraiment clear.

Framework: cms
Product: CMS (cms@8071e48)
Language: fr
Content-SHA256: 1b24891293574efd29db0dbcb9b82e4cc11132a54907c12e2a376bde46d232eb
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Tout ce que fait l’interface d’administration passe par un seul point d’entrée : `POST /admin/` avec le corps `{ "schema": "<name>", "data": { ... } }` (les routes API de Total.js, voir [routes API](/en/total5/api-routes/)). L’adresse vient de la ligne `$api : /admin/` du fichier `config`. Authentifiez-vous avec le cookie de session (`POST /admin/` avec `schema: "login"` et le `login` et le `password`), avec l’en-tête `x-token` ou via OpenPlatform ([installation et premier démarrage](/en/cms/install-and-first-start/)).

## Les actions

| Plugin | Appels (`schema`) | Permission |
|---|---|---|
| Account | `login`, `logout`, `admin_read`, `admin_save` (nom, login, mot de passe), `account` | la session |
| Pages | `pages_list`, `pages_read`, `pages_save`, `pages_clone`, `pages_remove`, `pages_links`, `pages_html` (lit le HTML), `pages_save_html` (`id`, `html`, jusqu’à 5 MB), `pages_copy` (`from`, `to`) | `pages` |
| Layouts | `layouts_list`, `layouts_read`, `layouts_save`, `layouts_clone`, `layouts_remove`, `layouts_html`, `layouts_save_html`, `layouts_import` | `layouts` |
| Widgets | `widgets_list`, `widgets_read`, `widgets_save`, `widgets_remove`, `widgets_detail` | `widgets` |
| Navigation | `nav_list`, `nav_read`, `nav_save`, `nav_remove`, `nav_editor` | `navigation` |
| Redirects | `redirects_list`, `redirects_read`, `redirects_save` (`url`, `target`, `permanent`), `redirects_remove` | `redirects` |
| Variables | `variables_read`, `variables_save` (`vars`) | `variables` |
| Posts | `posts`, `posts_read`, `posts_create`, `posts_update`, `posts_remove`, `posts_clear`, `posts_categories` | `posts` |
| Files | `files_list`, `files_rename`, `files_clear`, `files_remove`, et les envois ci-dessous | `files` |
| Settings | `settings_read`, `settings_save`, `settings_test` (essaie les réglages SMTP), `chatgpt` | `settings` |
| Dashboard | `dashboard_online`, `dashboard_referers`, `dashboard_browsers`, `dashboard_pages`, `dashboard_stats` | aucune |

La permission `admin` (et tout utilisateur avec le drapeau `sa`, y compris le *Bot* du jeton) a accès à tous les appels. Un appel sans permission reçoit une erreur, et `login` est le seul appel qui n’a pas besoin de session.

Créer une page et son contenu :

```json
{ "schema": "pages_save", "data": { "name": "About", "layoutid": "<layout id>", "url": "/about/", "title": "About us" } }
{ "schema": "pages_save_html", "data": { "id": "<page id>", "html": "<h1>About us</h1>" } }
```

`pages_save` répond `{ "success": true }` ; lisez l’id avec `pages_list`. Pour un layout, `layouts_save` répond l’id du layout dans `value`. Quand un champ manque dans une mise à jour, le champ est vidé (un `title` que vous n’envoyez pas est enregistré vide), envoyez donc l’enregistrement complet.

## Envoyer des fichiers

`POST /admin/upload/` accepte un envoi multipart (jusqu’à 10 Mo) et `POST /admin/upload/base64/` un corps JSON avec un data URI (png, jpeg ou gif). Les deux répondent une liste de `{ id, name, type, ext, size, url }`, où `url` vaut `/download/<id>.<ext>`.

## Sauvegarde, restauration et effacement

Trois routes de `controllers/api.js` agissent sur tout le site et exigent la permission `admin` :

| Route | Ce qu’elle fait |
|---|---|
| `GET /admin/backup/` | télécharge tout le stockage de fichiers (métadonnées, HTML des pages et des layouts, fichiers et articles) sous la forme d’un fichier texte nommé d’après le site et la date |
| `POST /admin/restore/` | envoie un tel fichier (jusqu’à 100 Mo) et le charge. |
| `GET /admin/clear/` | **supprime le contenu du site.** Il abandonne le stockage de fichiers et le recharge, de sorte que pages, layouts, widgets et le reste sont supprimés

Faites une sauvegarde avant d’essayer l’une d’elles, n’ouvrez jamais `/admin/clear/` dans un navigateur par curiosité et gardez le jeton privé : avec lui, un seul `GET` vide le site.
