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"
Die Tabellen unten zeigen den kleinsten validen Payload je Content-Typ. Fuer komplette Copy/Paste-Beispiele mit Medien siehe Content Payload Examples.

Wissen

Evergreen-Artikel, Leitfaeden und erklaerende Fachinhalte.

Ablauf fuer Poster

  1. JSON nach der Feldtabelle fuer content_type = "wissen" bauen.
  2. Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
  3. JSON per POST /api/content-ingest mit API-Key senden.
  4. Bei draft im Admin pruefen; bei publish den 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

  1. JSON nach der Feldtabelle fuer content_type = "blog" bauen.
  2. Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
  3. JSON per POST /api/content-ingest mit API-Key senden.
  4. Bei draft im Admin pruefen; bei publish den 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

  1. JSON nach der Feldtabelle fuer content_type = "whitepaper" bauen.
  2. Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
  3. JSON per POST /api/content-ingest mit API-Key senden.
  4. Bei draft im Admin pruefen; bei publish den 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

  1. JSON nach der Feldtabelle fuer content_type = "produkte" bauen.
  2. Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
  3. JSON per POST /api/content-ingest mit API-Key senden.
  4. Bei draft im Admin pruefen; bei publish den 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

  1. JSON nach der Feldtabelle fuer content_type = "anwendungen" bauen.
  2. Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
  3. JSON per POST /api/content-ingest mit API-Key senden.
  4. Bei draft im Admin pruefen; bei publish den 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

  1. JSON nach der Feldtabelle fuer content_type = "branchen" bauen.
  2. Optional Medien ueber Media Ingest mit denselben Strukturwerten hochladen.
  3. JSON per POST /api/content-ingest mit API-Key senden.
  4. Bei draft im Admin pruefen; bei publish den 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_path enthaelt nur Kategorien unterhalb von content_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_path darf 1 bis 3 Ebenen enthalten.
  • category_definitions muss jede Ebene aus category_path definieren.
  • tags darf leer sein; gesetzte Tags muessen in tag_definitions definiert sein. Sie erzeugen automatisch eine Tag-Cloud und eine Tag-Archivseite.
  • Pflichtfelder fehlen, wenn sie null, leerer String oder leeres Array sind.
  • Falls content.sections vorhanden ist, muss es ein Array sein und jede Section braucht body.
  • .webp in Beispielen ist nur ein moegliches Bildformat; die tatsaechliche Extension muss zur hochgeladenen Datei bzw. zur url aus 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."]}