Diil Docs
  1. Doku
  2. API-Referenz

GET /v1/sections/:marker — ein Abschnitt

Aktualisiert:

Eine Sektion ist ein horizontaler Streifen einer Seite — der Hero, die Preistabelle, die FAQ — samt all ihren Blöcken. Normalerweise bekommst du Sektionen gratis mit, innerhalb von /v1/pages/:marker. Dieser Endpoint ist für die Momente, in denen du nur ein Stück willst und nicht die ganze Torte.

Wann eine Sektion die ganze Seite schlägt

Die ganze Seite zu holen bleibt der Standard, und für die meisten Seiten ist das richtig: ein Request, alles drin. Eine einzelne Sektion gewinnt in ein paar konkreten Situationen:

  • Lazy Loading unterhalb des Folds. Die Seite ist lang, das Review-Karussell wohnt irgendwo beim vierten Scrollen, und die meisten Besucher kommen nie dort an. Hol die Seite mit ?empty für Titel und Meta-Tags, lade die Sektionen des ersten Screens per Marker und die schweren erst, wenn der Besucher in ihre Nähe scrollt.
  • Geteilte Sektionen. Der Footer, ein Newsletter-Streifen, ein Kontaktblock „Noch Fragen?“, der auf jeder Seite auftaucht. Pfleg ihn einmal im CRM und hol ihn per Marker, wo immer du ihn brauchst.
  • Einen Teil aktualisieren. Ein clientseitiges Widget, das sich nur für eine Sektion interessiert — etwa ein Promo-Bereich, den du per Timer neu prüfst —, muss nicht jedes Mal die ganze Seite herunterladen.

Eine Sektion abrufen

GET/v1/sections/:marker

https://back.sitecog.com/content/v1/sections/:marker

Eine Sektion mit ihren Blöcken in content. Die Form ist exakt dieselbe wie bei einer Sektion in der Seiten-Response, derselbe Rendering-Code funktioniert also für beide.

Parameter

markerpathstringPflicht
Der Sektions-Marker aus dem CRM, z. B. hero oder reviews. Gleiche Regeln wie bei Seiten-Markern: lateinische Buchstaben, Ziffern und Unterstriche, 2–40 Zeichen, Groß-/Kleinschreibung zählt. Die Sektion wird allein über ihren Marker gefunden — einen Seiten-Parameter gibt es nicht —, also gib Sektionen, die du so abrufst, Marker, die sich auf anderen Seiten nicht wiederholen.
langquerystringoptionalStandard: alle aktiven Sprachen
Beschränkt die Übersetzungen in den Blöcken auf diese Sprachen: ?lang=en, ?lang=en,de oder ?lang=en&lang=de. Jeder Code muss eine aktive Sprache der Site sein, sonst bekommst du 400 unknown_lang. Siehe Sprachen & Fallbacks.
emptyqueryflagoptionalStandard: aus
Liefert die Sektion ohne ihren content — nur id, marker, name, index und show. Vorhanden = an: ?empty, ?empty=1, ?empty=true; aus mit 0 oder false. Praktisch für einen günstigen Check „ist diese Sektion überhaupt eingeschaltet?“, bevor du etwas Schweres lädst.
x-crm-keyheaderstringPflicht
Dein Site-Key. Lässt sich auch als ?key= übergeben, wenn Header keine Option sind. Siehe Site-Keys.

Beispiel-Request

curl "https://back.sitecog.com/content/v1/sections/reviews?lang=en" \
  -H "x-crm-key: pk_3f9c2a7e1b4d4c0e8a6f5b2d9c1e7a40"

Beispiel-Response

200 OKjson
{
  "id": 47,
  "marker": "reviews",
  "name": "Customer reviews",
  "index": 4,
  "show": true,
  "content": {
    "reviews_title": {
      "id": 120,
      "marker": "reviews_title",
      "name": "Title",
      "type": "text",
      "multilang": true,
      "updatedAt": "2026-09-21T11:02:15.000Z",
      "content": { "en": "What people say" }
    },
    "reviews_list": {
      "id": 121,
      "marker": "reviews_list",
      "name": "Reviews",
      "type": "array",
      "multilang": false,
      "updatedAt": "2026-09-25T08:40:03.000Z",
      "content": [
        {
          "author": { "en": "Maria, Berlin" },
          "text": { "en": "Finally I can hear my podcast on the U-Bahn." },
          "rating": 5
        }
      ]
    }
  }
}

Mit ?empty liefert derselbe Request nur den oberen Teil — praktisch, wenn du nur wissen willst, ob die Sektion eingeschaltet ist:

200 OK — ?emptyjson
{
  "id": 47,
  "marker": "reviews",
  "name": "Customer reviews",
  "index": 4,
  "show": true
}

Felder der Response

idnumber
Interne ID der Sektion. Stabil, aber nimm im Code lieber den Marker — IDs unterscheiden sich zwischen Umgebungen.
markerstring
Der Sektions-Marker, derselbe, den du in die URL schreibst.
namestring
Menschenlesbarer Name aus dem CRM („Customer reviews“). Gedacht für die Redaktion — gib ihn nicht auf der Seite aus.
indexnumber
Position der Sektion auf ihrer Seite, ab 0. Praktisch, wenn du mehrere Sektionen lazy lädst und ihre Reihenfolge behalten musst.
showboolean
Ob die Redaktion diese Sektion sichtbar haben will. Siehe das show-Flag unten — eine ausgeblendete Sektion wird trotzdem geliefert.
content{ [blockMarker]: Block }
Die Blöcke der Sektion, mit Markern als Keys. Fehlt, wenn du ?empty übergibst.
content →
idnumber
Block-ID.
markerstring
Block-Marker, z. B. reviews_title.
namestring
Name für die Redaktion.
typestring
Einer von text, html, image, video, link, number, color, date, date_range, boolean, object, array. Bestimmt die Form von content.
multilangboolean
Bei Bildern und Videos: true, wenn jede Sprache ihre eigene Datei hat.
updatedAtstring (ISO 8601)
Wann der Block zuletzt bearbeitet wurde.
contentdepends on type
Der Wert selbst: eine Sprach-Map bei Text, { file } bei einem einzelnen Bild, ein Array von Einträgen bei array und so weiter. Alle Formen stehen auf der Seite Blocktypen.

Das show-Flag: ausgeblendet ist nicht gelöscht

Die Redaktion kann eine Sektion im CRM ausschalten, ohne sie zu löschen — für eine saisonale Aktion, eine halb fertige FAQ oder einen Block, der noch auf die Rechtsabteilung wartet. Die API liefert so eine Sektion trotzdem, mit "show": false und ihrem kompletten Inhalt. Sie nicht zu rendern, ist der Job deines Templates:

const reviews = await getSection('reviews');

return (
  <>
    <Hero />
    {reviews.show && <Reviews section={reviews} />}
  </>
);

Fehler

StatusBodyWas passiert ist
400{"message":"invalid_marker"}Der Marker enthält Zeichen außerhalb von A–Z a–z 0–9 _ oder hat die falsche Länge.
400{"message":"invalid_lang", …}Ein Code in lang ist fehlerhaft (etwa english statt en).
400{"message":"unknown_lang", …}Eine Sprache in lang ist auf der Site nicht aktiv. Der Body listet die verfügbaren auf.
401{"message":"invalid_key"}Key fehlt, ist fehlerhaft oder wurde widerrufen.
404{"message":"section_not_found"}Keine Sektion mit diesem Marker auf dieser Site. Tippfehler? Anderer Site-Key?
429{"message":"rate_limit_exceeded"}Zu viele Requests in dieser Minute. Siehe Rate-Limits.

Die vollständige Liste mit Lösungen findest du auf der Seite Fehler.

Tipps aus der Praxis