Content Type

Un Content Type est le modèle (schéma) que suit un contenu. Il définit quels champs il possède et, pour chaque champ, son type, s'il est multilingue, s'il est obligatoire et quelles règles de validation s'y appliquent. Si l'on prend l'exemple d'un « produit » dans la boutique en ligne d'un magasin de vêtements, la composition des rubriques telles que le nom du produit, le prix, la description détaillée et la photo principale est régie par un unique Content Type « produit », et chaque produit réel est créé sous la forme d'un Content qui suit ce modèle.

Dans la CMA, un Content Type est une ressource enfant d'un Space, et son chemin se base sur /spaces/{spaceId}/content-types. Les opérations de gestion telles que la création, la modification et la dépublication s'effectuent dans la CMA, tandis que l'instantané publié est livré par la CDA. Toutefois, comme un Content Type est publié automatiquement lors de sa création et de sa modification, il passe immédiatement à l'état Published sans appel de publication distinct, contrairement à un Content (voir État et publication automatique ci-dessous).

Structure de la ressource

Voici la réponse à une consultation unitaire du Content Type « produit ». Outre sys (propriétés système), il possède des propriétés de corps telles que name, displayField, publishWithAuthor et fields.

{
  "sys": {
    "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA",
    "type": "ContentType",
    "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
    "publish": {
      "version": 7,
      "at": "2026-06-17T03:13:49.973Z",
      "firstAt": "2026-06-14T17:04:46.953Z",
      "counter": 4,
      "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } }
    },
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-14T17:04:46.846Z",
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedAt": "2026-06-17T03:13:49.973Z",
    "version": 8,
    "status": "Published"
  },
  "name": "Produit",
  "displayField": "productName",
  "publishWithAuthor": false,
  "fields": [
    { "id": "5n06s7ocmwdi", "name": "Nom du produit", "apiName": "productName", "type": "ShortText", "localized": true, "required": true, "validations": [], "disabled": false },
    { "id": "1gecyz8g4llwf", "name": "Prix", "apiName": "price", "type": "Long", "localized": false, "required": false, "validations": [], "disabled": false },
    { "id": "3ow4popgz54zg", "name": "Description", "apiName": "description", "type": "RichText", "localized": true, "required": false, "validations": [], "disabled": false },
    { "id": "2alxdptmdub1s", "name": "Photo", "apiName": "photo", "type": "Refer", "localized": false, "required": false, "validations": [], "disabled": false, "targetType": "Media" },
    {
      "id": "2a80lehazfx3t",
      "name": "Marque",
      "apiName": "brand",
      "type": "Refer",
      "localized": false,
      "required": false,
      "validations": [
        { "referContentType": [ { "sys": { "id": "3trmXRM3RqbgSnifyg7OveRYWnJWEG", "type": "Refer", "targetType": "ContentType" } } ] }
      ],
      "disabled": false,
      "targetType": "Content"
    }
  ]
}

Clés principales :

  • sys.id : identifiant unique du Content Type. Il s'insère dans le {contentTypeId} des chemins de consultation unitaire, de modification et de suppression.
  • name : nom du Content Type (par exemple Produit).
  • displayField : apiName du champ qui représentera chaque Content dans la liste du studio de contenu (par exemple productName).
  • publishWithAuthor : indique si les informations sur l'auteur (sys.createdBy et sys.updatedBy) sont incluses dans l'instantané de publication lors de la publication d'un Content. La valeur par défaut est false ; dans ce cas, l'instantané livré par la CDA/ACDA ne contient pas d'auteur. Cette valeur s'applique au moment de la publication et n'est pas rétroactive : même si vous la passez plus tard à true, les Content déjà publiés doivent être republiés pour que l'auteur y soit renseigné. Les brouillons que traitent les API de gestion (CMA/ACMA) possèdent sys.createdBy indépendamment de ce paramètre. Pour exposer l'auteur (byline) dans la réponse de distribution ou pour que le filtre createdBy des règles de permissions (y compris :self) soit évalué sur la CDA/ACDA, cette valeur doit être true (voir l'explication du filtre createdBy de SpaceRole et de ServiceUserRole).
  • fields : liste des champs que ce modèle définit. La structure de chaque élément est décrite ci-dessous dans Champs.

Le champ photo a pour type la valeur Refer et pour targetType la valeur Media, il pointe donc vers un fichier téléversé. Le champ brand est de type Refer + targetType: Content, et grâce au referContentType de ses validations, il restreint la référence aux seuls Content d'un Content Type précis (ici « Marque »).

Propriétés système (sys)

Tout Content Type place dans l'objet sys des propriétés système communes ainsi que des propriétés propres au Content Type. space, createdBy et updatedBy se présentent sous la forme Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).

PropriétéTypeDescription
idstringIdentifiant unique de la ressource.
typestringType de ressource. Pour un Content Type, toujours "ContentType".
spaceRefer<Space>Le Space auquel appartient ce Content Type.
createdByRefer<User>Utilisateur ayant créé la ressource.
createdAtstring (date-time)Date de création.
updatedByRefer<User>Dernier utilisateur ayant modifié la ressource.
updatedAtstring (date-time)Date de dernière modification.
versioninteger (≥1)Version de la ressource. Elle augmente de 1 à chaque changement : création, modification, publication, dépublication, etc.
statusstring (enum)État de publication. L'une des valeurs Draft, Changed, Published, Archived.
publishobjectHistorique de publication. Voir les clés ci-dessous.

Clés de l'objet publish :

CléTypeDescription
versionintegersys.version au moment de la dernière publication.
atstring (date-time)Date de la dernière publication.
firstAtstring (date-time)Date de la première publication. Conservée même après une dépublication.
counterintegerNombre cumulé de publications.
byRefer<User>Dernier utilisateur ayant publié la ressource.

Lors d'une dépublication (DELETE .../publish), les clés version, at et by sont retirées de publish, et seules firstAt et counter subsistent.

Le sys d'un Content Type ne possède pas la propriété contentType (référence à soi-même) présente dans le sys d'un Content, parce que le Content Type est lui-même le modèle. Il ne possède pas non plus de propriété archive.

Champs

fields est la liste des champs que ce Content Type définit. Chaque élément a la structure suivante (FieldDefinition).

CléTypeDescription
idstring (1 à 64)Identifiant unique du champ. Attribué automatiquement lors de la création.
namestring (1 à 50)Nom du champ affiché dans le studio de contenu (par exemple Nom du produit).
apiNamestring (1 à 64)Clé désignant ce champ dans l'API. Motif ^[a-zA-Z0-9][a-zA-Z0-9-_]*$ (commence par une lettre ou un chiffre, suivi de lettres, chiffres, - ou _).
typestring (enum)Type du champ. Voir Types de champ (type) ci-dessous.
localizedbooleanIndique si le champ peut avoir des valeurs multilingues.
requiredbooleanIndique si la saisie est obligatoire.
validationsarrayListe des règles de validation à appliquer à la valeur. Tableau vide [] s'il n'y a aucune règle. Voir Validation (validations) ci-dessous.
disabledbooleanIndique si le champ est désactivé.
targetTypestring (enum)Uniquement lorsque type vaut Refer. Indique si la cible de la référence est Content ou Media.
itemsobjectUniquement lorsque type vaut Array. Définition des éléments du tableau (élément Refer ou élément ShortText).

Types de champ (type)

type détermine la manière dont la valeur est stockée et consultée. Certains types ont un comportement de recherche différent.

typeSignificationLimite de valeurRemarque
ShortTextTexte court sur une seule ligne.64 caractèresAdapté à la recherche exacte par mot-clé.
LongTextTexte de corps long.5 120 caractèresPrend en charge la recherche par similarité en texte intégral (full-text).
RichTextCorps de texte avec mise en forme.204 800 caractèresN'est pas indexé pour la recherche ; destiné à l'expression de la mise en forme.
LongEntier.Par exemple le prix price.
NumberRéel (avec décimales).Valeurs finies uniquementL'infini et NaN ne sont pas acceptés.
BooleanVrai ou faux.
DateDate et heure.
JsonStructure JSON quelconque.5 120 caractères sérialisésLes nombres contenus dans la structure doivent eux aussi être finis.
LocationPosition (coordonnées).latitude -90 à 90, longitude -180 à 180
ReferRéférence pointant vers une autre ressource.On précise Content ou Media via targetType.
ArrayTableau contenant plusieurs valeurs.64 élémentsAccompagné de la définition des éléments via items.

Dans l'exemple « produit », Nom du produit est de type ShortText, Prix de type Long, Description de type RichText, Photo de type Refer (targetType: Media) et Marque de type Refer (targetType: Content).

Les limites de valeur sont les plafonds de la plateforme fixés par le type, et elles sont vérifiées au moment où l'on écrit une valeur dans un Content, et non lors de la création du Content Type. Même si vous indiquez un plafond plus élevé avec size dans validations, c'est le plafond de la plateforme qui s'applique en premier. Les éléments d'un Array sont soumis tels quels aux mêmes limites que leur type d'élément : dans un tableau dont items.type vaut ShortText, aucun élément ne peut donc dépasser 64 caractères. Si vous écrivez un Content avec une valeur qui dépasse la limite, l'écriture est refusée ; le code correspondant figure dans les erreurs du Content.

Validation (validations)

validations est le tableau des règles à appliquer à la valeur d'un champ. Chaque élément contient l'une des clés suivantes.

CléFormeDescription
size{ "min", "max" }Longueur minimale et maximale d'un texte ou taille d'un tableau.
uniquebooleanInterdit la duplication d'une valeur au sein d'un même Content Type.
regexp{ "pattern", "flags" }La valeur doit correspondre au motif d'expression régulière. pattern obligatoire.
prohibitRegexp{ "pattern", "flags" }Rejette la valeur si elle correspond au motif d'expression régulière. pattern obligatoire.
inarrayListe des valeurs autorisées. Seules les valeurs présentes dans la liste sont acceptées.
range{ "min", "max" }Valeur numérique minimale et maximale.
dateRange{ "min", "max", "after", "before" }Plage autorisée pour une valeur de date.
mediaMimetypeGrouparrayListe des types de fichiers autorisés pour un champ Refer (Media). Voir l'enum ci-dessous.
mediaImageDimensions{ "width", "height" }Contraintes de largeur et de hauteur en pixels d'une image.
mediaFileSize{ "min", "max" }Taille de fichier minimale et maximale (en octets).
referContentTypearrayListe des Content Type dont la référence est autorisée pour un champ Refer (Content). Chaque élément a la forme Refer<ContentType>.
messagestringMessage personnalisé à afficher en cas d'échec de la validation.

Valeurs utilisables dans mediaMimetypeGroup (12 au total) : Attachment, Plaintext, Image, Audio, Video, RichText, Presentation, Spreadsheet, PdfDocument, Archive, Code, Markup.

Le champ brand de l'exemple « produit » restreint la référence au seul Content Type « Marque » (dont le sys.id est 3trmXRM3RqbgSnifyg7OveRYWnJWEG) grâce à referContentType.

État et publication automatique

Un Content Type est publié automatiquement lors de sa création, de sa modification et de sa modification partielle. C'est en cela qu'il diffère d'un Content. Un Content n'entre dans le circuit de livraison qu'après un appel de publication distinct suivant sa création, alors que pour un Content Type la réponse à la création renvoie immédiatement status: "Published".

status prend l'une des 4 valeurs suivantes.

statusSignification
DraftRessource non publiée.
ChangedRessource déjà publiée mais dont les modifications ultérieures ne sont pas encore publiées.
PublishedRessource publiée sans modification non publiée.
ArchivedRessource archivée.

sys.version augmente de 1 à chaque changement. Comme la modification et la publication d'un Content Type se produisent en une seule fois, une seule modification fait monter version de 2 (la modification elle-même +1, la publication automatique +1). Dans l'exemple « Annonce », juste après la création version vaut 2 (création +1, publication automatique +1) et publish.counter vaut 1. Après une modification, version passe à 4 et publish.counter à 2.

Le seul moyen pour un Content Type de passer à Draft est une dépublication explicite (DELETE .../publish). Après une dépublication, status devient Draft, et dans l'objet publish les clés version, at et by disparaissent tandis que seules firstAt et counter subsistent.

Contraintes

CibleContrainte
name (Content Type)1 à 64 caractères, obligatoire.
description128 caractères maximum, facultatif.
fields1 à 80. La création, la modification et la modification partielle doivent toutes respecter cette plage.
name (champ)1 à 50 caractères, obligatoire.
apiName (champ)1 à 64 caractères, motif ^[a-zA-Z0-9][a-zA-Z0-9-_]*$, obligatoire.

Garde-fous de suppression : la suppression exige de satisfaire les deux conditions suivantes.

  • S'il existe ne serait-ce qu'un Content qui utilise ce Content Type, la suppression est impossible. Supprimez d'abord tous les Content concernés. C'est cette vérification qui s'applique en premier.
  • Un Content Type à l'état publié (Published ou Changed) ne peut pas être supprimé directement. Dépubliez-le d'abord (DELETE .../publish) pour le faire passer à Draft, puis supprimez-le (la suppression est également possible depuis l'état Archived).

Erreurs

Ce sont les codes que l'on rencontre lorsque l'on manipule un Content Type. Pour les codes communs à toutes les ressources, consultez Erreurs communes.

CodeCondition
WGL422010Une tentative de suppression d'un Content Type a eu lieu alors que des Content utilisant ce Content Type existaient encore. La dépublication est soumise à la même vérification : tant qu'il reste des Content, la dépublication est rejetée avec ce code avant même la suppression.
WGL422009Une tentative de suppression d'un Content Type à l'état publié (Published ou Changed) a eu lieu sans dépublication préalable.
WGL422006Une tentative de dépublication d'un Content Type qui n'était pas à l'état publié a eu lieu.
WGL400002Le nombre d'éléments de fields dépasse la quantité autorisée. La création, la modification et la modification partielle sont toutes soumises à cette vérification.
WGL400045La valeur inscrite dans displayField ne correspond à aucun apiName parmi les fields de ce Content Type.
WGL400046Un champ qui doit s'accompagner de l'attribut associé ne comporte pas cet attribut. Array exige items, et Refer exige targetType.
WGL400040Deux champs ou plus portent le même apiName.

API

L'URL de base de tous les endpoints ci-dessous est https://cma.weegloo.com/v1, et un jeton Bearer authentifiant la CMA est requis dans l'en-tête Authorization. La modification, la modification partielle, la publication et la dépublication doivent également envoyer l'en-tête X-Weegloo-Version (le sys.version actuel de la ressource) pour le contrôle de concurrence optimiste.