# Die Admin-API des Total.js CMS: eine Website per Code verwalten, Backup und Wiederherstellung

> Die JSON-API hinter dem CMS-Admin unter /admin/: das Aufrufformat, die Aktionen jedes Plugins und ihre Berechtigungen, das Hochladen von Dateien und die drei Routen für Backup, Wiederherstellung und Löschen, einschließlich dessen, was clear wirklich tut.

Framework: cms
Product: CMS (cms@8071e48)
Language: de
Content-SHA256: 3b902401bc87a64fb5d5b543687b51f405c27e338e04bfbb974eb1f105221fb2
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Alles, was die Admin-Oberfläche tut, läuft über einen einzigen Endpunkt: `POST /admin/` mit dem Body `{ "schema": "<name>", "data": { ... } }` (die API-Routen von Total.js, siehe [API-Routen](/en/total5/api-routes/)). Die Adresse stammt aus der Zeile `$api : /admin/` der Datei `config`. Authentifizieren Sie sich mit dem Sitzungs-Cookie (`POST /admin/` mit `schema: "login"` und `login` und `password`), mit dem Header `x-token` oder über OpenPlatform ([Installation und erster Start](/en/cms/install-and-first-start/)).

## Die Aktionen

| Plugin | Aufrufe (`schema`) | Berechtigung |
|---|---|---|
| Account | `login`, `logout`, `admin_read`, `admin_save` (Name, Login, Passwort), `account` | die Sitzung |
| Pages | `pages_list`, `pages_read`, `pages_save`, `pages_clone`, `pages_remove`, `pages_links`, `pages_html` (liest das HTML), `pages_save_html` (`id`, `html`, bis zu 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`, und die Uploads unten | `files` |
| Settings | `settings_read`, `settings_save`, `settings_test` (prüft die SMTP-Einstellungen), `chatgpt` | `settings` |
| Dashboard | `dashboard_online`, `dashboard_referers`, `dashboard_browsers`, `dashboard_pages`, `dashboard_stats` | keine |

Die Berechtigung `admin` (und jeder Benutzer mit dem Flag `sa`, einschließlich des *Bot* des Tokens) darf alle Aufrufe ausführen. Ein Aufruf ohne Berechtigung wird mit einem Fehler beantwortet, und `login` ist der einzige Aufruf, der keine Sitzung braucht.

Eine Seite und ihren Inhalt anlegen:

```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` antwortet mit `{ "success": true }`; die ID lesen Sie mit `pages_list`. Bei einem Layout antwortet `layouts_save` mit der ID des Layouts in `value`. Fehlt bei einer Aktualisierung ein Feld, wird das Feld geleert (ein `title`, den Sie nicht senden, wird leer gespeichert), senden Sie also den ganzen Datensatz.

## Dateien hochladen

`POST /admin/upload/` nimmt einen Multipart-Upload an (bis 10 MB) und `POST /admin/upload/base64/` einen JSON-Body mit einer Data-URI (png, jpeg oder gif). Beide antworten mit einer Liste von `{ id, name, type, ext, size, url }`, wobei `url` gleich `/download/<id>.<ext>` ist.

## Backup, Wiederherstellung und Löschen

Drei Routen aus `controllers/api.js` wirken auf die ganze Website und brauchen die Berechtigung `admin`:

| Route | Was sie tut |
|---|---|
| `GET /admin/backup/` | lädt den gesamten Dateispeicher (Metadaten, HTML von Seiten und Layouts, Dateien und Beiträge) als eine Textdatei herunter, benannt nach Website und Datum |
| `POST /admin/restore/` | lädt eine solche Datei hoch (bis 100 MB) und lädt sie ein. |
| `GET /admin/clear/` | **löscht den Inhalt der Website.** Es verwirft den Dateispeicher und lädt ihn neu, sodass Seiten, Layouts, Widgets und der Rest entfernt werden

Machen Sie ein Backup, bevor Sie eine davon ausprobieren, öffnen Sie `/admin/clear/` nie aus Neugier im Browser und halten Sie den Token geheim: Mit ihm leert ein einziges `GET` die Website.
