Content Type
Dernière mise à jour : 3 juillet 2026
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 exempleProduit).displayField:apiNamedu champ qui représentera chaque Content dans la liste du studio de contenu (par exempleproductName).publishWithAuthor: indique si les informations sur l'auteur doivent être incluses lors de la publication d'un Content. La valeur par défaut estfalse.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é | Type | Description |
|---|---|---|
id | string | Identifiant unique de la ressource. |
type | string | Type de ressource. Pour un Content Type, toujours "ContentType". |
space | Refer<Space> | Le Space auquel appartient ce Content Type. |
createdBy | Refer<User> | Utilisateur ayant créé la ressource. |
createdAt | string (date-time) | Date de création. |
updatedBy | Refer<User> | Dernier utilisateur ayant modifié la ressource. |
updatedAt | string (date-time) | Date de dernière modification. |
version | integer (≥1) | Version de la ressource. Elle augmente de 1 à chaque changement : création, modification, publication, dépublication, etc. |
status | string (enum) | État de publication. L'une des valeurs Draft, Changed, Published, Archived. |
publish | object | Historique de publication. Voir les clés ci-dessous. |
Clés de l'objet publish :
| Clé | Type | Description |
|---|---|---|
version | integer | sys.version au moment de la dernière publication. |
at | string (date-time) | Date de la dernière publication. |
firstAt | string (date-time) | Date de la première publication. Conservée même après une dépublication. |
counter | integer | Nombre cumulé de publications. |
by | Refer<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é | Type | Description |
|---|---|---|
id | string (1 à 64) | Identifiant unique du champ. Attribué automatiquement lors de la création. |
name | string (1 à 50) | Nom du champ affiché dans le studio de contenu (par exemple Nom du produit). |
apiName | string (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 _). |
type | string (enum) | Type du champ. Voir Types de champ (type) ci-dessous. |
localized | boolean | Indique si le champ peut avoir des valeurs multilingues. |
required | boolean | Indique si la saisie est obligatoire. |
validations | array | Liste des règles de validation à appliquer à la valeur. Tableau vide [] s'il n'y a aucune règle. Voir Validation (validations) ci-dessous. |
disabled | boolean | Indique si le champ est désactivé. |
targetType | string (enum) | Uniquement lorsque type vaut Refer. Indique si la cible de la référence est Content ou Media. |
items | object | Uniquement 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.
type | Signification | Remarque |
|---|---|---|
ShortText | Texte court sur une seule ligne. | Adapté à la recherche exacte par mot-clé. |
LongText | Texte de corps long. | Prend en charge la recherche par similarité en texte intégral (full-text). |
RichText | Corps de texte avec mise en forme. | N'est pas indexé pour la recherche ; destiné à l'expression de la mise en forme. |
Long | Entier. | Par exemple le prix price. |
Number | Réel (avec décimales). | |
Boolean | Vrai ou faux. | |
Date | Date et heure. | |
Json | Structure JSON quelconque. | |
Location | Position (coordonnées). | |
Refer | Référence pointant vers une autre ressource. | On précise Content ou Media via targetType. |
Array | Tableau contenant plusieurs valeurs. | Accompagné 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).
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é | Forme | Description |
|---|---|---|
size | { "min", "max" } | Longueur minimale et maximale d'un texte ou taille d'un tableau. |
unique | boolean | Interdit 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. |
in | array | Liste 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. |
mediaMimetypeGroup | array | Liste 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). |
referContentType | array | Liste des Content Type dont la référence est autorisée pour un champ Refer (Content). Chaque élément a la forme Refer<ContentType>. |
message | string | Message 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.
status | Signification |
|---|---|
Draft | Ressource non publiée. |
Changed | Ressource déjà publiée mais dont les modifications ultérieures ne sont pas encore publiées. |
Published | Ressource publiée sans modification non publiée. |
Archived | Ressource 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
| Cible | Contrainte |
|---|---|
name (Content Type) | 1 à 64 caractères, obligatoire. |
description | 128 caractères maximum, facultatif. |
fields | 1 à 80 à la création, au moins 1 lors d'une modification. |
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 (
WGL422010). Supprimez d'abord tous les Content concernés. C'est cette vérification qui s'applique en premier. - Un Content Type à l'état publié (
PublishedouChanged) ne peut pas être supprimé directement (WGL422009). Dépubliez-le d'abord (DELETE .../publish) pour le faire passer àDraft, puis supprimez-le (la suppression est également possible depuis l'étatArchived).
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.
Documents liés
- Modélisation de Content : comment créer un Content Type dans le studio de contenu.
- État et publication : la signification de la publication et des versions.
