Content Type

Content Type es la plantilla (esquema) que sigue el contenido. Define qué campos tiene y, para cada campo, su tipo, si admite varios idiomas, si es obligatorio y qué reglas de validación aplica. Si tomamos el "producto" de una tienda de ropa como ejemplo, un único Content Type "producto" regula la composición de elementos como el nombre del producto, el precio, la descripción detallada y la foto principal, y cada producto concreto se crea como un Content que sigue esta plantilla.

En CMA, Content Type es un recurso secundario de Space y su ruta se basa en /spaces/{spaceId}/content-types. Las operaciones de gestión como crear, modificar o anular la publicación se realizan en CMA, y la instantánea publicada se entrega a través de CDA. Sin embargo, Content Type se publica automáticamente al crearse o modificarse, por lo que, a diferencia de Content, pasa de inmediato al estado Published sin una llamada de publicación aparte (consulta Estado y publicación automática más abajo).

Estructura del recurso

A continuación se muestra la respuesta de consulta individual del Content Type "producto". Junto con sys (propiedades del sistema), incluye propiedades del cuerpo como name, displayField, publishWithAuthor y 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": "Producto",
  "displayField": "productName",
  "publishWithAuthor": false,
  "fields": [
    { "id": "5n06s7ocmwdi", "name": "Nombre del producto", "apiName": "productName", "type": "ShortText", "localized": true, "required": true, "validations": [], "disabled": false },
    { "id": "1gecyz8g4llwf", "name": "Precio", "apiName": "price", "type": "Long", "localized": false, "required": false, "validations": [], "disabled": false },
    { "id": "3ow4popgz54zg", "name": "Descripción", "apiName": "description", "type": "RichText", "localized": true, "required": false, "validations": [], "disabled": false },
    { "id": "2alxdptmdub1s", "name": "Foto", "apiName": "photo", "type": "Refer", "localized": false, "required": false, "validations": [], "disabled": false, "targetType": "Media" },
    {
      "id": "2a80lehazfx3t",
      "name": "Marca",
      "apiName": "brand",
      "type": "Refer",
      "localized": false,
      "required": false,
      "validations": [
        { "referContentType": [ { "sys": { "id": "3trmXRM3RqbgSnifyg7OveRYWnJWEG", "type": "Refer", "targetType": "ContentType" } } ] }
      ],
      "disabled": false,
      "targetType": "Content"
    }
  ]
}

Claves principales:

  • sys.id: identificador único del Content Type. Va en {contentTypeId} de las rutas de consulta individual, modificación y eliminación.
  • name: nombre del Content Type (por ejemplo, Producto).
  • displayField: apiName del campo que representa cada Content en la lista del estudio de contenidos (por ejemplo, productName).
  • publishWithAuthor: indica si, al publicar el Content, la instantánea de publicación incluye también la información del autor (sys.createdBy y sys.updatedBy). El valor por defecto es false, en cuyo caso la instantánea que se entrega a CDA/ACDA no incluye el autor. Este valor se aplica en el momento de la publicación y no es retroactivo, por lo que, aunque más adelante lo cambies a true, los Content ya publicados deben publicarse de nuevo para que se rellene el autor. Los borradores que gestionan las API de gestión (CMA/ACMA) tienen sys.createdBy con independencia de esta opción. Para exponer el autor (byline) en la respuesta de entrega o para evaluar en CDA/ACDA el filtro createdBy (incluido :self) de las reglas de permisos, hay que dejar este valor en true (consulta la descripción del filtro createdBy de SpaceRole y ServiceUserRole).
  • fields: lista de campos que define esta plantilla. La estructura de cada elemento se describe en Campos más abajo.

El campo photo tiene type Refer y targetType Media, por lo que apunta a un archivo subido. El campo brand es Refer + targetType: Content y, mediante referContentType en validations, limita la referencia únicamente a los Content de un Content Type concreto (aquí, "Marca").

Propiedades del sistema (sys)

Todos los Content Type incluyen en el objeto sys las propiedades de sistema comunes y las propiedades propias de Content Type. space, createdBy y updatedBy van con forma Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).

PropiedadTipoDescripción
idstringIdentificador único del recurso.
typestringClase de recurso. Para Content Type siempre es "ContentType".
spaceRefer<Space>El Space al que pertenece este Content Type.
createdByRefer<User>Usuario que lo creó.
createdAtstring (date-time)Momento de creación.
updatedByRefer<User>Último usuario que lo modificó.
updatedAtstring (date-time)Momento de la última modificación.
versioninteger (≥1)Versión del recurso. Aumenta en 1 con cada cambio: creación, modificación, publicación, anulación de publicación, etc.
statusstring (enum)Estado de publicación. Uno de Draft, Changed, Published, Archived.
publishobjectHistorial de publicación. Consulta las claves más abajo.

Claves del objeto publish:

ClaveTipoDescripción
versionintegersys.version en el momento de la última publicación.
atstring (date-time)Momento de la última publicación.
firstAtstring (date-time)Momento de la primera publicación. Se conserva aunque se anule la publicación.
counterintegerNúmero acumulado de publicaciones.
byRefer<User>Último usuario que publicó.

Al anular la publicación (DELETE .../publish), se eliminan version, at y by de publish y solo quedan firstAt y counter.

El sys de Content Type no tiene la propiedad contentType (autorreferencia) que sí está en el sys de Content, porque el propio Content Type es la plantilla. Tampoco tiene la propiedad archive.

Campos

fields es la lista de campos que define este Content Type. Cada elemento tiene la siguiente estructura (FieldDefinition).

ClaveTipoDescripción
idstring (1-64)Identificador único del campo. Se asigna automáticamente al crearlo.
namestring (1-50)Nombre del campo que se muestra en el estudio de contenidos (por ejemplo, Nombre del producto).
apiNamestring (1-64)Clave que identifica este campo en la API. Patrón ^[a-zA-Z0-9][a-zA-Z0-9-_]*$ (empieza por letra o número, seguido de letras, números, - o _).
typestring (enum)Tipo del campo. Consulta Tipos de campo (type) más abajo.
localizedbooleanIndica si puede tener valores en varios idiomas.
requiredbooleanIndica si la entrada es obligatoria.
validationsarrayLista de reglas de validación que se aplican al valor. Si no hay reglas, es un array vacío []. Consulta Validaciones (validations) más abajo.
disabledbooleanIndica si está deshabilitado.
targetTypestring (enum)Solo cuando type es Refer. Indica si el destino de la referencia es Content o Media.
itemsobjectSolo cuando type es Array. Definición del elemento del array (elemento Refer o elemento ShortText).

Tipos de campo (type)

type determina cómo se almacena y consulta el valor. Algunos tipos tienen un comportamiento de búsqueda distinto.

typeSignificadoLímite de valorNotas
ShortTextTexto corto de una sola línea.64 caracteresAdecuado para consultas exactas por palabra clave.
LongTextTexto de cuerpo largo.5.120 caracteresAdmite búsqueda de similitud de texto completo (full-text).
RichTextCuerpo con formato.204.800 caracteresNo es objeto de búsqueda; sirve para representar formato.
LongNúmero entero.Por ejemplo, el precio price.
NumberNúmero real (con decimales).Solo valores finitosNo admite infinito ni NaN.
BooleanVerdadero/falso.
DateFecha y hora.
JsonEstructura JSON arbitraria.5.120 caracteres serializadosLos números dentro de la estructura también deben ser finitos.
LocationUbicación (coordenadas).latitude de -90 a 90, longitude de -180 a 180
ReferReferencia que apunta a otro recurso.Con targetType se indica Content o Media.
ArrayArray que contiene varios valores.64 elementosAcompañado de items con la definición del elemento.

En el ejemplo "producto", Nombre del producto es ShortText, Precio es Long, Descripción es RichText, Foto es Refer (targetType: Media) y Marca es Refer (targetType: Content).

El límite de valor es el tope de plataforma que fija el tipo, y no se comprueba al crear el Content Type, sino al escribir el valor en un Content. Aunque indiques un tope mayor con size en validations, se aplica antes el tope de plataforma. A los elementos de un Array se les aplica igualmente el límite del tipo del elemento, así que en un array cuyo items.type es ShortText ningún elemento puede superar los 64 caracteres. Si escribes en un Content un valor que supera el límite, la petición se rechaza, y el código está en Errores de Content.

Validaciones (validations)

validations es el array de reglas que se aplican al valor del campo. Cada elemento contiene una de las siguientes claves.

ClaveFormaDescripción
size{ "min", "max" }Longitud mínima y máxima del texto o tamaño del array.
uniquebooleanProhíbe valores duplicados dentro del mismo Content Type.
regexp{ "pattern", "flags" }El valor debe coincidir con el patrón de expresión regular. pattern es obligatorio.
prohibitRegexp{ "pattern", "flags" }Rechaza el valor si coincide con el patrón de expresión regular. pattern es obligatorio.
inarrayLista de valores permitidos. Solo pasan los valores incluidos en la lista.
range{ "min", "max" }Mínimo y máximo del valor numérico.
dateRange{ "min", "max", "after", "before" }Rango permitido del valor de fecha.
mediaMimetypeGrouparrayLista de tipos de archivo permitidos en un campo Refer (Media). Consulta el enum más abajo.
mediaImageDimensions{ "width", "height" }Restricción en píxeles del ancho y alto de la imagen.
mediaFileSize{ "min", "max" }Mínimo y máximo del tamaño del archivo (en bytes).
referContentTypearrayLista de Content Type a los que se permite referenciar en un campo Refer (Content). Cada elemento tiene forma Refer<ContentType>.
messagestringMensaje personalizado que se muestra cuando falla la validación.

Valores admitidos en mediaMimetypeGroup (12 tipos): Attachment, Plaintext, Image, Audio, Video, RichText, Presentation, Spreadsheet, PdfDocument, Archive, Code, Markup.

El campo brand del ejemplo "producto" limita, mediante referContentType, la referencia únicamente al Content Type "Marca" (cuyo sys.id es 3trmXRM3RqbgSnifyg7OveRYWnJWEG).

Estado y publicación automática

Content Type se publica automáticamente al crearse, modificarse o modificarse parcialmente. En esto se diferencia de Content. Content solo entra en la ruta de entrega cuando hay una llamada de publicación aparte tras crearlo, pero la respuesta de creación de Content Type devuelve directamente status: "Published".

status es uno de los siguientes 4 valores.

statusSignificado
DraftEstado sin publicar.
ChangedEstado en el que se publicó alguna vez, pero los cambios posteriores aún no se han publicado.
PublishedEstado en el que está publicado y no hay cambios sin publicar.
ArchivedEstado archivado.

sys.version aumenta en 1 con cada cambio. Como en Content Type la modificación y la publicación ocurren a la vez, una sola modificación sube version en 2 (la propia modificación +1, la publicación automática +1). En el ejemplo "Aviso", justo después de la creación version es 2 (creación +1, publicación automática +1) y publish.counter es 1. Si a continuación se modifica, version pasa a 4 y publish.counter pasa a 2.

La única vía por la que un Content Type pasa a Draft es la anulación de publicación explícita (DELETE .../publish). Al anular la publicación, status pasa a Draft y en el objeto publish se quitan version, at y by, quedando solo firstAt y counter.

Restricciones

ObjetoRestricción
name (Content Type)1-64 caracteres, obligatorio.
description128 caracteres o menos, opcional.
fieldsDe 1 a 80. La creación, la modificación y la modificación parcial deben respetar este rango.
name (campo)1-50 caracteres, obligatorio.
apiName (campo)1-64 caracteres, patrón ^[a-zA-Z0-9][a-zA-Z0-9-_]*$, obligatorio.

Protección de eliminación: la eliminación debe cumplir ambas condiciones.

  • No se puede eliminar si existe al menos un Content que use este Content Type. Elimina primero todos esos Content. Esta comprobación se aplica en primer lugar.
  • Un Content Type en estado de publicación (Published, Changed) no se puede eliminar directamente. Anula primero la publicación (DELETE .../publish) para dejarlo en Draft y luego elimínalo (el estado Archived también permite eliminar).

Errores

Códigos que se encuentran al trabajar con Content Type. Para los códigos comunes a todos los recursos, consulta Errores comunes.

CódigoCondición
WGL422010La petición intenta eliminar un Content Type mientras todavía queda algún Content que usa ese Content Type. La anulación de la publicación pasa por la misma comprobación, así que, si aún quedan Content, ya la anulación de la publicación se rechaza con este código.
WGL422009La petición intenta eliminar un Content Type en estado de publicación (Published, Changed) sin anular antes su publicación.
WGL422006La petición intenta anular la publicación de un Content Type que no está en estado de publicación.
WGL400002El número de elementos de fields supera la cantidad permitida. La creación, la modificación y la modificación parcial pasan por esta comprobación.
WGL400045El valor indicado en displayField no coincide con ningún apiName de los fields de ese Content Type.
WGL400046Un campo no incluye la propiedad que debe acompañarlo. Array necesita items y Refer necesita targetType.
WGL400040Hay dos o más campos con el mismo apiName.

API

La URL base de todos los endpoints siguientes es https://cma.weegloo.com/v1 y se requiere en la cabecera Authorization un token Bearer que autentique en CMA. La modificación, la modificación parcial, la publicación y la anulación de publicación deben enviar también la cabecera X-Weegloo-Version (el sys.version actual del recurso) para el control de concurrencia optimista.