Skip to content

REST API ​

Eine JSON-API unter /api/renick/content/v1, gebaut auf denselben Services wie der Editor. Routenliste: REST-Referenz.

Standardmäßig deaktiviert

Jeder Request erhält 404 "API disabled", bis die API unter Einstellungen → Content → API-Tokens aktiviert ist.

API-Tokens ​

Senden Sie bei jedem Request ein Token, ausschließlich über HTTPS:

Authorization: Bearer <token>

Tokens werden auf derselben Einstellungsseite verwaltet (Berechtigung renick.content.manage_api_tokens). Ein neues Token (rc_…) wird einmalig angezeigt und nur als SHA-256-Hash gespeichert. Deaktivieren oder Löschen widerruft es sofort. Ein fehlendes, unbekanntes oder inaktives Token erhält 401.

TokenErlaubt
readnur GET/HEAD; PUT und POST erhalten 403
read_updatealle Endpoints, auch Schreiben, KI-Aufrufe, Bundle-Import und Wiederherstellen
Legacy-Bearer-Token (Feld über der Liste)alle Endpoints; leeren Sie es, sobald jeder Client ein persönliches Token hat

read_update-Tokens sind vollständig vertrauenswürdig

Sie können Richtext- und Code-Blöcke schreiben, deren HTML/JS ungefiltert bei jedem Besucher läuft. Behandeln Sie sie wie Editor-Zugriff im Backend und nutzen Sie read, wo immer möglich.

Host-Adressierung ​

Dokument-Endpoints erwarten host_type (Model-Klasse), host_id, field (Standard content) und für Tailor section (Blueprint-Handle, Pflicht, wenn die ID in mehreren Blueprints existiert).

host_type muss ein Tailor-EntryRecord sein, eine Klasse unter host_types in config/api.php (Standard: SharedContent) oder eine über das Event renick.content.api.resolveHostTypes hinzugefügte Klasse. Jede andere Klasse und ein fehlender Datensatz erhalten 404 "Host not found". Ein field, das kein Content-Feld ist, erhält 422.

Limits und Fehler ​

  • Bodys: Dokumente bis 2 MB, Bundles bis 50 MB (413).
  • Rate: 60 Requests pro Minute pro Token, KI-Aufrufe (translate, draft) zusätzlich 10 pro Minute (429, immer JSON).
  • Bundle-Importe werden vor dem Entpacken geprüft: 20 MB pro Datei, 200 MB insgesamt, Dateitypen der Media Library, sichere Pfade.
  • Andere Fehler, etwa ein ungültiges Dokument oder ein fehlgeschlagener KI-Aufruf, liefern HTTP 500.

Die Werte stehen in config/limits.php und config/bundle.php.

Endpoints ​

EndpointVerhalten
GET /documentdas Dokument und seine referenzierten Medienpfade
PUT /documentvalidiert document und speichert es als Version import
GET/POST /document/bundleZIP mit Dokument und Medien; der Import nimmt den rohen Body oder ein Dateifeld bundle, overwrite_media=1 ersetzt Dateien
POST /translatetarget_language, optional source_language; ersetzt das gespeicherte Dokument als Version ai_translate
POST /draftnur brief und optional template_id; liefert ein Dokument, ohne zu speichern
POST /duplicategibt das gesendete document mit neuen Block-IDs zurück
GET /templatesbis zu 100 Vorlagen
GET /versions, POST /restoredie neuesten 100 Versionen; stellt version_id als neue Version restore wieder her
bash
curl -G -H "Authorization: Bearer $TOKEN" \
  --data-urlencode 'host_type=Tailor\Models\EntryRecord' \
  --data-urlencode 'section=Content\Article' -d host_id=1 \
  https://example.com/api/renick/content/v1/document
# → {"document": {...}, "media": ["/photos/hero.jpg"]}

curl -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"host_type":"Tailor\\Models\\EntryRecord","section":"Content\\Article","host_id":1,
       "document":{"blocks":[{"type":"heading","data":{"text":"Hello","level":"h2"}}]}}' \
  https://example.com/api/renick/content/v1/document
# → {"document": {...normalized...}}