Skip to main content

REST: WordPress Push-Content (/api/wordpress/push-content)

Diese Seite beschreibt den eingehenden REST-Endpunkt des CockpitOS-Dashboards, über den eine registrierte WordPress-Website (z. B. mit dem CockpitOS-Plugin) Shops, Events, News, Angebote, Services und statische Seiten an die zentrale Datenbank senden kann.

Implementierung im Monorepo: apps/dashboard/src/app/api/wordpress/push-content/route.ts

Hinweis zur Basis-URL

Ersetzen Sie {DASHBOARD_ORIGIN} durch die öffentliche URL Ihrer Dashboard-Instanz (z. B. https://dashboard.example.com). Lokal oft http://localhost:3000.

Überblick

AspektDetails
MethodePOST
Pfad/api/wordpress/push-content
AuthentifizierungHTTP-Header Authorization: Bearer <apiKey>
API-KeyDer Website-API-Key der WordPress-Instanz, wie er in CockpitOS unter WordPress-Verwaltung hinterlegt ist (WordPressWebsite.apiKey in der Datenbank)
Content-Typeapplication/json
CORSAccess-Control-Allow-Origin: * (Preflight OPTIONS wird unterstützt)

Ohne gültigen Key antwortet die API mit 401; wenn kein passender Website-Eintrag existiert, mit 404.

Request-Body

Der Body ist ein JSON-Objekt. Alle Top-Level-Felder sind optional. Sie können beliebige Kombinationen senden (nur News, nur Shops, usw.).

{
"shops": [],
"events": [],
"news": [],
"offers": [],
"services": [],
"pages": []
}

shops (Array)

Pro Eintrag werden folgende Felder ausgewertet (weitere Keys werden ignoriert):

FeldTypBeschreibung
idstring (optional)Wenn gesetzt und im gleichen Center vorhanden → Update, sonst Create
namestringPflicht (leer → Eintrag wird übersprungen)
categorystringStandard: "Sonstige"
description, floor, location, logo, phone, email, website, openingHoursstring oder nullOptional
statusstringStandard: "Aktiv"

events (Array)

FeldTypBeschreibung
idstring (optional)Update, wenn ID im Center existiert
titlestringPflicht
startDate, endDatestring (ISO) / DatumOptional; Default: startDate = jetzt, endDate = eine Stunde später
description, location, imagestring oder nullOptional
statusstringStandard: "Aktiv"

Intern wird source auf wordpress gesetzt.

news (Array)

FeldTypBeschreibung
idstring (optional)Update, wenn ID im Center existiert
titlestringPflicht
excerpt, summary, content, author, category, imagestring oder nullOptional
publishDatestring (ISO) / DatumOptional; Standard: aktuelles Datum
statusstringStandard: "Veröffentlicht"

Intern wird source auf wordpress gesetzt.

offers (Array)

FeldTypBeschreibung
idstring (optional)Update, wenn ID im Center existiert
titlestringPflicht
startDate, endDatestring (ISO) / DatumOptional; Default: endDate = 7 Tage nach startDate
description, discount, imagestring oder nullOptional
statusstringStandard: "Aktiv"

Intern wird source auf wordpress gesetzt.

services (Array)

FeldTypBeschreibung
idstring (optional)Update, wenn ID im Center existiert
namestringPflicht
category, description, floor, location, phone, email, website, openingHoursstring oder nullOptional
statusstringStandard: "Aktiv"

pages (Array)

Statische WordPress-Seiten (z. B. Anfahrt, Hausordnung) für Kontext (z. B. Chatbot). Sie werden nicht als normale CMS-Seiten-Entitäten wie im Website-Tab gespiegelt, sondern in WordPressWebsite.staticPages gespeichert.

FeldTypBeschreibung
slugstring
titlestring
contentstringWird auf 10.000 Zeichen gekürzt

Zusatzlogik: Enthält eine Seite „Öffnungszeiten“ (Erkennung per Titel/Slug), und ist am Center das Feld openingHours noch leer, wird ein gekürzter Text (HTML-Tags entfernt, max. 500 Zeichen) ins Center übernommen.

Response

Erfolg (HTTP 200)

{
"success": true,
"data": {
"summary": {
"shops": 0,
"events": 0,
"news": 0,
"offers": 0,
"services": 0
},
"errors": ["optional: Fehlermeldungen pro Datensatz"]
},
"message": "Push-Content verarbeitet"
}

errors fehlt, wenn keine Einzelfehler aufgetreten sind. Bei teilweisem Fehlschlag können einzelne Datensätze fehlschlagen, andere werden trotzdem verarbeitet.

Die zugehörige WordPress-Website erhält ein aktualisiertes lastSync; bei Fehlern kann lastError (gekürzt) gesetzt werden.

Fehler

HTTPBedeutung
401Kein Authorization: Bearer-Header
404Keine WordPressWebsite mit diesem API-Key
400Ungültiges JSON
500Unerwarteter Serverfehler

Beispiel: curl

curl -sS -X POST "${DASHBOARD_ORIGIN}/api/wordpress/push-content" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_WORDPRESS_WEBSITE_API_KEY" \
-d '{
"news": [
{
"title": "Beispielmeldung",
"excerpt": "Kurztext",
"content": "<p>HTML-Inhalt</p>",
"status": "Veröffentlicht"
}
]
}'

Verwandte Endpunkte

  • Website registrieren / anbinden: POST /api/wordpress/websites (Dashboard-Session oder Abgleich API-Key im Header mit Body – siehe apps/dashboard/src/app/api/wordpress/websites/route.ts).
  • Einbettungs-Konfiguration (öffentlich mit Website-Key): GET /api/wordpress/embed-config – siehe Kommentar in apps/dashboard/src/app/api/wordpress/embed-config/route.ts.
  • Ausgehende Benachrichtigungen an externe Systeme (nicht zum Schreiben ins Cockpit): Webhooks – siehe Integration & Webhooks.

Weitere API-Dokumentation

Eine vollständige OpenAPI-Referenz aller Dashboard-Endpunkte ist weiterhin in Planung; dieser Endpunkt ist derzeit die zentral dokumentierte Schnittstelle für Inhalte von WordPress ins Cockpit.

Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /en/developer-guide/api-wordpress-push-content