Skip to main content
A ContentType defines a specific kind of content (e.g., “Article”, “BlogPost”) and specifies its layout structure through a layout component. ContentTypes follow the same versioning pattern as other resources, with draft and published status, while maintaining references to specific package versions for component stability.

Key Concepts

Content Structure

Define expected content structure through a layout component and specify which components can be used via an allow list.

Status Management

Support draft and published status with iterative development and version history.

Version Control

Independent versioning from packages with complete version history and rollback support.

Package Binding

Reference specific package versions to ensure component stability across content.

The ContentType Object

id
string
Unique identifier (UUID)
name
string
Display name of the type (e.g., “Article”)
description
string
Structured markdown description for semantic search and LLM understanding
status
string
Current status: draft, modified, published, unpublished, or deleted
version
number
Current version number (increments on publish)
lastPublishedVersion
number
Last published version number (null if never published)
layoutComponentId
string
Reference to the layout Component that defines the structure
componentIdsAllowList
array
Array of component IDs or component groups that can be used within this content type
packageVersion
string
Version of package to use for component resolution
schema
object
JSON Schema auto-generated from layout and allowed components (system-managed)
templateContentIds
string[]
Array of pre-built content example IDs
permissions
object
Access control settings
metadata
object
Additional type metadata
createdAt
string
Creation timestamp (ISO format)
updatedAt
string
Last update timestamp (ISO format)

Example ContentType

{
  "id": "ct123",
  "name": "Article",
  "description": "Standard article content type for long-form written content...",
  "status": "published",
  "version": 3,
  "lastPublishedVersion": 3,
  "layoutComponentId": "c123",
  "componentIdsAllowList": [
    "c124",
    {
      "id": "questions",
      "name": "Question Components",
      "componentIds": ["c125", "c126"]
    }
  ],
  "packageVersion": "1.0.0",
  "schema": { ... },
  "templateContentIds": ["cont123", "cont124"],
  "permissions": {
    "roles": ["editor", "journalist"],
    "users": ["[email protected]"],
    "publish": {
      "roles": ["editor"],
      "users": []
    }
  },
  "metadata": {
    "author": "[email protected]",
    "tags": ["article", "content"],
    "locales": ["en-US", "es-ES", "fr-FR"]
  },
  "createdAt": "2024-03-20T10:00:00Z",
  "updatedAt": "2024-03-20T15:00:00Z"
}

Component Allow List

The componentIdsAllowList field supports two formats:

Simple Component IDs

{
  "componentIdsAllowList": ["c124", "c125", "c126"]
}

Grouped Components

Group related components with optional display names:
{
  "componentIdsAllowList": [
    "c124",
    {
      "id": "questions",
      "name": "Question Components",
      "componentIds": ["c125", "c126"]
    },
    {
      "id": "answers",
      "name": "Answer Components",
      "componentIds": ["c127", "c128"]
    }
  ]
}
FieldTypeRequiredDescription
idstringYesUnique identifier for the group
namestringNoDisplay name for the group
componentIdsstring[]YesComponent IDs within this group
Group IDs must be unique within the content type. Component IDs can appear in multiple groups. Both formats can be mixed in the same array.

Schema Generation

ContentTypes automatically generate a comprehensive JSON Schema that:
  1. Includes complete component definitions using the oneOf pattern
  2. Provides full property schemas for each allowed component
  3. Enables LLM understanding with complete structural information
When a ContentType is saved, the system:
  1. Fetches the layout component schema
  2. Fetches schemas for all allowed components
  3. Generates a oneOf array for component options
  4. Uses the schema to validate content on creation and update

Description Best Practices

The description field follows a structured markdown format optimized for semantic search:
[Purpose and content structure summary]. [Target audience or use case].

**Content structure:**
- [Main content areas/sections]
- [Supported media types]

**Best for:**
- [Use case 1]
- [Use case 2]

**Typical length:** [Expected content volume]
**Supported platforms:** [Platform list]
Aim for 400-600 characters. Maximum is 800 characters.