So veroeffentlichst du Inhalte per HTTP POST
Waehle den passenden content_type, fuelle dessen Tabelle aus und sende den JSON-Body an /api/content-ingest. Jede Content-Typ-Sektion zeigt alle noetigen Felder auf einen Blick.
Endpoint und Auth
| Eintrag | Status | Hinweis | Beispiel |
|---|---|---|---|
| Methode | Pflicht | POST | POST |
| Pfad | Pflicht | /api/content-ingest | /api/content-ingest |
| Header X-API-Key | Pflicht | Muss API_INGEST_KEY entsprechen. |
dpp-live-7f8a9b2c |
| Header Authorization: Bearer <key> | Optional | Fallback, falls X-API-Key fehlt. |
Bearer dpp-live-7f8a9b2c |
| Header Content-Type | Pflicht | Body muss valides JSON sein. | application/json |
Body-Formate
| Eintrag | Status | Hinweis | Beispiel |
|---|---|---|---|
| Einzelpayload | Pflicht | Der Body ist ein vollstaendiges JSON-Objekt fuer genau einen Content-Typ. | {"content_type":"wissen", ...} |
| Batch | Optional | Der Body enthaelt articles mit mehreren vollstaendigen Content-Objekten. |
{"articles":[{...},{...}]} |
| Draft | Optional | Ohne content_status oder mit draft landet der Inhalt im Admin-Draft. |
"content_status":"draft" |
| Direkt publishen | Optional | Nur fuer vertrauenswuerdige Automationen: publish schreibt direkt in den Zielpfad. |
"content_status":"publish" |
Wissen
Evergreen-Artikel, Leitfaeden und erklaerende Fachinhalte.
Ablauf fuer Poster
- JSON nach der Feldtabelle fuer
content_type = "wissen"bauen. - Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
- JSON per
POST /api/content-ingestmit API-Key senden. - Bei
draftim Admin pruefen; beipublishden angegebenen Zielpfad pruefen.
Media-Mapping: Media Ingest mit content_type=wissen, derselben category_path und demselben content_slug verwenden; in Media-Feldern die url aus der Media-Ingest-Antwort einsetzen.
Feldtabelle
| Gruppe | Feld | Status | Typ | Hinweis | Beispiel |
|---|---|---|---|---|---|
| Request | content_type |
Pflicht | string | Muss exakt dieser Content-Typ sein. | "wissen" |
| Request | content_slug |
Pflicht | string | Kanonischer Content-Slug; wird normalisiert und bestimmt den Zielpfad. | "espr-grundlagen" |
| Request | content_format |
Pflicht | string | Format innerhalb des Content-Typs. | "leitfaden" |
| Request | content_status |
Optional | string | Default ist draft; nur publish veroeffentlicht direkt. | "draft" |
| Taxonomie | category_path |
Pflicht | array<string> | 1 bis 3 Kategorie-Slugs unterhalb von content_type; content_type wird nicht wiederholt. | ["compliance"] |
| Taxonomie | category_definitions |
Pflicht | array<object> | Muss jeden Teilpfad aus category_path mit slug und label definieren. | [{"slug":"compliance","label":"Compliance"}] |
| Taxonomie | tags |
Pflicht | array<string> | Darf leer sein; gesetzte Tags muessen in tag_definitions stehen. | [] |
| Taxonomie | tag_definitions |
Pflicht | array<object> | Darf leer sein, wenn tags leer ist; sonst je Tag slug und label liefern. | [] |
| Meta | meta |
Pflicht | object | Container fuer SEO- und Anzeige-Metadaten; Kategorie steht nicht in meta. | {"title":"..."} |
| Content | content |
Pflicht | object | Container fuer Seitentext, strukturierte Inhalte und Media-Referenzen. | {"headline":"..."} |
| Meta | meta.title |
Pflicht | string | SEO-/Seitentitel. | "ESPR-Grundlagen fuer digitale Produktpaesse" |
| Meta | meta.description |
Pflicht | string | SEO-Beschreibung. | "Kompakter Leitfaden zu ESPR und digitalen Produktpaessen." |
| Meta | meta.date |
Pflicht | string | Empfohlenes Format: YYYY-MM-DD. | "2026-06-30" |
| Content | content.headline |
Pflicht | string | H1 der Detailseite. | "ESPR-Grundlagen fuer digitale Produktpaesse" |
| Content | content.intro |
Pflicht | string | Intro/Lead fuer Detailseite und Karten. | "Was Unternehmen jetzt ueber DPP-Daten wissen sollten." |
| Content | content.sections |
Pflicht | array<object> | Mindestens eine Section; jede Section braucht body. | [{"body":"<p>...</p>"}] |
| Content | content.sections[].heading |
Optional | string | Zwischenueberschrift einer Section. | "Was die ESPR bedeutet" |
| Content | content.sections[].body |
Pflicht je Section | HTML string | Nicht leerer HTML-Body der Section. | "<p>Produktdaten muessen strukturiert vorliegen.</p>" |
| Content | content.takeaways |
Optional | array<string> | Kurze Zusammenfassung fuer schnelle Lesbarkeit. | ["Datenmodell zuerst klaeren"] |
| Medien | content.media.heroimage |
Optional | string | Hero-Bild, idealerweise die URL aus Media Ingest. | "/content/wissen/compliance/espr-grundlagen/img/hero.webp" |
| Medien | content.media.alt |
Optional | string | Alt-Text fuer das Hero-Medium. | "Produkt mit Smart Label" |
| Medien | content.sections[].media.image |
Optional | string | Bild innerhalb einer Section. | "/content/wissen/compliance/espr-grundlagen/img/section.webp" |
| Medien | content.sections[].media.video |
Optional | string | Video innerhalb einer Section. | "/content/.../vid/demo.mp4" |
| Speicherziel | Draft-Datei |
Automatisch | string | Entsteht bei content_status draft oder wenn content_status fehlt. | "content/drafts/wissen--espr-grundlagen.json" |
| Speicherziel | Publish-Datei |
Automatisch | string | Entsteht bei content_status publish. | "content/wissen/espr-grundlagen.json" |
Kleinster valider JSON-Payload
{
"content_type": "wissen",
"content_slug": "espr-grundlagen",
"content_format": "leitfaden",
"category_path": [
"compliance"
],
"category_definitions": [
{
"slug": "compliance",
"label": "Compliance"
}
],
"tags": [],
"tag_definitions": [],
"meta": {
"title": "ESPR-Grundlagen fuer digitale Produktpaesse",
"description": "Kompakter Leitfaden zu ESPR und digitalen Produktpaessen.",
"date": "2026-06-30"
},
"content": {
"headline": "ESPR-Grundlagen fuer digitale Produktpaesse",
"intro": "Was Unternehmen jetzt ueber DPP-Daten wissen sollten.",
"sections": [
{
"body": "<p>Produktdaten muessen strukturiert vorliegen.</p>"
}
]
}
}
Blog & News
Aktuelle News, Einordnungen und redaktionelle Updates.
Ablauf fuer Poster
- JSON nach der Feldtabelle fuer
content_type = "blog"bauen. - Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
- JSON per
POST /api/content-ingestmit API-Key senden. - Bei
draftim Admin pruefen; beipublishden angegebenen Zielpfad pruefen.
Media-Mapping: Media Ingest mit content_type=blog, derselben category_path und demselben content_slug verwenden; in Media-Feldern die url aus der Media-Ingest-Antwort einsetzen.
Feldtabelle
| Gruppe | Feld | Status | Typ | Hinweis | Beispiel |
|---|---|---|---|---|---|
| Request | content_type |
Pflicht | string | Muss exakt dieser Content-Typ sein. | "blog" |
| Request | content_slug |
Pflicht | string | Kanonischer Content-Slug; wird normalisiert und bestimmt den Zielpfad. | "espr-fristen-2026" |
| Request | content_format |
Pflicht | string | Format innerhalb des Content-Typs. | "news" |
| Request | content_status |
Optional | string | Default ist draft; nur publish veroeffentlicht direkt. | "draft" |
| Taxonomie | category_path |
Pflicht | array<string> | 1 bis 3 Kategorie-Slugs unterhalb von content_type; content_type wird nicht wiederholt. | ["regulierung"] |
| Taxonomie | category_definitions |
Pflicht | array<object> | Muss jeden Teilpfad aus category_path mit slug und label definieren. | [{"slug":"regulierung","label":"Regulierung"}] |
| Taxonomie | tags |
Pflicht | array<string> | Darf leer sein; gesetzte Tags muessen in tag_definitions stehen. | ["espr"] |
| Taxonomie | tag_definitions |
Pflicht | array<object> | Darf leer sein, wenn tags leer ist; sonst je Tag slug und label liefern. | [{"slug":"espr","label":"ESPR"}] |
| Meta | meta |
Pflicht | object | Container fuer SEO- und Anzeige-Metadaten; Kategorie steht nicht in meta. | {"title":"..."} |
| Content | content |
Pflicht | object | Container fuer Seitentext, strukturierte Inhalte und Media-Referenzen. | {"headline":"..."} |
| Meta | meta.title |
Pflicht | string | SEO-/Seitentitel. | "ESPR-Fristen 2026: Was Unternehmen klaeren sollten" |
| Meta | meta.description |
Pflicht | string | SEO-Beschreibung. | "Einordnung zu ESPR-Fristen und Datenvorbereitung." |
| Meta | meta.date |
Pflicht | string | Empfohlenes Format: YYYY-MM-DD. | "2026-06-30" |
| Meta | meta.author |
Optional | string | Wird im Blog-Detail angezeigt. | "DPP Labels Redaktion" |
| Content | content.headline |
Pflicht | string | H1 der Detailseite. | "ESPR-Fristen 2026" |
| Content | content.body |
Pflicht | HTML string | Haupttext fuer das Blog-Detail. | "<p>Die naechste Projektphase sollte...</p>" |
| Content | content.intro |
Optional | string | Lead fuer Karten und Admin-Preview. | "Neue Anforderungen treffen Unternehmen frueh." |
| Content | content.sections |
Optional | array<object> | Optionale strukturierte Zusatzsections; jede Section braucht body. | [{"body":"<p>...</p>"}] |
| Content | content.sections[].heading |
Optional | string | Zwischenueberschrift einer Section. | "Operative Vorbereitung" |
| Content | content.sections[].body |
Pflicht je Section | HTML string | Nicht leerer HTML-Body, sobald eine Section geliefert wird. | "<p>Teams sollten Datenquellen klaeren.</p>" |
| Medien | content.media.heroimage |
Optional | string | Hero-Bild, idealerweise die URL aus Media Ingest. | "/content/blog/regulierung/espr-fristen-2026/img/hero.webp" |
| Medien | content.media.alt |
Optional | string | Alt-Text fuer das Hero-Medium. | "Produkt mit Smart Label" |
| Medien | content.sections[].media.image |
Optional | string | Bild innerhalb einer Section. | "/content/blog/regulierung/espr-fristen-2026/img/section.webp" |
| Medien | content.sections[].media.video |
Optional | string | Video innerhalb einer Section. | "/content/.../vid/demo.mp4" |
| Speicherziel | Draft-Datei |
Automatisch | string | Entsteht bei content_status draft oder wenn content_status fehlt. | "content/drafts/blog--espr-fristen-2026.json" |
| Speicherziel | Publish-Datei |
Automatisch | string | Entsteht bei content_status publish. | "content/blog/espr-fristen-2026.json" |
Kleinster valider JSON-Payload
{
"content_type": "blog",
"content_slug": "espr-fristen-2026",
"content_format": "news",
"category_path": [
"regulierung"
],
"category_definitions": [
{
"slug": "regulierung",
"label": "Regulierung"
}
],
"tags": [],
"tag_definitions": [],
"meta": {
"title": "ESPR-Fristen 2026: Was Unternehmen klaeren sollten",
"description": "Einordnung zu ESPR-Fristen und Datenvorbereitung.",
"date": "2026-06-30"
},
"content": {
"headline": "ESPR-Fristen 2026",
"body": "<p>Die naechste Projektphase sollte Datenquellen und Verantwortlichkeiten klaeren.</p>"
}
}
Whitepaper
Whitepaper-Seiten fuer Downloads und fachliche Deep Dives.
Ablauf fuer Poster
- JSON nach der Feldtabelle fuer
content_type = "whitepaper"bauen. - Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
- JSON per
POST /api/content-ingestmit API-Key senden. - Bei
draftim Admin pruefen; beipublishden angegebenen Zielpfad pruefen.
Media-Mapping: Media Ingest mit content_type=whitepaper, derselben category_path und demselben content_slug verwenden; in Media-Feldern die url aus der Media-Ingest-Antwort einsetzen.
Feldtabelle
| Gruppe | Feld | Status | Typ | Hinweis | Beispiel |
|---|---|---|---|---|---|
| Request | content_type |
Pflicht | string | Muss exakt dieser Content-Typ sein. | "whitepaper" |
| Request | content_slug |
Pflicht | string | Kanonischer Content-Slug; wird normalisiert und bestimmt den Zielpfad. | "dpp-roadmap-retail" |
| Request | content_format |
Pflicht | string | Format innerhalb des Content-Typs. | "whitepaper" |
| Request | content_status |
Optional | string | Default ist draft; nur publish veroeffentlicht direkt. | "draft" |
| Taxonomie | category_path |
Pflicht | array<string> | 1 bis 3 Kategorie-Slugs unterhalb von content_type; content_type wird nicht wiederholt. | ["retail"] |
| Taxonomie | category_definitions |
Pflicht | array<object> | Muss jeden Teilpfad aus category_path mit slug und label definieren. | [{"slug":"retail","label":"Retail"}] |
| Taxonomie | tags |
Pflicht | array<string> | Darf leer sein; gesetzte Tags muessen in tag_definitions stehen. | ["smart-labels"] |
| Taxonomie | tag_definitions |
Pflicht | array<object> | Darf leer sein, wenn tags leer ist; sonst je Tag slug und label liefern. | [{"slug":"smart-labels","label":"Smart Labels"}] |
| Meta | meta |
Pflicht | object | Container fuer SEO- und Anzeige-Metadaten; Kategorie steht nicht in meta. | {"title":"..."} |
| Content | content |
Pflicht | object | Container fuer Seitentext, strukturierte Inhalte und Media-Referenzen. | {"headline":"..."} |
| Meta | meta.title |
Pflicht | string | SEO-/Seitentitel. | "DPP-Roadmap fuer Retail | Whitepaper" |
| Meta | meta.description |
Pflicht | string | SEO-Beschreibung. | "Whitepaper zur Planung von digitalen Produktpaessen." |
| Meta | meta.date |
Pflicht | string | Empfohlenes Format: YYYY-MM-DD. | "2026-06-30" |
| Content | content.headline |
Pflicht | string | H1 der Detailseite. | "DPP-Roadmap fuer Retail" |
| Content | content.intro |
Pflicht | string | Intro/Lead fuer Download-Kontext. | "So planen Handelsunternehmen DPP und Smart Labels." |
| Content | content.sections |
Pflicht | array<object> | Mindestens eine Section; jede Section braucht body. | [{"body":"<p>...</p>"}] |
| Content | content.sections[].heading |
Optional | string | Zwischenueberschrift einer Section. | "Was Leser lernen" |
| Content | content.sections[].body |
Pflicht je Section | HTML string | Nicht leerer HTML-Body der Section. | "<p>Das Whitepaper erklaert Projektphasen.</p>" |
| Medien | content.media.heroimage |
Optional | string | Hero-Bild, idealerweise die URL aus Media Ingest. | "/content/whitepaper/retail/dpp-roadmap-retail/img/cover.webp" |
| Medien | content.media.alt |
Optional | string | Alt-Text fuer das Hero-Medium. | "Produkt mit Smart Label" |
| Medien | content.sections[].media.image |
Optional | string | Bild innerhalb einer Section. | "/content/whitepaper/retail/dpp-roadmap-retail/img/section.webp" |
| Medien | content.sections[].media.video |
Optional | string | Video innerhalb einer Section. | "/content/.../vid/demo.mp4" |
| Speicherziel | Draft-Datei |
Automatisch | string | Entsteht bei content_status draft oder wenn content_status fehlt. | "content/drafts/whitepaper--dpp-roadmap-retail.json" |
| Speicherziel | Publish-Datei |
Automatisch | string | Entsteht bei content_status publish. | "content/whitepaper/dpp-roadmap-retail.json" |
Kleinster valider JSON-Payload
{
"content_type": "whitepaper",
"content_slug": "dpp-roadmap-retail",
"content_format": "whitepaper",
"category_path": [
"retail"
],
"category_definitions": [
{
"slug": "retail",
"label": "Retail"
}
],
"tags": [],
"tag_definitions": [],
"meta": {
"title": "DPP-Roadmap fuer Retail | Whitepaper",
"description": "Whitepaper zur Planung von digitalen Produktpaessen.",
"date": "2026-06-30"
},
"content": {
"headline": "DPP-Roadmap fuer Retail",
"intro": "So planen Handelsunternehmen DPP und Smart Labels.",
"sections": [
{
"body": "<p>Das Whitepaper erklaert Projektphasen und Datenverantwortung.</p>"
}
]
}
}
Produkte
Produktseiten fuer Smart Labels, QR-Etiketten, NFC und RFID.
Ablauf fuer Poster
- JSON nach der Feldtabelle fuer
content_type = "produkte"bauen. - Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
- JSON per
POST /api/content-ingestmit API-Key senden. - Bei
draftim Admin pruefen; beipublishden angegebenen Zielpfad pruefen.
Media-Mapping: Media Ingest mit content_type=produkte, derselben category_path und demselben content_slug verwenden; in Media-Feldern die url aus der Media-Ingest-Antwort einsetzen.
Feldtabelle
| Gruppe | Feld | Status | Typ | Hinweis | Beispiel |
|---|---|---|---|---|---|
| Request | content_type |
Pflicht | string | Muss exakt dieser Content-Typ sein. | "produkte" |
| Request | content_slug |
Pflicht | string | Kanonischer Content-Slug; wird normalisiert und bestimmt den Zielpfad. | "qr-folie-robust" |
| Request | content_format |
Pflicht | string | Format innerhalb des Content-Typs. | "produktinfo" |
| Request | content_status |
Optional | string | Default ist draft; nur publish veroeffentlicht direkt. | "draft" |
| Taxonomie | category_path |
Pflicht | array<string> | 1 bis 3 Kategorie-Slugs unterhalb von content_type; content_type wird nicht wiederholt. | ["qr-etiketten"] |
| Taxonomie | category_definitions |
Pflicht | array<object> | Muss jeden Teilpfad aus category_path mit slug und label definieren. | [{"slug":"qr-etiketten","label":"QR-Etiketten"}] |
| Taxonomie | tags |
Pflicht | array<string> | Darf leer sein; gesetzte Tags muessen in tag_definitions stehen. | ["qr-code"] |
| Taxonomie | tag_definitions |
Pflicht | array<object> | Darf leer sein, wenn tags leer ist; sonst je Tag slug und label liefern. | [{"slug":"qr-code","label":"QR-Code"}] |
| Meta | meta |
Pflicht | object | Container fuer SEO- und Anzeige-Metadaten; Kategorie steht nicht in meta. | {"title":"..."} |
| Content | content |
Pflicht | object | Container fuer Seitentext, strukturierte Inhalte und Media-Referenzen. | {"headline":"..."} |
| Meta | meta.title |
Pflicht | string | SEO-/Seitentitel. | "Robustes QR-Folienetikett | DPP Labels" |
| Meta | meta.description |
Pflicht | string | SEO-Beschreibung. | "Widerstandsfaehiges QR-Folienetikett fuer Produktinformationen." |
| Content | content.headline |
Pflicht | string | H1 der Detailseite. | "Robustes QR-Folienetikett" |
| Content | content.intro |
Pflicht | string | Intro/Lead fuer Produktseite und Karten. | "Ein strapazierfaehiges QR-Etikett fuer Produkte." |
| Content | content.features |
Pflicht | array<string> | Mindestens ein Feature. | ["Robuste Folienbasis"] |
| Content | content.sections |
Pflicht | array<object> | Mindestens eine Section; jede Section braucht body. | [{"body":"<p>...</p>"}] |
| Content | content.sections[].heading |
Optional | string | Zwischenueberschrift einer Section. | "Typische Anwendung" |
| Content | content.sections[].body |
Pflicht je Section | HTML string | Nicht leerer HTML-Body der Section. | "<p>Das Etikett eignet sich fuer Verpackungen.</p>" |
| Medien | content.media.heroimage |
Optional | string | Hero-Bild, idealerweise die URL aus Media Ingest. | "/content/produkte/qr-etiketten/qr-folie-robust/img/produktfoto.webp" |
| Medien | content.media.alt |
Optional | string | Alt-Text fuer das Hero-Medium. | "Produkt mit Smart Label" |
| Medien | content.sections[].media.image |
Optional | string | Bild innerhalb einer Section. | "/content/produkte/qr-etiketten/qr-folie-robust/img/section.webp" |
| Medien | content.sections[].media.video |
Optional | string | Video innerhalb einer Section. | "/content/.../vid/demo.mp4" |
| Speicherziel | Draft-Datei |
Automatisch | string | Entsteht bei content_status draft oder wenn content_status fehlt. | "content/drafts/produkte--qr-folie-robust.json" |
| Speicherziel | Publish-Datei |
Automatisch | string | Entsteht bei content_status publish. | "content/produkte/items/qr-folie-robust.json" |
Kleinster valider JSON-Payload
{
"content_type": "produkte",
"content_slug": "qr-folie-robust",
"content_format": "produktinfo",
"category_path": [
"qr-etiketten"
],
"category_definitions": [
{
"slug": "qr-etiketten",
"label": "QR-Etiketten"
}
],
"tags": [],
"tag_definitions": [],
"meta": {
"title": "Robustes QR-Folienetikett | DPP Labels",
"description": "Widerstandsfaehiges QR-Folienetikett fuer Produktinformationen."
},
"content": {
"headline": "Robustes QR-Folienetikett",
"intro": "Ein strapazierfaehiges QR-Etikett fuer Produkte.",
"features": [
"Robuste Folienbasis"
],
"sections": [
{
"body": "<p>Das Etikett eignet sich fuer Verpackungen und Produktinformationen.</p>"
}
]
}
}
Anwendungen
Use Cases mit Herausforderung, Loesung und Nutzenargumenten.
Ablauf fuer Poster
- JSON nach der Feldtabelle fuer
content_type = "anwendungen"bauen. - Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
- JSON per
POST /api/content-ingestmit API-Key senden. - Bei
draftim Admin pruefen; beipublishden angegebenen Zielpfad pruefen.
Media-Mapping: Media Ingest mit content_type=anwendungen, derselben category_path und demselben content_slug verwenden; in Media-Feldern die url aus der Media-Ingest-Antwort einsetzen.
Feldtabelle
| Gruppe | Feld | Status | Typ | Hinweis | Beispiel |
|---|---|---|---|---|---|
| Request | content_type |
Pflicht | string | Muss exakt dieser Content-Typ sein. | "anwendungen" |
| Request | content_slug |
Pflicht | string | Kanonischer Content-Slug; wird normalisiert und bestimmt den Zielpfad. | "dpp-kosmetik-smart-labels" |
| Request | content_format |
Pflicht | string | Format innerhalb des Content-Typs. | "usecase" |
| Request | content_status |
Optional | string | Default ist draft; nur publish veroeffentlicht direkt. | "draft" |
| Taxonomie | category_path |
Pflicht | array<string> | 1 bis 3 Kategorie-Slugs unterhalb von content_type; content_type wird nicht wiederholt. | ["digitaler-produktpass"] |
| Taxonomie | category_definitions |
Pflicht | array<object> | Muss jeden Teilpfad aus category_path mit slug und label definieren. | [{"slug":"digitaler-produktpass","label":"Digitaler Produktpass"}] |
| Taxonomie | tags |
Pflicht | array<string> | Darf leer sein; gesetzte Tags muessen in tag_definitions stehen. | ["kosmetik"] |
| Taxonomie | tag_definitions |
Pflicht | array<object> | Darf leer sein, wenn tags leer ist; sonst je Tag slug und label liefern. | [{"slug":"kosmetik","label":"Kosmetik"}] |
| Meta | meta |
Pflicht | object | Container fuer SEO- und Anzeige-Metadaten; Kategorie steht nicht in meta. | {"title":"..."} |
| Content | content |
Pflicht | object | Container fuer Seitentext, strukturierte Inhalte und Media-Referenzen. | {"headline":"..."} |
| Meta | meta.title |
Pflicht | string | SEO-/Seitentitel. | "Digitaler Produktpass fuer Kosmetik" |
| Meta | meta.description |
Pflicht | string | SEO-Beschreibung. | "Use Case fuer Smart Labels in der Kosmetikbranche." |
| Meta | meta.industry |
Optional | string | Wird als Badge angezeigt. | "Kosmetik" |
| Content | content.headline |
Pflicht | string | H1 der Detailseite. | "Digitaler Produktpass fuer Kosmetik" |
| Content | content.intro |
Pflicht | string | Intro/Lead fuer Use-Case-Seite und Karten. | "Smart Labels machen Produktinformationen direkt erreichbar." |
| Content | content.challenge |
Pflicht | HTML string | Problem-/Ausgangslage. | "<p>Informationen muessen aktuell und produktnah sein.</p>" |
| Content | content.solution |
Pflicht | HTML string | Loesungsbeschreibung. | "<p>QR oder NFC verbinden Produkt und digitale Daten.</p>" |
| Content | content.benefits |
Pflicht | array<string> | Mindestens ein Nutzenargument. | ["Mehr Informationsflaeche"] |
| Content | content.products |
Optional | array | Empfohlene Produkte in der Sidebar. | [{"name":"QR-Folienetikett","url":"/produkte/.../"}] |
| Content | content.sections |
Optional | array<object> | Optionale Zusatzsections; jede Section braucht body. | [{"body":"<p>...</p>"}] |
| Content | content.sections[].heading |
Optional | string | Zwischenueberschrift einer Section. | "Demo" |
| Content | content.sections[].body |
Pflicht je Section | HTML string | Nicht leerer HTML-Body, sobald eine Section geliefert wird. | "<p>Ein Video zeigt den Scan-Prozess.</p>" |
| Medien | content.media.heroimage |
Optional | string | Hero-Bild, idealerweise die URL aus Media Ingest. | "/content/anwendungen/digitaler-produktpass/dpp-kosmetik-smart-labels/img/hero.webp" |
| Medien | content.media.alt |
Optional | string | Alt-Text fuer das Hero-Medium. | "Produkt mit Smart Label" |
| Medien | content.sections[].media.image |
Optional | string | Bild innerhalb einer Section. | "/content/anwendungen/digitaler-produktpass/dpp-kosmetik-smart-labels/img/section.webp" |
| Medien | content.sections[].media.video |
Optional | string | Video innerhalb einer Section. | "/content/.../vid/demo.mp4" |
| Speicherziel | Draft-Datei |
Automatisch | string | Entsteht bei content_status draft oder wenn content_status fehlt. | "content/drafts/anwendungen--dpp-kosmetik-smart-labels.json" |
| Speicherziel | Publish-Datei |
Automatisch | string | Entsteht bei content_status publish. | "content/anwendungen/items/dpp-kosmetik-smart-labels.json" |
Kleinster valider JSON-Payload
{
"content_type": "anwendungen",
"content_slug": "dpp-kosmetik-smart-labels",
"content_format": "usecase",
"category_path": [
"digitaler-produktpass"
],
"category_definitions": [
{
"slug": "digitaler-produktpass",
"label": "Digitaler Produktpass"
}
],
"tags": [],
"tag_definitions": [],
"meta": {
"title": "Digitaler Produktpass fuer Kosmetik",
"description": "Use Case fuer Smart Labels in der Kosmetikbranche."
},
"content": {
"headline": "Digitaler Produktpass fuer Kosmetik",
"intro": "Smart Labels machen Produktinformationen direkt erreichbar.",
"challenge": "<p>Informationen muessen aktuell und produktnah sein.</p>",
"solution": "<p>QR oder NFC verbinden Produkt und digitale Daten.</p>",
"benefits": [
"Mehr Informationsflaeche"
]
}
}
Branchen
Branchenseiten mit Anforderungen, Kontext und Smart-Label-Nutzen.
Ablauf fuer Poster
- JSON nach der Feldtabelle fuer
content_type = "branchen"bauen. - Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
- JSON per
POST /api/content-ingestmit API-Key senden. - Bei
draftim Admin pruefen; beipublishden angegebenen Zielpfad pruefen.
Media-Mapping: Media Ingest mit content_type=branchen, derselben category_path und demselben content_slug verwenden; in Media-Feldern die url aus der Media-Ingest-Antwort einsetzen.
Feldtabelle
| Gruppe | Feld | Status | Typ | Hinweis | Beispiel |
|---|---|---|---|---|---|
| Request | content_type |
Pflicht | string | Muss exakt dieser Content-Typ sein. | "branchen" |
| Request | content_slug |
Pflicht | string | Kanonischer Content-Slug; wird normalisiert und bestimmt den Zielpfad. | "kosmetik-personal-care" |
| Request | content_format |
Pflicht | string | Format innerhalb des Content-Typs. | "artikel" |
| Request | content_status |
Optional | string | Default ist draft; nur publish veroeffentlicht direkt. | "draft" |
| Taxonomie | category_path |
Pflicht | array<string> | 1 bis 3 Kategorie-Slugs unterhalb von content_type; content_type wird nicht wiederholt. | ["konsumgueter"] |
| Taxonomie | category_definitions |
Pflicht | array<object> | Muss jeden Teilpfad aus category_path mit slug und label definieren. | [{"slug":"konsumgueter","label":"Konsumgueter"}] |
| Taxonomie | tags |
Pflicht | array<string> | Darf leer sein; gesetzte Tags muessen in tag_definitions stehen. | ["consumer-engagement"] |
| Taxonomie | tag_definitions |
Pflicht | array<object> | Darf leer sein, wenn tags leer ist; sonst je Tag slug und label liefern. | [{"slug":"consumer-engagement","label":"Consumer Engagement"}] |
| Meta | meta |
Pflicht | object | Container fuer SEO- und Anzeige-Metadaten; Kategorie steht nicht in meta. | {"title":"..."} |
| Content | content |
Pflicht | object | Container fuer Seitentext, strukturierte Inhalte und Media-Referenzen. | {"headline":"..."} |
| Meta | meta.title |
Pflicht | string | SEO-/Seitentitel. | "Smart Labels fuer Kosmetik und Personal Care" |
| Meta | meta.description |
Pflicht | string | SEO-Beschreibung. | "Branchenseite zu QR, NFC und digitalen Produktinformationen." |
| Content | content.headline |
Pflicht | string | H1 der Detailseite. | "Smart Labels fuer Kosmetik und Personal Care" |
| Content | content.intro |
Pflicht | string | Intro/Lead fuer Branchenseite und Karten. | "Kosmetikprodukte profitieren von digitalen Informationen." |
| Content | content.sections |
Pflicht | array<object> | Mindestens eine Section; jede Section braucht body. | [{"body":"<p>...</p>"}] |
| Content | content.sections[].heading |
Optional | string | Zwischenueberschrift einer Section. | "Typische Anforderungen" |
| Content | content.sections[].body |
Pflicht je Section | HTML string | Nicht leerer HTML-Body der Section. | "<p>Verbraucher erwarten klare Informationen.</p>" |
| Content | content.icon |
Optional | string | Kurzlabel oder Icon-Code fuer Branchen-Cards. | "COS" |
| Medien | content.media.heroimage |
Optional | string | Hero-Bild, idealerweise die URL aus Media Ingest. | "/content/branchen/konsumgueter/kosmetik-personal-care/img/hero.webp" |
| Medien | content.media.alt |
Optional | string | Alt-Text fuer das Hero-Medium. | "Produkt mit Smart Label" |
| Medien | content.sections[].media.image |
Optional | string | Bild innerhalb einer Section. | "/content/branchen/konsumgueter/kosmetik-personal-care/img/section.webp" |
| Medien | content.sections[].media.video |
Optional | string | Video innerhalb einer Section. | "/content/.../vid/demo.mp4" |
| Speicherziel | Draft-Datei |
Automatisch | string | Entsteht bei content_status draft oder wenn content_status fehlt. | "content/drafts/branchen--kosmetik-personal-care.json" |
| Speicherziel | Publish-Datei |
Automatisch | string | Entsteht bei content_status publish. | "content/branchen/kosmetik-personal-care.json" |
Kleinster valider JSON-Payload
{
"content_type": "branchen",
"content_slug": "kosmetik-personal-care",
"content_format": "artikel",
"category_path": [
"konsumgueter"
],
"category_definitions": [
{
"slug": "konsumgueter",
"label": "Konsumgueter"
}
],
"tags": [],
"tag_definitions": [],
"meta": {
"title": "Smart Labels fuer Kosmetik und Personal Care",
"description": "Branchenseite zu QR, NFC und digitalen Produktinformationen."
},
"content": {
"headline": "Smart Labels fuer Kosmetik und Personal Care",
"intro": "Kosmetikprodukte profitieren von digitalen Informationen.",
"sections": [
{
"body": "<p>Verbraucher erwarten klare Informationen zu Inhaltsstoffen und Herkunft.</p>"
}
]
}
}
Globale Regeln
category_pathenthaelt nur Kategorien unterhalb voncontent_type; der Typ wird nicht wiederholt.- Inhaltsserien: Mehrere Inhalte, die in exakt derselben Kategorie (identischer
category_path) liegen, werden im Frontend automatisch als "Serie" betrachtet und am Ende des Artikels untereinander verlinkt (Serien-Floater). category_pathdarf 1 bis 3 Ebenen enthalten.category_definitionsmuss jede Ebene auscategory_pathdefinieren.tagsdarf leer sein; gesetzte Tags muessen intag_definitionsdefiniert sein. Sie erzeugen automatisch eine Tag-Cloud und eine Tag-Archivseite.- Pflichtfelder fehlen, wenn sie
null, leerer String oder leeres Array sind. - Falls
content.sectionsvorhanden ist, muss es ein Array sein und jede Section brauchtbody. .webpin Beispielen ist nur ein moegliches Bildformat; die tatsaechliche Extension muss zur hochgeladenen Datei bzw. zururlaus Media Ingest passen.- Lokale strukturierte Bildfelder unter
/content/.../img/...werden beim Speichern und Rendern auf eine eindeutig vorhandene gleichnamige Datei mit anderer erlaubter Bildendung normalisiert, falls die referenzierte Datei fehlt. - Die API speichert HTML-Felder strukturell; die oeffentliche Ausgabe reduziert HTML auf einfache Formatierungen und sichere Links.
Abgelehnte Legacy-Felder
| Eintrag | Status | Hinweis | Beispiel |
|---|---|---|---|
| type | Abgelehnt | Verwende content_type. |
article |
| slug | Abgelehnt | Verwende content_slug. |
my-slug |
| taxonomy | Abgelehnt | Verwende die flachen Kategorie- und Tag-Felder. | {"format":"news"} |
| meta.category | Abgelehnt | Kategorie steht ausschliesslich in category_path und category_definitions. |
news |
| magazin | Abgelehnt | Verwende blog als Content-Typ. |
magazin |
Fehler und Antworten
| Eintrag | Status | Hinweis | Beispiel |
|---|---|---|---|
| 200 | Automatisch | Mindestens ein Inhalt wurde verarbeitet; bei Teilfehlern enthaelt die Antwort errors. |
{"success":true,"items":[...]} |
| 400 | Automatisch | JSON ist ungueltig, leer oder kein Einzel-/Batch-Format. | {"error":"Invalid JSON"} |
| 401 | Automatisch | API-Key fehlt oder ist falsch. | {"error":"Missing or invalid API key"} |
| 422 | Automatisch | Validierung fehlgeschlagen; details nennt die betroffenen Felder. |
{"details":["Article 1: meta.title is required."]} |