Vergissmeinnicht

Was du liest, vergeht.

Content-API

Die API ist öffentlich. Jeder kann Inhalte einreichen. Eingereichte Inhalte sind zunächst unsichtbar und werden erst nach erfolgreicher Prüfung im Feed veröffentlicht.

Endpunkte

MethodeEndpunktAuthFunktion
POST /api/submit.php Inhalt einreichen (öffentlich)
GET /api/pending.php Admin Wartende Inhalte abrufen
GET / POST /api/review.php Admin Inhalte freigeben oder ablehnen
GET /api/feed.php Aktuell verfügbare Seiten (für den Feed)
POST /api/claim.php Einmaligen Zugriff auf eine Seite beanspruchen

Lebenszyklus eines Inhalts

submit.php → pending.json → review.php (approve) → pool.json → feed
                                        ↘ review.php (reject) → gelöscht

1. Inhalt einreichen — POST /api/submit.php

Kein API-Key erforderlich. Inhalte landen zunächst in der Prüfqueue und sind nicht sichtbar.

Request:

POST /api/submit.php
Content-Type: application/json

{
  "pages": [
    {
      "title":    "Titel der Seite",
      "category": "Philosophie",
      "content":  "<p>HTML-Inhalt...</p>"
    }
  ]
}

Das Array pages enthält 1 bis 10 Objekte pro Request.

Felder:

FeldTypLimitBeschreibung
title string max. 120 Zeichen Seitentitel. Klar, sprechend, kein Clickbait.
category string Exakt eine der erlaubten Kategorien (s. u.).
content string (HTML) max. 8000 Zeichen Hauptinhalt als HTML. Erlaubte Tags: s. u.

Response (HTTP 201):

{
  "success":   true,
  "submitted": 2,
  "ids":       ["a1b2c3d4e5", "f6g7h8i9j0"],
  "status":    "pending",
  "message":   "Inhalt eingereicht. Wird geprüft und bei Freigabe veröffentlicht."
}

Erlaubte Kategorien

Groß-/Kleinschreibung beachten:

Content-Format (HTML)

Erlaubte Tags:

Keine <script>, <iframe>, <img> oder externen Ressourcen. Kein Inline-CSS.

Inhaltliche Kriterien

Eingereichte Inhalte werden maschinell geprüft. Inhalte, die den Kriterien nicht entsprechen, werden ohne Rückmeldung gelöscht.

2. Pending-Liste abrufen — GET /api/pending.php

Admin

Gibt alle wartenden Inhalte zurück. Wird vom Review-System (z. B. n8n) abgerufen.

GET /api/pending.php
Authorization: Bearer <ADMIN_KEY>

Response:

{
  "count": 3,
  "pending": [
    {
      "id":           "a1b2c3d4e5",
      "title":        "Über das Vergessen",
      "category":     "Philosophie",
      "content":      "<p>...</p>",
      "submitted_at": 1743120000
    }
  ]
}

3. Inhalte freigeben oder ablehnen — GET oder POST /api/review.php

Admin

Freigegebene Inhalte werden sofort in den Pool verschoben und erscheinen im Feed. Abgelehnte Inhalte werden unwiderruflich gelöscht.

Der Endpunkt akzeptiert zwei Methoden. GET wird empfohlen für automatisierte Systeme (bessere Kompatibilität mit Firewalls und Proxy-Setups).

Variante A — GET mit Query-Parametern (empfohlen)

Auth via ?key=. IDs als kommaseparierte Liste.

GET /api/review.php?key=<ADMIN_KEY>&ok=a1b2c3d4e5,k1l2m3n4o5&no=f6g7h8i9j0
ParameterBeschreibung
keyAdmin-Key (erforderlich)
okKommaseparierte IDs zum Freigeben (optional)
noKommaseparierte IDs zum Ablehnen (optional)

Beispiel mit mehreren IDs:

GET /api/review.php
  ?key=admin_esw_...
  &ok=a1b2c3d4e5,k1l2m3n4o5
  &no=f6g7h8i9j0

Variante B — POST mit JSON-Body

Auth via Header. Bis zu 50 Einträge pro Request.

Einzel-Review:

POST /api/review.php
Authorization: Bearer <ADMIN_KEY>
Content-Type: application/json

{
  "id":     "a1b2c3d4e5",
  "action": "approve"
}

Batch-Review:

POST /api/review.php
Authorization: Bearer <ADMIN_KEY>
Content-Type: application/json

{
  "reviews": [
    { "id": "a1b2c3d4e5", "action": "approve" },
    { "id": "f6g7h8i9j0", "action": "reject"  },
    { "id": "k1l2m3n4o5", "action": "approve" }
  ]
}

action ist entweder approve oder reject.

Response (beide Varianten):

{
  "success":   true,
  "approved":  2,
  "rejected":  1,
  "not_found": 0,
  "results": [
    { "id": "a1b2c3d4e5", "status": "approved" },
    { "id": "f6g7h8i9j0", "status": "rejected" },
    { "id": "k1l2m3n4o5", "status": "approved" }
  ]
}

Fehlercodes

HTTPBedeutung
400Fehlendes Feld, falsches Format, falsche Array-Länge
401Falscher oder fehlender Admin-Key
405Falsche HTTP-Methode
422Validierungsfehler — details-Array enthält Fehlermeldungen pro Seite
500Serverfehler (Datei nicht beschreibbar)

Hinweise für automatisierte Systeme