REST-API-Referenz
EmDash stellt eine REST-API unter /_emdash/api/ für Inhaltsverwaltung, Medien-Uploads und Schema-Operationen bereit.
Authentifizierung
Abschnitt betitelt „Authentifizierung“API-Anfragen erfordern eine Authentifizierung über einen Bearer-Token:
Authorization: Bearer <token>Generieren Sie Token über die Admin-Oberfläche oder programmatisch.
Antwortformat
Abschnitt betitelt „Antwortformat“Alle Antworten folgen einem einheitlichen Format:
// Erfolg{ "success": true, "data": { ... }}
// Fehler{ "success": false, "error": { "code": "ERROR_CODE", "message": "Menschenlesbare Nachricht", "details": { ... } }}Inhalts-Endpunkte
Abschnitt betitelt „Inhalts-Endpunkte“Inhalte auflisten
Abschnitt betitelt „Inhalte auflisten“GET /_emdash/api/content/:collectionParameter
Abschnitt betitelt „Parameter“| Parameter | Typ | Beschreibung |
|---|---|---|
collection | string | Collection-Slug (Pfad) |
cursor | string | Paginierungs-Cursor (Query) |
limit | number | Elemente pro Seite (Query, Standard: 50) |
status | string | Nach Status filtern (Query) |
orderBy | string | Feld zum Sortieren (Query) |
order | string | Sortierrichtung: asc oder desc (Query) |
Antwort
Abschnitt betitelt „Antwort“{ "success": true, "data": { "items": [ { "id": "01HXK5MZSN...", "type": "posts", "slug": "hello-world", "data": { "title": "Hallo Welt", ... }, "status": "published", "createdAt": "2025-01-24T12:00:00Z", "updatedAt": "2025-01-24T12:00:00Z" } ], "nextCursor": "eyJpZCI6..." }}Inhalt abrufen
Abschnitt betitelt „Inhalt abrufen“GET /_emdash/api/content/:collection/:idAntwort
Abschnitt betitelt „Antwort“{ "success": true, "data": { "item": { "id": "01HXK5MZSN...", "type": "posts", "slug": "hello-world", "data": { "title": "Hallo Welt", ... }, "status": "published", "createdAt": "2025-01-24T12:00:00Z", "updatedAt": "2025-01-24T12:00:00Z" } }}Inhalt erstellen
Abschnitt betitelt „Inhalt erstellen“POST /_emdash/api/content/:collectionContent-Type: application/jsonAnfrage-Body
Abschnitt betitelt „Anfrage-Body“{ "data": { "title": "Neuer Beitrag", "content": [...] }, "slug": "new-post", "status": "draft"}Antwort
Abschnitt betitelt „Antwort“{ "success": true, "data": { "item": { ... } }}Inhalt aktualisieren
Abschnitt betitelt „Inhalt aktualisieren“PUT /_emdash/api/content/:collection/:idContent-Type: application/jsonAnfrage-Body
Abschnitt betitelt „Anfrage-Body“{ "data": { "title": "Aktualisierter Titel" }, "status": "published"}Inhalt löschen
Abschnitt betitelt „Inhalt löschen“DELETE /_emdash/api/content/:collection/:idAntwort
Abschnitt betitelt „Antwort“{ "success": true, "data": { "success": true }}Medien-Endpunkte
Abschnitt betitelt „Medien-Endpunkte“Medien auflisten
Abschnitt betitelt „Medien auflisten“GET /_emdash/api/mediaParameter
Abschnitt betitelt „Parameter“| Parameter | Typ | Beschreibung |
|---|---|---|
cursor | string | Paginierungs-Cursor |
limit | number | Elemente pro Seite (Standard: 20) |
mimeType | string | Nach MIME-Typ-Präfix filtern |
Antwort
Abschnitt betitelt „Antwort“{ "success": true, "data": { "items": [ { "id": "01HXK5MZSN...", "filename": "photo.jpg", "mimeType": "image/jpeg", "size": 102400, "width": 1920, "height": 1080, "url": "https://cdn.example.com/photo.jpg", "createdAt": "2025-01-24T12:00:00Z" } ], "nextCursor": "eyJpZCI6..." }}Medium abrufen
Abschnitt betitelt „Medium abrufen“GET /_emdash/api/media/:idMedium erstellen
Abschnitt betitelt „Medium erstellen“POST /_emdash/api/mediaContent-Type: application/jsonAnfrage-Body
Abschnitt betitelt „Anfrage-Body“{ "filename": "photo.jpg", "mimeType": "image/jpeg", "size": 102400, "width": 1920, "height": 1080, "storageKey": "uploads/photo.jpg"}Medium aktualisieren
Abschnitt betitelt „Medium aktualisieren“PUT /_emdash/api/media/:idContent-Type: application/jsonAnfrage-Body
Abschnitt betitelt „Anfrage-Body“{ "alt": "Bildbeschreibung", "caption": "Bildunterschrift"}Medium löschen
Abschnitt betitelt „Medium löschen“DELETE /_emdash/api/media/:idMediendatei abrufen
Abschnitt betitelt „Mediendatei abrufen“GET /_emdash/api/media/file/:keyLiefert den eigentlichen Dateiinhalt. Nur für lokalen Speicher.
Revisions-Endpunkte
Abschnitt betitelt „Revisions-Endpunkte“Revisionen auflisten
Abschnitt betitelt „Revisionen auflisten“GET /_emdash/api/content/:collection/:entryId/revisionsParameter
Abschnitt betitelt „Parameter“| Parameter | Typ | Beschreibung |
|---|---|---|
limit | number | Maximale zurückzugebende Revisionen (Standard: 50) |
Antwort
Abschnitt betitelt „Antwort“{ "success": true, "data": { "items": [ { "id": "01HXK5MZSN...", "collection": "posts", "entryId": "01HXK5MZSN...", "data": { ... }, "createdAt": "2025-01-24T12:00:00Z" } ], "total": 5 }}Revision abrufen
Abschnitt betitelt „Revision abrufen“GET /_emdash/api/revisions/:revisionIdRevision wiederherstellen
Abschnitt betitelt „Revision wiederherstellen“POST /_emdash/api/revisions/:revisionId/restoreStellt den Inhalt auf den Zustand dieser Revision wieder her und erstellt eine neue Revision.
Schema-Endpunkte
Abschnitt betitelt „Schema-Endpunkte“Collections auflisten
Abschnitt betitelt „Collections auflisten“GET /_emdash/api/schema/collectionsAntwort
Abschnitt betitelt „Antwort“{ "success": true, "data": { "items": [ { "id": "01HXK5MZSN...", "slug": "posts", "label": "Beiträge", "labelSingular": "Beitrag", "supports": ["drafts", "revisions", "preview"] } ] }}Collection abrufen
Abschnitt betitelt „Collection abrufen“GET /_emdash/api/schema/collections/:slugParameter
Abschnitt betitelt „Parameter“| Parameter | Typ | Beschreibung |
|---|---|---|
includeFields | boolean | Felddefinitionen einbeziehen (Query) |
Collection erstellen
Abschnitt betitelt „Collection erstellen“POST /_emdash/api/schema/collectionsContent-Type: application/jsonAnfrage-Body
Abschnitt betitelt „Anfrage-Body“{ "slug": "products", "label": "Products", "labelSingular": "Product", "description": "Product catalog", "supports": ["drafts", "revisions"]}Collection aktualisieren
Abschnitt betitelt „Collection aktualisieren“PATCH /_emdash/api/schema/collections/:slugContent-Type: application/jsonCollection löschen
Abschnitt betitelt „Collection löschen“DELETE /_emdash/api/schema/collections/:slugParameter
Abschnitt betitelt „Parameter“| Parameter | Typ | Beschreibung |
|---|---|---|
force | boolean | Löschen auch wenn Collection Inhalte hat (Query) |
Felder auflisten
Abschnitt betitelt „Felder auflisten“GET /_emdash/api/schema/collections/:slug/fieldsFeld erstellen
Abschnitt betitelt „Feld erstellen“POST /_emdash/api/schema/collections/:slug/fieldsContent-Type: application/jsonAnfrage-Body
Abschnitt betitelt „Anfrage-Body“{ "slug": "price", "label": "Price", "type": "number", "required": true, "validation": { "min": 0 }}Feld aktualisieren
Abschnitt betitelt „Feld aktualisieren“PATCH /_emdash/api/schema/collections/:collectionSlug/fields/:fieldSlugContent-Type: application/jsonFeld löschen
Abschnitt betitelt „Feld löschen“DELETE /_emdash/api/schema/collections/:collectionSlug/fields/:fieldSlugFelder neu anordnen
Abschnitt betitelt „Felder neu anordnen“POST /_emdash/api/schema/collections/:slug/fields/reorderContent-Type: application/jsonAnfrage-Body
Abschnitt betitelt „Anfrage-Body“{ "fieldSlugs": ["title", "content", "author", "publishedAt"]}Schema-Export
Abschnitt betitelt „Schema-Export“Schema exportieren (JSON)
Abschnitt betitelt „Schema exportieren (JSON)“GET /_emdash/api/schemaAccept: application/jsonSchema exportieren (TypeScript)
Abschnitt betitelt „Schema exportieren (TypeScript)“GET /_emdash/api/schema?format=typescriptAccept: text/typescriptGibt TypeScript-Interfaces für alle Collections zurück.
Plugin-Endpunkte
Abschnitt betitelt „Plugin-Endpunkte“Plugins auflisten
Abschnitt betitelt „Plugins auflisten“GET /_emdash/api/pluginsPlugin abrufen
Abschnitt betitelt „Plugin abrufen“GET /_emdash/api/plugins/:pluginIdPlugin aktivieren
Abschnitt betitelt „Plugin aktivieren“POST /_emdash/api/plugins/:pluginId/enablePlugin deaktivieren
Abschnitt betitelt „Plugin deaktivieren“POST /_emdash/api/plugins/:pluginId/disableFehlercodes
Abschnitt betitelt „Fehlercodes“| Code | HTTP-Status | Beschreibung |
|---|---|---|
NOT_FOUND | 404 | Ressource nicht gefunden |
VALIDATION_ERROR | 400 | Ungültige Eingabedaten |
UNAUTHORIZED | 401 | Fehlender oder ungültiger Token |
FORBIDDEN | 403 | Unzureichende Berechtigungen |
CONTENT_LIST_ERROR | 500 | Inhaltsauflistung fehlgeschlagen |
CONTENT_CREATE_ERROR | 500 | Inhaltserstellung fehlgeschlagen |
CONTENT_UPDATE_ERROR | 500 | Inhaltsaktualisierung fehlgeschlagen |
CONTENT_DELETE_ERROR | 500 | Inhaltslöschung fehlgeschlagen |
MEDIA_LIST_ERROR | 500 | Medienauflistung fehlgeschlagen |
MEDIA_CREATE_ERROR | 500 | Medienerstellung fehlgeschlagen |
SCHEMA_ERROR | 400 | Schema-Operation fehlgeschlagen |
DUPLICATE_SLUG | 409 | Slug existiert bereits |
RESERVED_SLUG | 400 | Slug ist reserviert |
Such-Endpunkte
Abschnitt betitelt „Such-Endpunkte“Globale Suche
Abschnitt betitelt „Globale Suche“GET /_emdash/api/search?q=hello+worldParameter
Abschnitt betitelt „Parameter“| Parameter | Typ | Beschreibung |
|---|---|---|
q | string | Suchanfrage (erforderlich) |
collections | string | Kommagetrennte Collection-Slugs |
status | string | Nach Status filtern (Standard: published) |
limit | number | Maximale Ergebnisse (Standard: 20) |
cursor | string | Paginierungs-Cursor |
Antwort
Abschnitt betitelt „Antwort“{ "results": [ { "collection": "posts", "id": "01HXK5MZSN...", "slug": "hello-world", "title": "Hallo Welt", "snippet": "...this is a <mark>hello</mark> <mark>world</mark> example...", "score": 0.95 } ], "nextCursor": "eyJvZmZzZXQiOjIwfQ"}Suchvorschläge
Abschnitt betitelt „Suchvorschläge“GET /_emdash/api/search/suggest?q=hel&limit=5Gibt präfix-gematchte Titel für die Autovervollständigung zurück.
Suchindex neu aufbauen
Abschnitt betitelt „Suchindex neu aufbauen“POST /_emdash/api/search/rebuildBaut den FTS-Index für alle oder bestimmte Collections neu auf.
Suchstatistiken
Abschnitt betitelt „Suchstatistiken“GET /_emdash/api/search/statsGibt die Anzahl der indizierten Dokumente pro Collection zurück.
Abschnitts-Endpunkte
Abschnitt betitelt „Abschnitts-Endpunkte“Abschnitte auflisten
Abschnitt betitelt „Abschnitte auflisten“GET /_emdash/api/sectionsGET /_emdash/api/sections?source=themeGET /_emdash/api/sections?search=newsletterAbschnitt abrufen
Abschnitt betitelt „Abschnitt abrufen“GET /_emdash/api/sections/:slugAbschnitt erstellen
Abschnitt betitelt „Abschnitt erstellen“POST /_emdash/api/sectionsContent-Type: application/json
{ "slug": "my-section", "title": "My Section", "keywords": ["keyword1"], "content": [...]}Abschnitt aktualisieren
Abschnitt betitelt „Abschnitt aktualisieren“PUT /_emdash/api/sections/:slugAbschnitt löschen
Abschnitt betitelt „Abschnitt löschen“DELETE /_emdash/api/sections/:slugEinstellungs-Endpunkte
Abschnitt betitelt „Einstellungs-Endpunkte“Alle Einstellungen abrufen
Abschnitt betitelt „Alle Einstellungen abrufen“GET /_emdash/api/settingsEinstellungen aktualisieren
Abschnitt betitelt „Einstellungen aktualisieren“POST /_emdash/api/settingsContent-Type: application/json
{ "siteTitle": "Meine Website", "tagline": "Eine grossartige Website", "postsPerPage": 10}Menü-Endpunkte
Abschnitt betitelt „Menü-Endpunkte“Menüs auflisten
Abschnitt betitelt „Menüs auflisten“GET /_emdash/api/menusMenü abrufen
Abschnitt betitelt „Menü abrufen“GET /_emdash/api/menus/:nameMenü erstellen
Abschnitt betitelt „Menü erstellen“POST /_emdash/api/menusContent-Type: application/json
{ "name": "footer", "label": "Footer Navigation"}Menü aktualisieren
Abschnitt betitelt „Menü aktualisieren“PUT /_emdash/api/menus/:nameMenü löschen
Abschnitt betitelt „Menü löschen“DELETE /_emdash/api/menus/:nameMenüpunkt hinzufügen
Abschnitt betitelt „Menüpunkt hinzufügen“POST /_emdash/api/menus/:name/itemsContent-Type: application/json
{ "type": "page", "referenceCollection": "pages", "referenceId": "page_about", "label": "About Us"}Menüpunkte neu anordnen
Abschnitt betitelt „Menüpunkte neu anordnen“POST /_emdash/api/menus/:name/reorderContent-Type: application/json
{ "items": [ { "id": "item_1", "parentId": null, "sortOrder": 0 }, { "id": "item_2", "parentId": null, "sortOrder": 1 }, { "id": "item_3", "parentId": "item_2", "sortOrder": 0 } ]}Taxonomie-Endpunkte
Abschnitt betitelt „Taxonomie-Endpunkte“Taxonomie-Definitionen auflisten
Abschnitt betitelt „Taxonomie-Definitionen auflisten“GET /_emdash/api/taxonomiesTaxonomie erstellen
Abschnitt betitelt „Taxonomie erstellen“POST /_emdash/api/taxonomiesContent-Type: application/json
{ "name": "genre", "label": "Genres", "labelSingular": "Genre", "hierarchical": true, "collections": ["books", "movies"]}Begriffe auflisten
Abschnitt betitelt „Begriffe auflisten“GET /_emdash/api/taxonomies/:name/termsBegriff erstellen
Abschnitt betitelt „Begriff erstellen“POST /_emdash/api/taxonomies/:name/termsContent-Type: application/json
{ "slug": "tutorials", "label": "Tutorials", "parentId": "term_abc", "description": "How-to guides"}Begriff aktualisieren
Abschnitt betitelt „Begriff aktualisieren“PUT /_emdash/api/taxonomies/:name/terms/:slugBegriff löschen
Abschnitt betitelt „Begriff löschen“DELETE /_emdash/api/taxonomies/:name/terms/:slugEintragsbegriffe setzen
Abschnitt betitelt „Eintragsbegriffe setzen“POST /_emdash/api/content/:collection/:id/terms/:taxonomyContent-Type: application/json
{ "termIds": ["term_news", "term_featured"]}Widget-Bereichs-Endpunkte
Abschnitt betitelt „Widget-Bereichs-Endpunkte“Widget-Bereiche auflisten
Abschnitt betitelt „Widget-Bereiche auflisten“GET /_emdash/api/widget-areasWidget-Bereich abrufen
Abschnitt betitelt „Widget-Bereich abrufen“GET /_emdash/api/widget-areas/:nameWidget-Bereich erstellen
Abschnitt betitelt „Widget-Bereich erstellen“POST /_emdash/api/widget-areasContent-Type: application/json
{ "name": "sidebar", "label": "Hauptseitenleiste", "description": "Appears on posts"}Widget-Bereich löschen
Abschnitt betitelt „Widget-Bereich löschen“DELETE /_emdash/api/widget-areas/:nameWidget hinzufügen
Abschnitt betitelt „Widget hinzufügen“POST /_emdash/api/widget-areas/:name/widgetsContent-Type: application/json
{ "type": "content", "title": "Ueber", "content": [...]}Widget aktualisieren
Abschnitt betitelt „Widget aktualisieren“PUT /_emdash/api/widget-areas/:name/widgets/:idWidget löschen
Abschnitt betitelt „Widget löschen“DELETE /_emdash/api/widget-areas/:name/widgets/:idWidgets neu anordnen
Abschnitt betitelt „Widgets neu anordnen“POST /_emdash/api/widget-areas/:name/reorderContent-Type: application/json
{ "widgetIds": ["widget_1", "widget_2", "widget_3"]}Benutzerverwaltungs-Endpunkte
Abschnitt betitelt „Benutzerverwaltungs-Endpunkte“Benutzer auflisten
Abschnitt betitelt „Benutzer auflisten“GET /_emdash/api/admin/usersGET /_emdash/api/admin/users?role=40GET /_emdash/api/admin/users?search=johnBenutzer abrufen
Abschnitt betitelt „Benutzer abrufen“GET /_emdash/api/admin/users/:idBenutzer aktualisieren
Abschnitt betitelt „Benutzer aktualisieren“PATCH /_emdash/api/admin/users/:idContent-Type: application/json
{ "name": "John Doe", "role": 40}Benutzer aktivieren
Abschnitt betitelt „Benutzer aktivieren“POST /_emdash/api/admin/users/:id/enableBenutzer deaktivieren
Abschnitt betitelt „Benutzer deaktivieren“POST /_emdash/api/admin/users/:id/disableAuthentifizierungs-Endpunkte
Abschnitt betitelt „Authentifizierungs-Endpunkte“Einrichtungsstatus
Abschnitt betitelt „Einrichtungsstatus“GET /_emdash/api/setup/statusGibt zurück, ob die Einrichtung abgeschlossen ist und ob Benutzer existieren.
Passkey-Login
Abschnitt betitelt „Passkey-Login“POST /_emdash/api/auth/passkey/optionsWebAuthn-Authentifizierungsoptionen abrufen.
POST /_emdash/api/auth/passkey/verifyContent-Type: application/json
{ "id": "credential-id", "rawId": "...", "response": {...}, "type": "public-key"}Passkey verifizieren und Sitzung erstellen.
Magic Link
Abschnitt betitelt „Magic Link“POST /_emdash/api/auth/magic-link/sendContent-Type: application/json
{ "email": "user@example.com"}GET /_emdash/api/auth/magic-link/verify?token=xxxAbmelden
Abschnitt betitelt „Abmelden“POST /_emdash/api/auth/logoutAktueller Benutzer
Abschnitt betitelt „Aktueller Benutzer“GET /_emdash/api/auth/meBenutzer einladen
Abschnitt betitelt „Benutzer einladen“POST /_emdash/api/auth/inviteContent-Type: application/json
{ "email": "newuser@example.com", "role": 30}Passkey-Verwaltung
Abschnitt betitelt „Passkey-Verwaltung“GET /_emdash/api/auth/passkeyPasskeys des Benutzers auflisten.
POST /_emdash/api/auth/passkey/register/optionsPOST /_emdash/api/auth/passkey/register/verifyNeuen Passkey registrieren.
PATCH /_emdash/api/auth/passkey/:idContent-Type: application/json
{ "name": "MacBook Pro"}Passkey umbenennen.
DELETE /_emdash/api/auth/passkey/:idPasskey löschen.
Import-Endpunkte
Abschnitt betitelt „Import-Endpunkte“WordPress-Export analysieren
Abschnitt betitelt „WordPress-Export analysieren“POST /_emdash/api/import/wordpress/analyzeContent-Type: multipart/form-data
file: <WXR-Datei>WordPress-Import ausführen
Abschnitt betitelt „WordPress-Import ausführen“POST /_emdash/api/import/wordpress/executeContent-Type: application/json
{ "analysisId": "...", "options": { "includeMedia": true, "includeTaxonomies": true, "includeMenus": true }}Ratenbegrenzung
Abschnitt betitelt „Ratenbegrenzung“API-Endpunkte können je nach Bereitstellungskonfiguration ratenbeschränkt sein. Bei Ratenbegrenzung enthalten Antworten:
HTTP/1.1 429 Too Many RequestsRetry-After: 60Die API unterstützt CORS für Browseranfragen. Konfigurieren Sie erlaubte Ursprünge in Ihrer Bereitstellung.