Content
Content ist ein einzelner konkreter Datensatz, der mit einem Content Type (der Vorlage) erzeugt wird. Am Beispiel eines Bekleidungs-Onlineshops: Der Content Type "Produkt" legt den Aufbau der Angaben wie Produktname, Preis und ausführliche Beschreibung fest, und "Stainless Tumbler 500ml" ist ein einzelner Content, der dieser Vorlage folgt.
Content besteht aus zwei Teilen. In fields stehen die tatsächlichen Werte der einzelnen Felder, in sys der Zustand wie Veröffentlichung, Version und Archivierung. In der CMA ist Content eine Unterressource von Space: Für Abruf und Löschen dient der Pfad /spaces/{spaceId}/contents, für Erstellung und Änderung der unter Content Type liegende Pfad /spaces/{spaceId}/content-types/{contentTypeId}/contents. Verwaltungsvorgänge werden in der CMA ausgeführt, und der veröffentlichte Snapshot wird über die CDA ausgeliefert.
Ressourcenstruktur
Im Folgenden steht die Antwort eines Einzelabrufs des veröffentlichten Content "Stainless Tumbler 500ml". Neben sys (Systemattribute) enthält er fields (Feldwerte) und metadata (Zusatzinformationen wie Tags).
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP",
"type": "Content",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
"publish": {
"version": 1,
"at": "2026-06-18T09:51:44.128Z",
"firstAt": "2026-06-18T09:51:44.128Z",
"counter": 1,
"by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } }
},
"createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"createdAt": "2026-06-18T09:51:14.597Z",
"updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
"updatedAt": "2026-06-18T09:51:44.128Z",
"version": 2,
"status": "Published"
},
"fields": {
"price": { "en-US": 18000 },
"productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
},
"metadata": { "tags": [] }
}Wichtige Schlüssel:
sys.id: Eindeutige Kennung des Content. Sie wird im{contentId}der Pfade für Einzelabruf, Änderung, Löschung und Veröffentlichung eingesetzt.sys.contentType: EinRefer, der auf den Content Type verweist, dem dieser Content folgt.fields: Die Werte der einzelnen Felder. Der Schlüssel ist derapiNamedes Felds, der Wert ist eine Zuordnung je Locale. Erläutert unter Der Feldschlüssel ist der apiName.metadata.tags: Liste der Tag, die an diesen Content gehängt sind. Jeder Eintrag hat die FormRefer<Tag>; sind keine Tags vergeben, ist es ein leeres Array[].
Der Feldschlüssel ist der apiName
Der Schlüssel des fields-Objekts ist der apiName des jeweiligen Felds. Es ist nicht die interne id des Content Type und nicht der im Content-Studio angezeigte Feldname (z. B. Produktname). Beim Erstellen oder Lesen eines Content muss daher der im Content Type definierte apiName als Schlüssel verwendet werden.
Die Felder des Demo-Content Type "Produkt" und ihre apiName-Zuordnung sind wie folgt.
| Content-Studio-Name | apiName | type | localized | required |
|---|---|---|---|---|
| Produktname | productName | ShortText | true | true |
| Preis | price | Long | false | false |
| Beschreibung | description | RichText | true | false |
| Foto | photo | Refer<Media> | false | false |
| Marke | brand | Refer | false | false |
Jeder Feldwert ist eine Zuordnung je Locale. Die Form des Werts hängt von localized ab.
- Ein Feld mit
localized: truekann in der Form{ "<locale>": Wert }Werte für mehrere Locales enthalten. Beispiel:"productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }. - Ein Feld mit
localized: false(nicht lokalisiertes Feld) erhält nur einen Wert unter dem Schlüssel der Standard-Locale des Space. Andere Locale-Schlüssel sind nicht zulässig. Da die Standard-Locale des Demo-Spaceen-USist, hat der Preis nur den einen Schlüsselen-US, etwa"price": { "en-US": 18000 }.
Welche Locale die Standard-Locale ist, bis zu welcher Locale ein required-Feld ausgefüllt werden muss und welche Fallback-Regeln gelten, wenn kein Wert vorhanden ist, wird unter Mehrsprachigkeit (Konzept) behandelt.
Wertform je Typ
Die Form des Werts innerhalb eines Locale-Schlüssels richtet sich nach dem type des Felds. Die meisten Typen nehmen den Wert dieses Typs unverändert auf (Texttypen einen String, Number und Long eine Zahl, Boolean true/false). Die Typen, deren Form ein Objekt oder ein Array ist und die deshalb leicht zu Verwechslungen führen, sind die folgenden.
Location: ein Objekt der Form{ "latitude": <Zahl>, "longitude": <Zahl> }.latitudeliegt zwischen -90 und 90,longitudezwischen -180 und 180; beide Schlüssel sind erforderlich. Außer den definierten Schlüsseln werden keine weiteren akzeptiert, weshalb verkürzte Schlüssel wielat,lngoderlonzurückgewiesen werden.Refer: einRefer-Objekt, das auf das Ziel verweist; es wird nicht nur ein id-String, sondern dassys-Objekt unverändert eingesetzt. Verweist es auf einen anderen Content, isttargetTypegleichContent, verweist es auf ein Media, gleichMedia. DieRefer-Form selbst wird unter Die Refer-Form bei den Systemattributen (sys) definiert.Array: ein JSON-Array, das Werte des Elementtyps enthält. Sind die Elemente Text, ist es ein Array von Strings; sind die ElementeRefer(Content oder Media), ist es ein Array vonRefer-Objekten. Es ist kein Array von id-Strings.
Im Folgenden stehen Beispiele für die Werte innerhalb von fields (wenn die Standard-Locale des Space en-US ist).
{
"location": { "en-US": { "latitude": 37.5662, "longitude": 126.9910 } },
"tags": { "en-US": ["Neuheit", "Limitierte Auflage"] },
"photo": { "en-US": { "sys": { "type": "Refer", "id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP", "targetType": "Media" } } },
"photos": { "en-US": [ { "sys": { "type": "Refer", "id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP", "targetType": "Media" } } ] }
}Systemattribute (sys)
Jeder Content führt die gemeinsamen Systemattribute im sys-Objekt. space, contentType, createdBy und updatedBy haben die Refer-Form ({ "sys": { "id", "type": "Refer", "targetType" } }).
| Attribut | Typ | Beschreibung |
|---|---|---|
id | string | Eindeutige Kennung der Ressource. |
type | string | Ressourcenart. Bei Content immer "Content". |
space | Refer<Space> | Der Space, zu dem dieser Content gehört. |
contentType | Refer<ContentType> | Der Content Type, dem dieser Content folgt. |
publish | object | Zeiger auf den Veröffentlichungszustand. Siehe die Schlüssel unten. |
archive | object | Archivierungsinformationen. Existiert nur im archivierten Zustand, andernfalls fehlt der Schlüssel. Siehe die Schlüssel unten. |
createdBy | Refer<User> | Erstellende Person. |
createdAt | string (date-time) | Erstellungszeitpunkt. |
updatedBy | Refer<User> | Zuletzt ändernde Person. |
updatedAt | string (date-time) | Zeitpunkt der letzten Änderung. |
version | integer (≥1) | Ressourcenversion. Erhöht sich bei jeder Änderung wie Erstellung, Änderung, Veröffentlichung, Zurückziehen oder Archivierung um 1. |
status | string (enum) | Veröffentlichungszustand. Einer der vier Werte unten. |
status ist einer der folgenden vier Werte.
status | Bedeutung |
|---|---|
Draft | In Bearbeitung und noch nicht veröffentlicht. |
Changed | Wurde bereits veröffentlicht, danach aber geändert, sodass noch nicht veröffentlichte Änderungen vorliegen. |
Published | Veröffentlicht und ohne nicht veröffentlichte Änderungen. |
Archived | Archiviert. |
Das publish-Objekt ist ein Zeiger auf den Veröffentlichungszustand. Im veröffentlichten Zustand enthält es alle folgenden Schlüssel.
| Schlüssel | Typ | Beschreibung |
|---|---|---|
version | integer | Die sys.version zum Zeitpunkt der Veröffentlichung. |
at | string (date-time) | Zeitpunkt der letzten Veröffentlichung. |
firstAt | string (date-time) | Zeitpunkt der ersten Veröffentlichung. Bleibt auch beim Zurückziehen erhalten. |
counter | integer | Kumulierte Anzahl der Veröffentlichungen. |
by | Refer<User> | Zuletzt veröffentlichende Person. |
Beim Zurückziehen entfallen aus publish die Schlüssel version, at und by, und es bleiben nur firstAt und counter. Wurde noch nie veröffentlicht, ist publish gleich { "counter": 0 }.
Das archive-Objekt existiert nur im archivierten Zustand. Im archivierten Zustand enthält es version (die sys.version zum Zeitpunkt der Archivierung), at (Archivierungszeitpunkt) und by (archivierende Person); ist die Ressource nicht archiviert, fehlt der Schlüssel archive vollständig.
Die sys.version und alle Zeitwerte im folgenden Beispiel sind die Werte zum tatsächlichen Aufrufzeitpunkt und unterscheiden sich von Aufruf zu Aufruf.
Veröffentlichung, Version und Nebenläufigkeit
Der Lebenszyklus eines Content ist wie folgt.
- Beim Erstellen ist
statusgleichDraft.Contentwird beim Erstellen nicht automatisch veröffentlicht. Darin unterscheidet er sich vom Content Type. Ein Content Type wird mit der Erstellung automatisch veröffentlicht, ein Content gelangt jedoch erst durch einen separaten Veröffentlichungsaufruf in den Auslieferungsweg. - Beim Veröffentlichen wird
statuszuPublished. - Wird nach der Veröffentlichung geändert, wird
statuszuChanged. Das bedeutet, dass nicht veröffentlichte Änderungen vorliegen. - Beim Zurückziehen wird
statuswieder zuDraft. - Zum Archivieren muss zuerst zurückgezogen werden. Ein veröffentlichter Content kann nicht direkt archiviert werden.
sys.version erhöht sich bei jeder Änderung um 1.
Bei Anfragen zum Ändern, Teiländern, Veröffentlichen, Zurückziehen, Archivieren und Dearchivieren muss die aktuelle sys.version im Header x-weegloo-version mitgesendet werden. Fehlt dieser Wert oder weicht er von der aktuellen Version ab, wird dies als Konflikt durch gleichzeitige Änderung gewertet und die Anfrage abgelehnt. Anfragen zum Erstellen und Löschen haben diesen Header nicht. Zustandsübergänge wie Veröffentlichen, Zurückziehen, Archivieren und Dearchivieren haben keinen eigenen Anfragetext.
Wertgrenzen
Für Feldwerte gilt neben den im Content Type hinterlegten validations auch eine vom Typ festgelegte Plattformobergrenze. Die Obergrenzen je Typ finden Sie in der Tabelle Feldarten des Content Type.
Diese Obergrenze wird beim Schreiben eines Wertes in einen Content geprüft und beim Veröffentlichen ein weiteres Mal. Für size in validations lässt sich kein Wert über dieser Obergrenze eintragen. Ein Content Type mit einem solchen Eintrag wird beim Speichern abgelehnt (siehe Fehler bei Content Type). Daher wird ein ShortText-Wert unabhängig von size ab 65 Zeichen abgelehnt.
Zusätzlich zu den Obergrenzen je Typ gilt für die Textwerte eines Content insgesamt eine Obergrenze für ihre Summe. Die über alle Felder und alle Locale addierten Wertlängen der Felder vom Typ ShortText, LongText und RichText dürfen zusammen 102.400 Zeichen nicht überschreiten. Füllen Sie zum Beispiel ein einziges RichText-Feld in fünf Locale mit jeweils 20.480 Zeichen, erreicht die Summe allein dadurch 102.400 Zeichen. Die Werte von Json- und Array-Feldern fließen nicht in diese Summe ein. Diese Summe wird beim Erstellen, Ändern und Teiländern geprüft. Beim Teiländern wird die Summe über das gesamte Ergebnis nach der Änderung berechnet, einschließlich der Felder, die nicht geändert wurden.
Die validations werden je nach Eintrag zu unterschiedlichen Zeitpunkten geprüft. unique, mediaMimetypeGroup, mediaImageDimensions, mediaFileSize und referContentType werden nur beim Veröffentlichen geprüft. Die übrigen Einträge sowie die Typ- und Plattformobergrenzen werden sowohl beim Schreiben als auch beim Veröffentlichen geprüft. Ein Wert, der das Schreiben bestanden hat, kann daher beim Veröffentlichen abgelehnt werden.
Location und Refer akzeptieren nur die definierten Schlüssel. Ein abgekürzter Schlüssel wie lat oder ein fremder Schlüssel unterhalb von sys führt zur Ablehnung.
Fehler
Dies sind die Codes aus der Validierung der Feldwerte. Codes aus Veröffentlichung, Version und Zustandsübergängen sind in dieser Tabelle noch nicht erfasst. Codes, die allen Ressourcen gemeinsam sind, finden Sie unter Gemeinsame Fehler.
| Code | Bedingung |
|---|---|
WGL400006 | Einer der Feldwerte, Feldschlüssel oder Locale im Anfragetext verstößt gegen die Regeln. Diesen Code erhalten Sie, wenn ein Wert den Typ oder die Plattformobergrenze überschreitet, wenn ein Feldschlüssel gesendet wird, der im Content Type nicht definiert ist, wenn der Wert eines required-Feldes fehlt oder wenn ein Locale-Schlüssel verwendet wird, den der Space nicht kennt. Die beanstandeten Einträge stehen zusammen mit dem Feldpfad in details.errors der Antwort. Erstellen, Ändern, Teiländern und Veröffentlichen unterliegen alle dieser Prüfung, wobei die Veröffentlichung einen größeren Umfang prüft. Auch wenn beim Erstellen, Ändern oder Teiländern die Summe der Textwerte die Obergrenze überschreitet, erhalten Sie diesen Code. In diesem Fall verweist der Eintrag in details.errors nicht auf ein einzelnes Feld, sondern auf den gesamten Content, weshalb path gleich / ist und property die tatsächliche Summe enthält. |
API
Die Basis-URL aller folgenden Endpunkte ist https://cma.weegloo.com/v1, und im Header Authorization ist ein Bearer-Token erforderlich, das sich gegenüber der CMA authentifiziert. Beim Ändern, Teiländern, Veröffentlichen, Zurückziehen, Archivieren und Dearchivieren muss zur optimistischen Nebenläufigkeitskontrolle zusätzlich der Header X-Weegloo-Version (die aktuelle sys.version der Ressource) gesendet werden.
Wenn Sie die flache Liste (GET /spaces/{spaceId}/contents) nach fields.* filtern oder sortieren, müssen Sie sie zusätzlich mit sys.contentType.sys.id={contentTypeId} auf einen Content Type eingrenzen. Ein bloßes contentType={contentTypeId} ersetzt dies nicht. Der Pfad je Content Type (/content-types/{contentTypeId}/contents) trägt ihn bereits, sodass er dort nicht nötig ist.
Verwandte Dokumente
- Content Type: Die Vorlage dieses Content (Felddefinition, apiName).
- CDA Content: Auslieferung des veröffentlichten Content an Besucher (Lesen).
- Tag: Klassifizierungslabel, das an metadata.tags gehängt wird.
- Mehrsprachigkeit (Konzept): Standard-Locale, Pflichtfüllung, Fallback.
