# De beheer-API van het Total.js CMS: een site vanuit code beheren, back-up en herstel

> De JSON-API achter het CMS-beheer op /admin/: het aanroepformaat, de acties van elke plugin en hun rechten, bestanden uploaden en de drie routes voor back-up, herstel en wissen, inclusief wat clear echt doet.

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

Alles wat de beheerinterface doet, loopt via één endpoint: `POST /admin/` met de body `{ "schema": "<name>", "data": { ... } }` (de API-routes van Total.js, zie [API-routes](/en/total5/api-routes/)). Het adres komt uit de regel `$api : /admin/` van het bestand `config`. Authenticeer met de sessiecookie (`POST /admin/` met `schema: "login"` en de `login` en het `password`), met de header `x-token` of via OpenPlatform ([installatie en eerste start](/en/cms/install-and-first-start/)).

## De acties

| Plugin | Aanroepen (`schema`) | Recht |
|---|---|---|
| Account | `login`, `logout`, `admin_read`, `admin_save` (naam, login, wachtwoord), `account` | de sessie |
| Pages | `pages_list`, `pages_read`, `pages_save`, `pages_clone`, `pages_remove`, `pages_links`, `pages_html` (leest de HTML), `pages_save_html` (`id`, `html`, tot 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`, en de uploads hieronder | `files` |
| Settings | `settings_read`, `settings_save`, `settings_test` (test de SMTP-instellingen), `chatgpt` | `settings` |
| Dashboard | `dashboard_online`, `dashboard_referers`, `dashboard_browsers`, `dashboard_pages`, `dashboard_stats` | geen |

Het recht `admin` (en elke gebruiker met de vlag `sa`, inclusief de *Bot* van het token) mag ze allemaal gebruiken. Een aanroep zonder recht krijgt een fout, en `login` is de enige aanroep die geen sessie nodig heeft.

Maak een pagina en de inhoud ervan:

```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` antwoordt `{ "success": true }`; lees de id met `pages_list`. Bij een layout antwoordt `layouts_save` de id van de layout in `value`. Als een veld in een update ontbreekt, wordt het veld gewist (een `title` die je niet meestuurt, wordt leeg opgeslagen), dus stuur het hele record.

## Bestanden uploaden

`POST /admin/upload/` neemt een multipart-upload aan (tot 10 MB) en `POST /admin/upload/base64/` een JSON-body met een data-URI (png, jpeg of gif). Beide antwoorden met een lijst van `{ id, name, type, ext, size, url }`, waarbij `url` gelijk is aan `/download/<id>.<ext>`.

## Back-up, herstel en wissen

Drie routes van `controllers/api.js` werken op de hele site en vereisen het recht `admin`:

| Route | Wat ze doet |
|---|---|
| `GET /admin/backup/` | downloadt de hele bestandsopslag (metadata, HTML van pagina’s en layouts, bestanden en berichten) als één tekstbestand, genoemd naar de site en de datum |
| `POST /admin/restore/` | uploadt zo’n bestand (tot 100 MB) en laadt het. |
| `GET /admin/clear/` | **verwijdert de inhoud van de site.** Het gooit de bestandsopslag weg en laadt hem opnieuw, dus pagina’s, layouts, widgets en de rest worden verwijderd

Maak een back-up voordat je er een probeert, open `/admin/clear/` nooit uit nieuwsgierigheid in een browser en houd het token privé: daarmee maakt één enkele `GET` de site leeg.
