Content Types Builder
The Content Types Builder lets you define custom content schemas visually. Create structured content types for any domain—products, recipes, articles, documentation—with full control over fields, validation, and AI indexing.
Accessing Content Types
- Navigate to your site in the Fig1 dashboard
- Click CMS in the left sidebar
- Select the Types tab
Interface Overview
The Content Types interface shows:
- Types List - All your content types with status
- Create Button - Add new content type
- Type Editor - Configure fields and settings
Creating a Content Type
Step 1: Basic Information
- Click Create Content Type
- Enter the basic details:
| Field | Description | Example | |-------|-------------|---------| | Name | Display name | "Blog Post" | | Slug | URL identifier (auto-generated) | "blog-post" | | Plural Name | Plural form | "Blog Posts" | | Description | Help text for editors | "Articles for the company blog" | | Icon | Visual identifier | Article icon |
Step 2: Built-in Fields
Toggle which standard fields to include:
| Field | Description | Default | |-------|-------------|---------| | Title | Content title | ✓ On | | Slug | URL-friendly identifier | ✓ On | | Content | Rich text body | ✓ On | | Excerpt | Short summary | Off | | Featured Image | Hero image | Off | | Author | Content author | Off | | Published At | Publication date | ✓ On |
Step 3: Custom Fields
Add fields specific to your content type. Click Add Field and configure:
- Field Type - Select from 16 available types
- Name - camelCase identifier (e.g.,
readingTime) - Label - Display label (e.g., "Reading Time")
- Description - Help text for editors
- Validation - Rules like required, min/max
- Default Value - Pre-filled value
Step 4: AI Configuration
Configure how AI interacts with this content type:
| Setting | Description | |---------|-------------| | Indexed | Include in AI knowledge base | | Summarize | Auto-generate summaries | | Extract Keywords | Auto-extract keywords | | Instruction Template | Context for AI responses |
Step 5: Save
Click Save Content Type to create. The type is now available in the Content Manager.
Field Types Reference
Text Fields
Text
Single-line text input.
Validation: minLength, maxLength, pattern (regex)
Example: Product SKU, Short title
Textarea
Multi-line text with optional rich text.
Validation: minLength, maxLength
Example: Description, Body content
URL
URL input with validation.
Validation: Must be valid URL
Example: Website, External link
Email address input.
Validation: Must be valid email
Example: Contact email, Author email
Numeric Fields
Number
Numeric value input.
Validation: min, max
Example: Price, Quantity, Duration
Boolean Fields
Boolean
True/false toggle switch.
Default: true or false
Example: Featured, In Stock, Published
Date Fields
Date
Date picker (no time).
Validation: minDate, maxDate
Example: Event date, Birthday
Datetime
Date and time picker.
Validation: minDate, maxDate
Example: Event start, Deadline
Selection Fields
Select
Single selection dropdown.
Options: Array of string values
Example: Category, Status, Difficulty
Configuration:
- Add Options in validation
- Enter each option value
- User selects one option
Multiselect
Multiple selection chips.
Options: Array of string values
Validation: min, max selections
Example: Tags, Categories, Features
Media Fields
Media
Image or video picker from Media Library.
Validation: accept (MIME types)
Example: Hero image, Gallery images
Opens Media Library picker when clicked.
File
Document or file attachment.
Validation: accept (MIME types), maxSize
Example: PDF download, Attachment
Reference Fields
Reference
Link to one content item.
Validation: contentType (target type slug)
Example: Author profile, Related product
Opens content picker filtered by type.
References
Link to multiple content items.
Validation: contentType, min, max
Example: Related posts, Product variants
Advanced Fields
JSON
Raw JSON data editor.
Example: Configuration, Metadata, Structured data
Shows code editor for JSON input.
Color
Color picker with hex output.
Example: Brand color, Theme color
Shows color picker UI.
Location
Latitude/longitude coordinates.
Example: Store location, Event venue
Shows map picker or coordinate inputs.
Field Configuration
Validation Rules
| Rule | Applies To | Description |
|------|------------|-------------|
| required | All | Field must have a value |
| minLength | Text, Textarea | Minimum character count |
| maxLength | Text, Textarea | Maximum character count |
| pattern | Text, URL | Regex pattern to match |
| min | Number | Minimum value |
| max | Number | Maximum value |
| minDate | Date, Datetime | Earliest allowed date |
| maxDate | Date, Datetime | Latest allowed date |
| options | Select, Multiselect | Available choices |
| accept | Media, File | Allowed MIME types |
| maxSize | File | Maximum file size in bytes |
| contentType | Reference(s) | Target content type slug |
Display Options
| Option | Description | |--------|-------------| | Show in List | Display in content list table | | Searchable | Include in search index | | Sortable | Allow sorting by this field | | Order | Display order in form |
AI Options
| Option | Description | |--------|-------------| | AI Indexed | Include field in AI knowledge base | | Weight | Relevance weight for search |
Set AI Indexed: false on fields that shouldn't influence AI responses (e.g., internal notes).
Example: Blog Post Type
Name: Blog Post
Slug: blog-post
Plural: Blog Posts
Built-in Fields:
✓ Title
✓ Slug
✓ Content
✓ Excerpt
✓ Featured Image
✓ Published At
Custom Fields:
┌────────────────┬────────────┬─────────────────────────┐
│ Name │ Type │ Validation │
├────────────────┼────────────┼─────────────────────────┤
│ subtitle │ text │ maxLength: 200 │
│ readingTime │ number │ min: 1, max: 60 │
│ category │ select │ options: [Tech, News] │
│ tags │ multiselect│ options: [...] │
│ featured │ boolean │ default: false │
│ author │ reference │ contentType: author │
│ relatedPosts │ references │ contentType: blog-post │
└────────────────┴────────────┴─────────────────────────┘
AI Config:
✓ Indexed
✓ Summarize
Instruction: "This is a blog post. Focus on the main topic and key takeaways."
Example: Product Type
Name: Product
Slug: product
Plural: Products
Built-in Fields:
✓ Title
✓ Slug
✓ Content (as description)
✓ Featured Image
Custom Fields:
┌────────────────┬────────────┬─────────────────────────┐
│ Name │ Type │ Validation │
├────────────────┼────────────┼─────────────────────────┤
│ sku │ text │ required, pattern │
│ price │ number │ required, min: 0 │
│ salePrice │ number │ min: 0 │
│ inStock │ boolean │ default: true │
│ category │ select │ options: [...] │
│ gallery │ media │ accept: image/* │
│ specifications │ json │ - │
│ relatedProducts│ references │ contentType: product │
└────────────────┴────────────┴─────────────────────────┘
AI Config:
✓ Indexed
Instruction: "This is a product. Include price, availability, and key features."
Managing Content Types
Editing a Type
- Click on a content type in the list
- Modify fields, validation, or settings
- Click Save Changes
Note: Removing fields doesn't delete existing data, but those values won't be editable.
Archiving a Type
- Open the content type
- Click Archive in the menu
- Confirm the action
Archived types are hidden from the Content Manager but data is preserved.
Deleting a Type
- Open the content type
- Click Delete in the menu
- Confirm deletion
Warning: This removes the type definition. Existing content keeps its data but loses its schema.
API Integration
Manage content types via SDK:
// List all types
const types = await fig1.contentTypes.list();
// Get a specific type
const blogType = await fig1.contentTypes.get('blog-post');
// Create a type
const recipeType = await fig1.contentTypes.create({
name: 'Recipe',
slug: 'recipe',
pluralName: 'Recipes',
fields: [
{
name: 'prepTime',
label: 'Prep Time (minutes)',
type: 'number',
validation: { min: 0 }
},
{
name: 'difficulty',
label: 'Difficulty',
type: 'select',
validation: { options: ['easy', 'medium', 'hard'] }
}
],
builtInFields: {
title: true,
content: true,
featuredImage: true
},
aiConfig: {
indexed: true,
summarize: true
}
});
// Update a type
await fig1.contentTypes.update('recipe', {
fields: [...existingFields, newField]
});
// Delete a type
await fig1.contentTypes.delete('recipe');
See the Content Types API Reference for complete documentation.
Best Practices
- Plan your schema first - Sketch out fields before creating
- Use meaningful slugs - They become API identifiers
- Set validation rules - Catch errors before they're saved
- Configure AI carefully - Exclude internal-only fields from indexing
- Use references - Link related content for richer data
- Start simple - Add fields as needs evolve
- Document your types - Use descriptions to help editors