# Contentstack End User Training (EUT)

### About this export

| Field | Value |
| --- | --- |
| **content_type** | course |
| **platform** | contentstack-academy |
| **source_url** | https://www.contentstack.com/academy/courses/contentstack-end-user-training-eut- |
| **language** | en |
| **product_area** | cms |
| **learning_path** | standalone |
| **course_id** | contentstack-end-user-training-eut- |
| **slug** | contentstack-end-user-training-eut- |
| **version** | 2026-03-01 |
| **last_updated** | 2026-05-08 |
| **status** | published |
| **keywords** | ["cms","contentstack","content editor"] |
| **summary_one_line** | Welcome, brave and ambitious learners, to the End User Training course! You have taken the first step towards unleashing your inner Composable Hero and becoming a master of the Contentstack platform. With the power of MA… |
| **total_duration_minutes** | 188 |
| **lessons_count** | 40 |
| **video_lessons_count** | 0 |
| **text_lessons_count** | 40 |
| **linked_learning_path** | standalone |
| **linked_assessment_ref** | LMS_UNCONFIGURED_COURSE_ASSESSMENT |
| **markdown_file_url** | /academy/md/courses/contentstack-end-user-training-eut-.md |
| **generated_at** | 2026-05-08T12:23:49.374Z |
| **intended_audience** | [] |
| **prerequisites** | [] |
| **related_courses** | [] |

> **Academy MD v3** — companion `.md` for Ask AI. Quizzes and graded assessments are **LMS-only**; this file never contains answer keys.

## Course Overview

| Metadata | Value |
| --- | --- |
| Catalog duration | 3h 8m 13s |
| Released (if known) | 2026-03-01 |
| Product area | cms |

### Description

Welcome, brave and ambitious learners, to the End User Training course! You have taken the first step towards unleashing your inner **Composable Hero** and becoming a master of the Contentstack platform.

With the power of MACH, you will learn how to develop and manage content that is not bound by the constraints of traditional systems. Instead, you will be able to create dynamic, headless websites that offer exceptional flexibility and versatility. By mastering the fundamentals, you will be equipped with the tools to rescue businesses from outdated and cumbersome systems and guide them toward a brighter future of agility and innovation. 

First, you must embark on a crucial mission to help the Composable Heroes team spread the powerful message of MACH to people across the globe. Your challenge is to learn and harness the powers within Contentstack so that you can transform the way content is managed and lead your team to success. Are you ready to accept this challenge and join the ranks of the Composable Heroes? Let the journey begin!

You can also install a training instance by visiting our Legacy Academy. Click the [Create Training Instance](https://www.contentstack.com/academy-old) button on the home page.

### Learning objectives

1. Follow each lesson in order.
2. Practice in a training stack using placeholders **YOUR_STACK_API_KEY** and **YOUR_DELIVERY_TOKEN** in local `.env` files only.
3. Validate API responses against the official documentation.

### Topics covered

cms; contentstack; content editor

## Course structure

```text
contentstack-end-user-training-eut-/
├── 01-headless-and-composable-contentstack · text · 1 min
├── 02-organization-and-stacks · text · 1 min
├── 03-building-the-content-structure · text · 1 min
├── 04-content-type-classification · text · 1 min
├── 05-labels · text · 1 min
├── 06-fields · text · 1 min
├── 07-single-line-textbox-field · text · 1 min
├── 08-multi-line-textbox-field · text · 1 min
├── 09-url-field · text · 1 min
├── 10-number-field · text · 1 min
├── 11-boolean-field · text · 1 min
├── 12-date-field · text · 1 min
├── 13-file-field · text · 1 min
├── 14-link-field · text · 1 min
├── 15-select-field · text · 1 min
├── 16-reference-field · text · 1 min
├── 17-group-field · text · 1 min
├── 18-modular-blocks-field · text · 1 min
├── 19-global-field · text · 1 min
├── 20-html-based-rich-text-editor-field · text · 1 min
├── 21-json-rich-text-editor-field · text · 1 min
├── 22-field-visibility-rules · text · 1 min
├── 23-building-the-content · text · 1 min
├── 24-assets · text · 1 min
├── 25-assets-exercise · text · 1 min
├── 26-entries · text · 1 min
├── 27-entries-exercise · text · 1 min
├── 28-versioning · text · 1 min
├── 29-localization · text · 1 min
├── 30-environments · text · 1 min
├── 31-live-preview · text · 1 min
├── 32-publishing · text · 1 min
├── 33-publish-queue · text · 1 min
├── 34-releases · text · 1 min
├── 35-understanding-the-management-tools · text · 1 min
├── 36-workflows · text · 1 min
├── 37-tasks · text · 1 min
├── 38-publish-rules · text · 1 min
├── 39-comments-and-discussions · text · 1 min
├── 40-eut-summary · text · 3 min
```

## Lessons

### Lesson 01 — Headless and Composable Contentstack

<!-- ai_metadata: {"lesson_id":"01","type":"text","duration_minutes":1,"topics":["Headless","and","Composable","Contentstack"]} -->

#### Lesson text

# **Meet the Composable Heroes**

Meet the **Composable Heroes**' Development Team Lead, **Cyber Surge**. She and her developers can easily create websites using any available technology but are missing an efficient way to create and manage content.

![CSendUserTraining\_L1\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt3a7cd737dd1ffba6/67ddbda1460eb4862f947c10/CSendUserTraining_L1_img-1.png)  
![CSendUserTraining\_L1\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt01572978ba8e1ffc/67ddbdbe314d67533d1b73d9/CSendUserTraining_L1_img-2.png)

  

**The Lightning Excavator**, head of Marketing and Sales, identified that Contentstack could assist Cyber Surge in improving its content management process. However, the team needs assistance understanding how to leverage Contentstack's features to address their challenge. You must learn and demonstrate how Contentstack can assist the Composable Heroes in accomplishing their goals.

In this episode, you'll learn the basics of Contentstack and delve into its features and higher-level entities.

# **What is a Headless and Composable CMS?**

A **Headless CMS(Content Management System)** is a CMS without the **head**, which means it provides all the backend tools needed to create and publish content via **API**. The "head" is the final presentation layer that is provided to a user when they visit a site.

A **Composable CMS** is a CMS that helps to integrate several technology vendors and services, providing omnichannel content delivery and limitless integration.

**MACH architecture** is a modern approach to building software systems that emphasizes flexibility, scalability, and interoperability, while also ensuring that a technology stack remains future-proof. It stands for Microservices-based, API-first, Cloud-native SaaS, and Headless.

# **How is Contentstack Headless and Composable?**

Let's understand this using the below diagram:

![CSendUserTraining\_L1\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta3f1c041a58ea182/67ddbdd9efd8a91bdd4c05cf/CSendUserTraining_L1_img-3.png)

Take into consideration the concept of a "Body" which operates as the backend repository, and a "Head" which functions as the presentation layer or frontend. Note that the Head and Body are independent of each other, and the deployment/publishing of content takes place through APIs.

Moreover, Contentstack facilitates seamless third-party integrations through its [Marketplace](https://www.contentstack.com/docs/developers/marketplace-apps/) apps. You can conveniently integrate various categories of service vendors such as Translations, Video, DAM (Digital Asset Management), Analytics, Commerce, Search, and more.

Examples of a few of the Integration Channels that Contentstack supports:

*   **Translations** - XTM, SDL, Smartling, and many more.
    
*   **DAM** - Brandfolder, Cloudinary, Bynder, and many more.
    
*   **Video** - Youtube, Brightcove, Vimeo, and many more.
    
*   **Analytics** - Google, Adobe, Mixpanel, and many more.
    
*   **Commerce** - BigCommerce, Salesforce commerce, Commercetools, and many more.
    
*   **Search** - Elasticsearch, Algolia, and many more.
    

While these are just some of the integrations you can achieve through the marketplace, as long as a service has an API, it can be connected with Contentstack.

Contentstack supports **Automation** functionality which enables the creation of a workflow that connects multiple web apps or services, including Contentstack. To achieve this, Contentstack has introduced [Automation Hub](https://www.contentstack.com/docs/developers/automation-hub-guides/about-automation-hub/), a visual builder for no-code/low-code workflows using an automation-based trigger and action system.

Contentstack also provides [Launch](https://www.contentstack.com/blog/all-about-headless/announcing-contentstack-launch-composable-is-now-even-easier/) as a platform that can help you host your website/app, thus providing a convenient solution for end-to-end content creation and management. Using Automation Hub together with Launch and Marketplace apps, Contentstack can serve as the nucleus where you can integrate and automate a whole ecosystem, while the various integration channels act as the electrons referencing necessary information. This unique capability is what makes Contentstack both an efficient and composable CMS.

In summary, Contentstack is a composable, API-based, headless content management platform that allows developers to speed up delivery and development time while simultaneously enhancing the content managers' ability to create and manage their content independently.

# **Real World Use Cases**

You need a marketing or e-commerce page that can serve content on different channels like a kiosk, web, and mobile for various experiences and campaigns. It should handle several frontend technology frameworks, and be able to manage additional localized content to be served in other countries and languages. Combined with MACH architecture, Contentstack can help solve this real-world scenario. 

# Further Reading

*   [What is a Headless CMS?](https://www.contentstack.com/cms-guides/headless-cms/)
    
*   [What is a composable architecture?](https://www.contentstack.com/cms-guides/what-is-composable-architecture/)

#### Key takeaways

- Connect **Headless and Composable Contentstack** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 02 — Organization and Stacks

<!-- ai_metadata: {"lesson_id":"02","type":"text","duration_minutes":1,"topics":["Organization","and","Stacks"]} -->

#### Lesson text

# What are Organizations and Stacks?

An **Organization** is the top-most entity in the hierarchy of entities in Contentstack. Users, stacks, and the other resources within the stacks are part of an Organization and are managed from a single administrative panel.

A **Stack** is a repository or a container inside an organization that holds all the content/assets of your site. It allows multiple users to create, edit, approve, and publish their content within a single space.

# **Understanding with an example**

Let's understand this using the below diagram:

![CSendUserTraining\_L2\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc0f04bffbc8a0ffa/67ddbeb52d0b989dcbfd0a27/CSendUserTraining_L2_img-1.png)

Consider a **'Shelf'** which consists of a **'Stack of Books.'** The shelf helps organize the books. A book can contain content, including text, and images. There can be multiple shelves with different stacks of books. Projects within Contentstack work similarly, where an Organization represents the shelf, and Stacks represent the books.

![CSendUserTraining\_L2\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt814406ff649a7996/67ddbec237e25a80c01e4abc/CSendUserTraining_L2_img-2.png)

An Organization can consist of one or more Stacks. Depending on your team's plan, Contentstack also allows you to create multiple organizations with their own stacks(as shown in the diagram above).

# Organization and Stacks - Working with Contentstack

The following video shows you how to log into Contentstack for the first time and provides an overview of accessing your Organization and Stacks within Contenstack's UI.

# **Exercise 1 Video**

Follow along with the video to practice accessing your Organization and Stack.

**Quick Tips**:  
The maximum number of Organization records retrieved in a single GET API call is 100.  
The maximum number of Stack records retrieved in a single GET API call is 200.

# **Further Reading**

*   [More About Organizations](https://www.contentstack.com/docs/developers/organization/about-organizations/)
    
*   [More About Stacks](https://www.contentstack.com/docs/developers/set-up-stack/about-stack/)

#### Key takeaways

- Connect **Organization and Stacks** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 03 — Building the Content Structure

<!-- ai_metadata: {"lesson_id":"03","type":"text","duration_minutes":1,"topics":["Building","the","Content","Structure"]} -->

#### Lesson text

**Cyber Surge** wishes to create two pages; the **"**Hall of Heroes" which is a gallery that showcases the Composable Heroes with their images, names, and a brief summary, and the other, "Hero Details Page" which displays detailed information about them, their powers, and the message that they wish the people to read when someone clicks and opens one of the heroes.

In response to Cyber Surge's request, **The Lightning Excavator** is eager to learn how Contentstack can assist them in creating **content structures or schemas** that can hold the above content.

They require a tailored and efficient solution that includes:

*   The ability to create content dynamically without requiring multiple schemas or website code changes.
    
*   Ensures that best practices are followed.
    
*   Allows for organizing and filtering content based on its structure.
    

**In this episode, you'll learn how to create and organize the content structure needed for content creation.**

# **What is a Content Type?**

A **Content Type** is the structure or blueprint of a page or section your web or mobile property will display. You define the overall schema of this blueprint by adding fields and setting its properties.

Creating a content type is like building a mold or cast that lets you create several objects (content entries) of that exact nature and pattern.

# Video: How to create a Content Type

The following videos will walk you through the necessary steps to locate, create, and configure your Content Types in Contentstack.

# **Understanding with an example**

Consider a ‘Blog page’ which consists of a ‘Title,’ ‘Description,’ ‘Image,’ and ‘Published Date.’

Its respective content type would contain: 

*   **Title** as a text field
    
*   **Description** as a multiple-line text field
    
*   Image as an Asset field
    
*   **Published Date** as a Date field.’
    

Once you create a content type, you can create entries.

The following diagram serves as an example:

![CSendUserTraining\_L3\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt97a9e860b93948ce/67ddbf4cc5b83ec006924fb6/CSendUserTraining_L3_img-1.png)

Terminology to get familiar with:

*   **Fields** - These are the building blocks/components of your structured content. You can control which data you want to add by configuring fields and their properties in a content type.
    
*   **Entry** - After you define a content type, you can use it to create an entry, then add data and publish it.
    
*   **Asset** - Any media file such as; .jpg, .pdf, or .mp4 you upload in an entry is added as an asset.
    
*   UID \- A UID is a unique code that is assigned to something, like a person or a file, so that it can be easily identified and distinguished from other things that might have similar names or characteristics to ensure that the object is recognized and can be easily found in a system or database.
    

# **Best Practices To Use**

*   It is always recommended to use a _lowercase_ naming convention separated by an underscore for the Content Type UID.    
    Examples:  blog\_page, about\_us, hero\_biography.
    
*   Provide meaningful, human-readable Titles to ensure your content types are user-friendly.  
    Examples: 'Blog Page' instead of Blog or blogpage. 'Hero Biography' instead of HeroBio or herobio etc...
    
*   Provide a meaningful and intuitive description of your content type and what it is used for.
    

  
**Potential Use Case**:

*   If you want to create a simple blog page on your site, you will define a ‘Blog Page’ content type with ‘title,’ ‘date,’ ‘body,’ and ‘author’ fields. 
    
*   If you want to create the homepage of your site, you will define a ‘Home Page’ content type with a ‘header,’ ‘footer,’ ‘banner-image,’ ‘title,’ and ‘body’ fields.
    

**Quick Tips**:  
The maximum character length of a Content Type UID is 200.

# **Further Reading**

*   [More About Content Types](https://www.contentstack.com/docs/developers/create-content-types/about-content-types/)
    
*   [About Unique IDs](https://www.contentstack.com/docs/developers/create-content-types/unique-id/)

#### Key takeaways

- Connect **Building the Content Structure** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 04 — Content Type Classification

<!-- ai_metadata: {"lesson_id":"04","type":"text","duration_minutes":1,"topics":["Content","Type","Classification"]} -->

#### Lesson text

### **What are the types of Content Type?**

Contentstack allows you to customize a content type to meet various business requirements, you can create a webpage(s), the partials of your webpage (header, footer, or menu), or experiences in your mobile application.

Contentstack classifies Content Types into three types:

*   Single Page Component/Content Type
    
*   Multiple Page Component/Content Type
    
*   Multi-Reusable Component/Content Type
    

# **Video: Different Types of Content Types** 

The following video shows you how to change a Content Type type and some examples of the different types.

# **Exercise 2 Video**

Follow along with the video to practice building Content Types.

# **Understanding with an example**

*   **Single Page Component/Content Type** - If you want to create one-off pages that have a unique content type structure, you must make them as ‘Single Page Component/Content Type.’ Select **‘Single’** while creating the content type to achieve this. The below diagram gives you an illustration of the same.  
    Example: Home Page, About Us Page, Privacy Policy Page, etc. All these pages are one-off pages on a website.
    

![CSendUserTraining\_L4\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltec6c7f763733b58c/67ddbf9637e25a9d011e4acd/CSendUserTraining_L4_img-1.png)

*   **Multiple Page Component/Content Type** - If you want to create multiple pages using the same content type structure, you must create them as a ‘Multiple Page Component/Content Type.’ Select **‘Multiple’** while creating the content type to achieve this. Refer to the diagram below for an example.  
    Example: Blog Pages, Product Pages, etc.
    

![CSendUserTraining\_L4\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltcae3098603ecc0a0/67ddbfaf986725d6e8888e13/CSendUserTraining_L4_img-2.png)

*   **Multi Reusable Component/Content Type** - If you need to make multiple entries that are not pages and can be referred to or used as partial components, you should create them as a 'Multi Reusable Component/Content Type.' Select the type **‘Multiple’** while creating the content type, then use it as a **‘Reference’** in any Content Type that contains a reference field. The below diagram illustrates this.  
    Example: Authors(for the Blog Pages), Categories(for the Product Pages), etc…
    

![CSendUserTraining\_L4\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt29b808c0eb3c4927/67ddbfc9314d678f8c1b73f0/CSendUserTraining_L4_img-3.png)

**Quick Tips**:  
If you want to create a single page entry for your content type like a ‘Home Page’ or ‘Contact Us Page,’ always go for type ‘Single.’  
If you want to create multiple page entries for your content type like a ‘Blog Pages’ or ‘Product Pages,’ always go for type ‘Multiple.’

# **Further Reading**

*   [About Content Types](https://www.contentstack.com/docs/developers/create-content-types/about-content-types/)
    
*   [About References](https://www.contentstack.com/docs/developers/create-content-types/reference/)

#### Key takeaways

- Connect **Content Type Classification** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 05 — Labels

<!-- ai_metadata: {"lesson_id":"05","type":"text","duration_minutes":1,"topics":["Labels"]} -->

#### Lesson text

**Labels** allow you to categorize and organize the existing content types of your stack.

You can create and apply labels to group content types for easy access. Labels provide a convenient way of classifying content types based on specific criteria.

# **Video: How to create and manage Labels**

The following video shows how to create and manage labels and how to navigate content types and entries using such labels.

# **Understanding with an example**

Let's understand this using the below diagram:

![CSendUserTraining\_L5\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt15bd7e47554c7fb3/67ddc00b983a65c32d3b8054/CSendUserTraining_L5_img-1.png)

Consider that we have two teams, 'Marketing' and 'Writers,' each with content types, as shown in the diagram above. If you want to organize these content types into groups/folders, create two labels, 'Marketing' and 'Writers,' and apply these labels to the content types of each respective team.

Thus, labels provide a convenient way of classifying content types based on specific criteria. Also, labels are not private. The labels you create for a particular stack are visible to all the users, so make sure you discuss with your team how you would like to produce labels.

**Potential Use Case**:

*   Labels are the best option for organizing content entries based on Labeling and creating an easy way to navigate filtered entries.
    
*   Nested Labels allow the creation of a hierarchy for entities for quick navigations to filtered entries.
    

# **Further Reading**

*   [About Labels](https://www.contentstack.com/docs/developers/create-content-types/about-labels/)
    
*   [How to create and apply Labels](https://www.contentstack.com/docs/developers/create-content-types/create-and-apply-labels/)
    
*   [Manage Labels](https://www.contentstack.com/docs/developers/create-content-types/manage-labels/)

#### Key takeaways

- Connect **Labels** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 06 — Fields

<!-- ai_metadata: {"lesson_id":"06","type":"text","duration_minutes":1,"topics":["Fields"]} -->

#### Lesson text

**Fields** are the building blocks for structured content. The type and order of the fields you add to a content type decide how the content will be presented. All the content you will add to create an entry goes into the fields.

Each field possesses specific properties, such as:

*   **Display Name**
    
*   **Unique ID**
    
*   **Default Value**
    
*   **Help Text**
    
*   **Mandatory** 
    

and so on. These properties are editable and provide flexibility to customize the nature of the field.

# **Video: Content Type Fields Example; Blog Entry**

In this video, we look at the different fields used by the "Blog Entry" example Content Type.

# **Understanding with an example**

Let's understand this using the below diagram:

![CSendUserTraining\_L6\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt99a3f0f16eb3528d/67ddc069443bd64be5f1cf90/CSendUserTraining_L6_img-1.png)

Consider a 'Blog page' which consists of a 'Title,' 'Description,' 'Image,' and 'Published Date.' Its respective content type will contain fields like 'Title = text field,' 'Description = multiple line text field,' 'Image = Asset field,' and 'Published Date = Date field.'

In Contentstack, the **'Title' field** is a default text field that is mandatory and unique whenever you create a content type. It accepts single-line text and provides no formatting options or line breaks. The entry's title is the value entered in this field while making an entry.

![](https://learnupon.s3.eu-west-1.amazonaws.com/575824/original/d3efe4db-b1fb-451d-9d89-c1046d76786a-Title_Field.png)

Contentstack classifies Fields into two types:

*   Simple Fields
    
*   Advanced Fields
    

The following diagram depicts the types of fields:

![CSendUserTraining\_L6\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt976d2cd51e2babba/67ddc081efd8a90eca4c05ed/CSendUserTraining_L6_img-2.png)

![CSendUserTraining\_L6\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt21be6e4407267d3c/67ddc099c5b83e9013924fc4/CSendUserTraining_L6_img-3.png)

We will look at the above fields in detail in the upcoming episodes.

**Quick Tips**:  
While you can add a maximum of 100 fields to a content type by default, having large number of fields can increase complexity and impact authoring experience. 

# **Further Reading**

*   [More About Fields](https://www.contentstack.com/docs/developers/create-content-types/about-fields/)
    
*   [About Field Properties](https://www.contentstack.com/docs/developers/create-content-types/about-field-properties/)

#### Key takeaways

- Connect **Fields** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 07 — Single Line Textbox Field

<!-- ai_metadata: {"lesson_id":"07","type":"text","duration_minutes":1,"topics":["Single","Line","Textbox","Field"]} -->

#### Lesson text

The **Single Line Textbox** field enables users to type in single-line arbitrary text. When you add this field in content type, you will see a single-line textbox on the entry page to enter plain text only.

This field does not provide any formatting options or line breaks.

![CSendUserTraining\_L7\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt70ae10a5e6fa50b7/67ddc0ef0c6f5530f61fd388/CSendUserTraining_L7_img-1.png)

# **Understanding with an example**

*   If you want to add an Author’s First Name and Last Name, you can use two different Single Line Textbox fields.
    
*   You can use two Single Line Textbox fields to capture an Author’s Address Line 1 and a second Address Line 2.
    

This field has specific properties you can change anytime per your needs.

![CSendUserTraining\_L7\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltf89e42496d473e48/67ddc10ac5b83e415e924fcd/CSendUserTraining_L7_img-2.png)

![CSendUserTraining\_L7\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltf12e8e94b472764d/67ddc12020a3dcaff7f82c2f/CSendUserTraining_L7_img-3.png)

The properties that can be modified are:

*   Basic
    
    *   Display Name
        
    *   Unique ID
        
    *   Placeholder Value
        
    *   Instruction Value
        
    *   Help Text
        
    
*   Advanced
    
    *   Number of Characters
        
    *   Validation (Regex)
        
    *   Validation Error Message
        
    *   Default Value
        
    *   Options
        
        *   Mandatory
            
        *   Unique
            
        *   Multiple
            
        *   Non-localizable
            
        
    

**Quick Tips**:  
It's a good practice to use this field for brief text that doesn't require any formatting or line breaks.

# **Further Reading**

*   [About Single Line Textbox Fields](https://www.contentstack.com/docs/developers/create-content-types/single-line-textbox/)

#### Key takeaways

- Connect **Single Line Textbox Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 08 — Multi-Line Textbox Field

<!-- ai_metadata: {"lesson_id":"08","type":"text","duration_minutes":1,"topics":["Multi","Line","Textbox","Field"]} -->

#### Lesson text

The **Multi-Line Textbox** field enables users to enter the multi-line arbitrary text as content. When you add this field in the content type, it displays a text area on the entry page to enter a large chunk of data.

This field does not provide any formatting options but does provide line breaks.

  

![CSendUserTraining\_L8\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltea7a963ad5527e5a/67ddc16d2d0b983fc5fd0a40/CSendUserTraining_L8_img-1.png)

# **Understanding with an example**

*   You can use a Multi-Line Textbox field to capture the entire address in one go with line breaks, for example, an Author’s Address.
    

This field has specific properties you can change anytime per your needs.

The properties that can be modified are:

*   **Basic**
    
    *   **Display Name**
        
    *   **Unique ID**
        
    *   **Placeholder Value**
        
    *   **Instruction Value**
        
    *   **Help Text**
        
    *   **Number of Characters**
        
    *   **Validation (Regex)**
        
    *   **Validation Error Message**
        
    *   **Default Value**
        
    *   **Options**
        
        *   **Mandatory**
            
        *   **Unique**
            
        *   **Multiple**
            
        *   **Non-localizable**
            
        
    

**Quick Tips**:  
Use this field if you don’t need any text formatting options but require multiple lines of text such as a paragraph description.

# **Further Reading**

*   [About Multi-Line Text Box Fields](https://www.contentstack.com/docs/developers/create-content-types/multi-line-textbox/)

#### Key takeaways

- Connect **Multi-Line Textbox Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 09 — URL Field

<!-- ai_metadata: {"lesson_id":"09","type":"text","duration_minutes":1,"topics":["URL","Field"]} -->

#### Lesson text

The **URL** field enables you to define a relative path for where you want to publish content.

![CSendUserTraining\_L9\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt1cd2e888f997a5a8/67ddc1b9443bd66e1df1cfa2/CSendUserTraining_L9_img-1.png)

# **Understanding with an example**

*   If your page is a Blog Page, you should provide a relative path/URL like '/blog'.
    

The use of the URL field will vary based on the content type you have created.

If the type of content type is 'Single':

*   You cannot set properties for the URL field.
    
*   The only property that you can modify is 'Non-localizable**.'**
    

If the type of content type is 'Multiple':

*   You can modify the 'Non-localizable' property in the 'Advanced' tab.
    
*   The basic properties in the 'Basic' tab will allow you to set the default URL Prefix Pattern. You can either manually input the URL Pattern to specify the prefix or choose from one of the following options -
    

![CSendUserTraining\_L9\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltdf8da74c3a43fd87/67ddc1d16f68586740fdacb0/CSendUserTraining_L9_img-2.png)

1.  **Title** - When you select this option, a prefix using the value inside the 'Title' field will be automatically populated within the URL field.  
    Examples: If the title field is 'About Us,' the URL field will automatically populate the value as '/about-us' in the entry.
    
2.  **Date and Title** - When you select this option, a prefix with the current date followed by a value inside the 'Title' field will be automatically populated within the URL field.  
    Examples: If the title field has a value of 'About Us' and the current day is '2023/03/30', the URL field will automatically populate the value as '/2023/03/30/about-us' in the entry.
    
3.  **Month and Title** - When you select this option, a prefix with the current month and year followed by the value inside the 'Title' field will be automatically populated in the URL field.  
    Examples: If the title field has a value as 'About Us' and the current month and year is '2023/03', the URL field will automatically populate the value as '/2023/03/about-us' in the entry.
    
4.  **Disable** - When you select this option, the relative path will be kept blank by default. You can then enter a URL while creating the entry.
    
5.  **Custom** - This option lets you set a custom URL pattern by using available variables, custom text, or a combination of both.  
    The variables available for the custom pattern field are given as follows:
    

*   **:title** - Displays the title of the entry in the URL.  
    Example: If the title field is 'About Us,' the URL field will automatically populate the value as '/about-us' in the entry.
    
*   **:unique\_id** - Displays the unique ID of the entry in the URL.  
    Example: The URL field will automatically populate a unique random id like '/asbd866478c'.
    
*   **:year** - Displays the year of creation (numeric) in the URL.  
    Example: The URL field will automatically populate the current year like '/2023'.
    
*   **:year\_short** - Displays the short version of the year of creation (numeric) in the URL.  
    Example: The URL field will automatically populate the current year like '/23'.
    
*   **:monthname** - Displays the name of the month of creation in the URL.  
    Example: The URL field will automatically populate the current month name like'/march'.
    
*   **:monthname\_short** - Displays the short version of the month name in the URL.  
    Example: The URL field will automatically populate the current month name in short, like'/mar'.
    
*   **:day** -Displays the day (numeric) of the creation in the URL.  
    Example: The URL field will automatically populate the current day, like'/30'.
    
*   **:year-:month-:day** - Displays the year/month/date of creation.  
    Example: The URL field will automatically populate the current date like '/2023-03-30'.
    

**Potential Use Case**:  
Auto-generate SEO Friendly URLs based on a title field value.  
Set up a preview URL for an entry so that an editor can easily navigate to the web pages and preview changes.

**Quick Tips**:  
Use this parameter for your content types that delivers a page rather than a partial component or is a referenced content.  
If you have selected Single as your content type, we will be unable to set settings for the URL field.

# **Further Reading**

*   About URL Fields

#### Key takeaways

- Connect **URL Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 10 — Number Field

<!-- ai_metadata: {"lesson_id":"10","type":"text","duration_minutes":1,"topics":["Number","Field"]} -->

#### Lesson text

The **Number** field enables users to enter numeric data.

![CSendUserTraining\_L10\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltb29710f8f4f41fce/67ddc213efd8a9a4434c060b/CSendUserTraining_L10_img-1.png)

# **Understanding with an example**

*   You can use a Number field to capture data like a Phone Number or a Zip Code.
    

This field has specific properties you can change anytime per your needs.

The properties that can be modified are:

*   **Basic**
    
    *   **Display Name**
        
    *   **Unique ID**
        
    *   **Placeholder Value**
        
    *   **Instruction Value**
        
    *   **Help Text**
        
    
*   **Advanced**
    
    *   **Range**
        
        *   **Min**
            
        *   **Max**
            
        
    *   **Default Value**
        
    *   **Options**
        
        *   **Mandatory**
            
        *   **Unique**
            
        *   **Multiple**
            
        *   **Non-localizable**
            
        
    

![CSendUserTraining\_L10\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7277e2ff4a3b7e25/67ddc234632b93aba7d4a667/CSendUserTraining_L10_img-2.png)

# **Further Reading**

*   [About Number Fields](https://www.contentstack.com/docs/developers/create-content-types/number/)

#### Key takeaways

- Connect **Number Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 11 — Boolean Field

<!-- ai_metadata: {"lesson_id":"11","type":"text","duration_minutes":1,"topics":["Boolean","Field"]} -->

#### Lesson text

The **Boolean** input field enables users to input a ‘true’ or ‘false’ value in an entry. When you add this field in the content type, it is displayed as an on/off toggle switch on the entry page.

The default value is always ‘false.’

![CSendUserTraining\_L11\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blte64d76b732809e2d/67ddc279314d670aad1b741b/CSendUserTraining_L11_img-1.png)

# **Understanding with an example**

*   Consider a website with a form with the terms and conditions or privacy policies of your company's legal agreement. On this form is a clickwrap field labeled 'I Agree' to obtain consent from the users. The users will have the option to agree or disagree with your company's policies. In such cases, you will be using a Boolean field.
    

The following diagrams depict how a boolean field will look in the entry:

![CSendUserTraining\_L11\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc743439c72d09928/67ddc299983a65421b3b806d/CSendUserTraining_L11_img-2.png)

![CSendUserTraining\_L11\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt62e93395b0eda8ab/67ddc2b7c5de53cebed2e76d/CSendUserTraining_L11_img-3.png)

*   You can easily toggle the switch to set the value to 'false' or 'true.'
    
*   The Default Value option helps you to set pre-define state of the boolean field. The value selected here will appear by default when an entry for this content type is created.
    

![CSendUserTraining\_L11\_img-4.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt9c3ff75be2392429/67ddc2d520a3dc9311f82c38/CSendUserTraining_L11_img-4.png)

# **Further Reading**

*   [More About Boolean Field](https://www.contentstack.com/docs/developers/create-content-types/boolean/)

#### Key takeaways

- Connect **Boolean Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 12 — Date Field

<!-- ai_metadata: {"lesson_id":"12","type":"text","duration_minutes":1,"topics":["Date","Field"]} -->

#### Lesson text

The **Date** field accepts a date in the \*ISO format. When you add this field in the content type, it renders a calendar to select the date and time on the entry page.

![CSendUserTraining\_L12\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt1c0c9d89b2107b66/67ddc31c314d676a921b7427/CSendUserTraining_L12_img-1.png)

You can deactivate the time field using the ‘Hide Time’ option under its properties.

(**\*ISO forma**t - The International Organization for Standardization (ISO) date and time format is a standard way to express a numeric calendar date -- and optionally time -- in a format that eliminates ambiguity between entities.)

![CSendUserTraining\_L12\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt9972a14cf96760a8/67ddc335c5b83ee6a2924fe9/CSendUserTraining_L12_img-2.png)

# **Understanding with an example**

*   You can use a Date field to capture something like a Published Date of a Blog post.
    
*   If you want to capture a Date and Time for a Purchase Order, you can use a Date field along with Time.
    

This field has specific properties you can change anytime per your needs.

The properties that can be modified are:

*   **Basic**
    
    *   **Display Name**
        
    *   **Unique ID**
        
    *   **Instruction Value**
        
    *   **Help Text**
        
    
*   **Advanced**
    
    *   **Default Value**
        
        *   **Created Date**
            
        *   **Custom Date**
            
        
    *   **Options**
        
        *   **Mandatory**
            
        *   **Hide Time**
            
        *   Set Date Range
            
            *   Start Date
                
            *   End Date
                
            
        *   **Multiple**
            
            *   **Max Limit**
                
            
        *   **Non-localizable**
            
        
    

# **Further Reading**

*   [About Date Field](https://www.contentstack.com/docs/developers/create-content-types/date/)

#### Key takeaways

- Connect **Date Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 13 — File Field

<!-- ai_metadata: {"lesson_id":"13","type":"text","duration_minutes":1,"topics":["File","Field"]} -->

#### Lesson text

The **File** field enables users to upload and use files in an entry.

When you add this field to the content type, it shows the following options:

*   **Choose a file** -  This lets you select an existing file(s) stored under [ASSETS](https://www.contentstack.com/docs/content-managers/author-content/about-assets/).
    
*   **Upload a new file** - This lets you upload any file from your local system.
    

Every file you upload via the Upload new file option gets stored as an asset in Contentstack.

![CSendUserTraining\_L13\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt045438b314f7fd2b/67ddc385efd8a987a74c0627/CSendUserTraining_L13_img-1.png)

# **Understanding with an example**

*   If you want to have the ability to upload an Image like an  Author’s Image for a Blog post, you can use a File field.
    
*   If you want to have the ability to upload a Featured Image for a Blog post, you can use a File field.
    
*   If you want to have the option to upload a Video, like a Banner Video for the Home Page, you can use a File field.
    
*   If you want to have the option to upload a PDF file, you can use a File field for something like a Product Brochure that any user can download.
    

This field has specific properties you can change anytime per your needs.

The properties that can be modified are:

*   **Basic**
    
    *   **Display Name**
        
    *   **Unique ID**
        
    *   **Instruction Value**
        
    *   **Help Text**
        
    
*   **Advanced**
    
    *   **Options**
        
        *   **Mandatory**
            
        *   **Multiple**
            
        *   **Non-localizable**
            
        *   **Allow images only**
            
        
    *   **Allowed file types(s)**
        
    *   File size limit(MB)
        
        *   Min
            
        *   Max
            
        
    

![CSendUserTraining\_L13\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt1eb3c5092bb90e0e/67ddc39d37e25a3d851e4b00/CSendUserTraining_L13_img-2.png)

**Quick Tips**:  
You can upload files as large as is 700 MB, which is the default max file size.  
For optimization purpose the default Image input size is capped at 50 MB.  
If you have selected Single as your content type, you cannot set settings for the URL field.  
The following characters cannot be used in the Filename or URL of the assets (stacks v3.2 and above) are \`#%^+\\/?\\\*:|"'<>\\s{}=,\_. Restricted characters will be replaced by an underscore (\_) automatically.

# **Further Reading**

*   [About File Field](https://www.contentstack.com/docs/developers/create-content-types/file/)

#### Key takeaways

- Connect **File Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 14 — Link Field

<!-- ai_metadata: {"lesson_id":"14","type":"text","duration_minutes":1,"topics":["Link","Field"]} -->

#### Lesson text

The **Link** field enables users to add a link(s) to their entry page.

This field possesses two subfields:

*   **Title** - This lets you specify the display text for the corresponding link.
    
*   **Link** - This enables you to set a static or relative (to the site’s root URL) URL for the related title.
    

![CSendUserTraining\_L14\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt88445e9dcbf06d1a/67ddc3ec037e2b4df222ded2/CSendUserTraining_L14_img-1.png)

# **Understanding with an example**

*   You can choose a Link field if you want to create a link for a ‘Learn More’ button to visit and read more about a Product’s Detail. The ‘Title’ would be ‘Learn More’ and ’‘Link’ will contain the actual link to the destination page/article.
    
*   You can use a Link Field to create a Header menu containing menus like Blogs, About Us, Products, etc.
    
*   You can use a Link Field to create a Footer link containing links like Privacy Policy, Contact Us, etc.
    

This field has specific properties you can change anytime per your needs.

The properties that can be modified are:

*   **Basic**
    
    *   **Display Name**
        
    *   **Unique ID**
        
    *   **Instruction Value**
        
    *   **Help Text**
        
    
*   **Advanced**
    
    *   **Default Value**
        
        *   **Title**
            
        *   **URL**
            
        
    *   **Options**
        
        *   **Mandatory**
            
        *   **Multiple**
            
        *   **Non-localizable**
            
        
    

![CSendUserTraining\_L14\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt3db3e7cc00a2785b/67ddc403cb0241f07941ba52/CSendUserTraining_L14_img-2.png)

**Quick Tips**:  
Always use this field to assign a Title and Link to any component on a page/entry.

# **Further Reading**

*   [About Link Field](https://www.contentstack.com/docs/developers/create-content-types/link/)

#### Key takeaways

- Connect **Link Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 15 — Select Field

<!-- ai_metadata: {"lesson_id":"15","type":"text","duration_minutes":1,"topics":["Select","Field"]} -->

#### Lesson text

The **Select** field allows users to choose one or more options from predefined choices. Configure this field as a Radio button, Checkbox, or Dropdown menu.

![CSendUserTraining\_L15\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltdb420abd7d8ab22b/67ddc4cd20a3dc2171f82c50/CSendUserTraining_L15_img-1.png)

# **Understanding with an example**

*   **Single-value choices** - You can add options containing simple values.  
    Example:  For eCommerce, allow someone to pick a shirt size from XS, S, M, L, or XL.
    
*   **Key-value pair choices** - You can enable the Key-value pairs option and add key-value pairs separated by a colon (:). A comma separates every choice. Only the key name is displayed on the entry page, while the value is stored in the backend database for reference.  
    Example: You might want to specify a state's code while defining choices in a government website so that we can specify key-value pairs such as New York:NY, Texas:TX, and Dubai:DBX.
    

This field has specific properties you can change anytime per your needs.

The properties that can be modified are:

*   **Basic**
    
    *   **Display Name**
        
    *   **Unique ID**
        
    *   **Instruction Value**
        
    *   **Help Text**
        
    *   **Selection Type**
        
    *   The limit for Multiple Choices
        
    *   Display Type
        
    *   Choice Data Type
        
    *   Add Choices
        
    

![CSendUserTraining\_L15\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt9569bf00c4d49b12/67ddc4e7cb0241254b41ba5e/CSendUserTraining_L15_img-2.png)

*   **Advanced**
    
    *   **Mandatory**
        
    *   **Non-localizable**
        
    

![CSendUserTraining\_L15\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta66895168fe6acdb/67ddc503037e2be2d522dee2/CSendUserTraining_L15_img-3.png)

**Quick Tips**:  
You can add up to a max default count of 100 choices for a single dropdown menu.  
A key-value pair option can contain a maximum of 100 characters in length.  
Enabling or disabling the Enable key-value button erases your existing choices. Proceed with caution to avoid any loss of data.

# **Further Reading**

*   [About Select Field](https://www.contentstack.com/docs/developers/create-content-types/select/)

#### Key takeaways

- Connect **Select Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 16 — Reference Field

<!-- ai_metadata: {"lesson_id":"16","type":"text","duration_minutes":1,"topics":["Reference","Field"]} -->

#### Lesson text

The **Reference** field allows you to create references to entries of the same or another content type(s). It lets you access and use entries of other content types as input within your field.

![CSendUserTraining\_L16\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4ef22b511fe7734d/67ddc5854a89c30494a307e6/CSendUserTraining_L16_img-1.png)

# **Understanding with an example**

Let's understand this using the below diagram:

![CSendUserTraining\_L16\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltb500d868733cf3d7/67ddc5a0983a65c79d3b808b/CSendUserTraining_L16_img-2.png)

Consider a 'Blog page,' for example. There can be multiple blogs, each with the same or different authors. In such use cases, we will create two content types to avoid repeatability and create reusable components. The first content type will be 'Blog Page,' which consists of fields such as 'Title,' 'Description,' 'Image,' 'Author,' and 'Published Date.' The second content type will be 'Authors,' consisting of fields such as 'Title,' 'Description,' and 'Image.'

Now you can add the 'Author' content type as a reference field in the 'Blog Page' content type. When you create an entry for the 'Blog Page' content type, you will refer to one of the entries from the 'Author' content type for the 'Author' field. When the page is rendered using [**Contentstack APIs**](https://www.contentstack.com/docs/developers/apis/), the final Blog Page will contain all the content, including the Author details.

Referencing can be classified into ' Self Referencing' and 'Include Referencing.' We can further classify 'Include Referencing' into two more sub-types: ' Single Content Type Referencing' and 'Multiple Content Type Referencing.'

Let's have a look at each of these with examples:

*   **Self-Referencing** - This refers to creating references of the same content type.  
    Example: If a user buys a mobile phone belonging to XYZ brand, they should get recommendations of headsets, chargers, or mobile phone covers of the same brand. In this case, you can create a 'Product' content type with a field named 'Recommendations' as a reference to the same content type 'Product.'
    
*   **Include Referencing** - This refers to creating references of another content type(s).
    

1.  **Single Content Type Referencing** - Here, the Reference field allows you to create references to entries of a single content type.  
    Example: The Blog page and Author example you have seen above best suit this. The 'Author' field in the 'Blog Page' content type references the 'Author' content type. When you create an entry for the 'Blog Page' content type, you will refer to one of the entries from the 'Author' content type for the 'Author' field.
    
2.  **Multiple Content Type Referencing** - Here, the Reference field allows you to create references to entries of various content types.  
    Example: For an e-commerce site, you may have primary items like Clothes, Shoes, and Bags, and you want to create a page that displays all the products of a selected brand. First, you would create content types like 'Clothes,' 'Shoes,' and 'Bags' and their entries. Then, you would make the 'Brand' content type with the necessary fields and add a 'Reference' field named 'Products' that refers to the three content types 'Clothes,' 'Shoes,' and 'Bags.' When you create an entry for the 'Products,' you can select the entries from the three referenced content types.
    

The Reference field possesses specific properties you can change anytime per your requirements.

The properties that can be modified are:

*   **Basic**
    
    *   **Display Name**
        
    *   **Unique ID**
        
    *   **Instruction Value**
        
    *   **Help Text**
        
    *   **Referenced Content Type**
        
    

![CSendUserTraining\_L16\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltad470e7226852c56/67ddc5bdb1a1f3a86d3efd0f/CSendUserTraining_L16_img-3.png)

*   **Advanced**
    
    *   **Options**
        
        *   **Mandatory**
            
        *   **Multiple**
            
        *   **Non-localizable**
            
        
    

![CSendUserTraining\_L16\_img-4.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt0f31348e30b51c06/67ddc5d417f7b465c90d05e3/CSendUserTraining_L16_img-4.png)

**Potential Use Case**:

*   A reference field can be used to add links between two entries. In the Blog Entries page, the Author can be a reference entry with a separate Author Page, and it's easy to update Author details in one place in the Author content type entry due to referencing instead of each blog article of that Author.
    
*   Categories are another use case of reference where we can create a separate content type and add them as a reference in articles.
    
*   In the Navigation Menu, instead of a static link, we can add entry pages as reference menu items for each menu.
    

**Quick Tips**:  
It's advised to limit content reference depth levels to 3 for better visibility and governance of content.  
Also, the maximum number of content types should be limited to 20 in a reference field.

# **Further Reading**

*   [About Reference Field](https://www.contentstack.com/docs/developers/create-content-types/reference/)

#### Key takeaways

- Connect **Reference Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 17 — Group Field

<!-- ai_metadata: {"lesson_id":"17","type":"text","duration_minutes":1,"topics":["Group","Field"]} -->

#### Lesson text

The **Group** field enables users to group multiple fields. When set to ‘Multiple,’ users can create various iterations of a Group field while creating entries.

![CSendUserTraining\_L17\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltf0b7e1ad85b677f3/67ddc633f7eccc082c90dcfc/CSendUserTraining_L17_img-1.png)

# Video: Group Fields on Entries

The following video provides an example of an entry that uses group fields.

# **Understanding with an example**

Let's understand this using the below diagram:

![CSendUserTraining\_L17\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc74468073a5f0ccf/67ddc64f2d0b9882fbfd0a69/CSendUserTraining_L17_img-2.png)

Consider a 'Site Header' example. A site header may contain menus such as 'Blogs,' 'About Us', 'Features,' and 'Program.' These menus have a similar structure and serve a similar purpose. Each of these menus can be grouped using a 'Group Field' as 'Multiple,' consisting of fields like 'Link Field' that can capture the 'Title' and 'Link' of the menu items.

Another typical use case for group fields is when you are tasked with creating a 'Carousel' on a page. A carousel generally contains images and some information about them. So, we can group them using the 'Group Field' as 'Multiple,' consisting of fields like 'Image,' 'Title,' 'Description,' and the 'Link Field.'

The following diagram provides an example:

![CSendUserTraining\_L17\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt825d13e12667d548/67ddc66b782bfb3b696f5aaa/CSendUserTraining_L17_img-3.png)

The Group field possesses specific properties you can change anytime per your requirements.

The properties that can be modified are:

*   **Basic**
    
    *   **Display Name**
        
    *   **Unique ID**
        
    *   **Instruction Value**
        
    *   **Help Text**
        
    
*   **Advanced**
    
    *   **Multiple**
        
    *   **Non-localizable**
        
    

![CSendUserTraining\_L17\_img-4.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4b87ff6b78c2417b/67ddc68437e25a2b131e4b27/CSendUserTraining_L17_img-4.png)

**Potential Use Case**:

*   FAQ is one of the real-world use cases for Group fields where editors need to create multiple combinations of questions and answers.
    
*   Group fields can be used to dedicate a section of your website for specific purposes.  
    Example:  _Survey Forms where you can incorporate all the existing fields Contentstack offers to create a questionnaire. Apart from survey forms, you can also generate an online polling system, quizzes, or even a rating system._
    

**Quick Tips**:  
You can add up to a maximum of 100 fields(including nested fields) in a group field.

# **Further Reading**

*   [About Group Field](https://www.contentstack.com/docs/developers/create-content-types/group/)

#### Key takeaways

- Connect **Group Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 18 — Modular Blocks Field

<!-- ai_metadata: {"lesson_id":"18","type":"text","duration_minutes":1,"topics":["Modular","Blocks","Field"]} -->

#### Lesson text

**A Modular Block** is a field that allows content managers to dynamically create and modify components of a page or app on the go.

![CSendUserTraining\_L18\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt8849a67c2b859bce/67ddc6da632b938bb4d4a6af/CSendUserTraining_L18_img-1.png)

![CSendUserTraining\_L18\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt48158fa666113212/67ddc74237e25a119f1e4b35/CSendUserTraining_L18_img-3.png)

# Video: Modular Block Fields on Entries

The following video provides an example of an entry that uses modular block fields.

# **Understanding with an example**

Refer to the below diagram to better understand the concept of Modular Blocks:

Consider a ‘Blog Page’ content type allowing users to create multiple entries or blog pages. Each author may have a content structure that serves content in a different order.

Consider a ‘Blog Page 1 Layout’ which has fields in the order:

*   Title
    
*   Description
    
*   Asset
    
*   Description
    
*   Asset
    
*   Asset
    

There may be another blog, ‘Blog Page 2 Layout,’ which has fields in the order:

*   Title
    
*   Asset
    
*   Description
    
*   Description
    
*   Asset
    
*   Description
    

![CSendUserTraining\_L18\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt71952031b8329dba/67ddc6f8460eb46371947c7b/CSendUserTraining_L18_img-2.png)

Both layouts use the same content type structure, ‘Blog Page,’ but the selection and order of the fields change dynamically. In such cases, you can make use of Modular Blocks. Modular blocks allow a user to publish content dynamically without any code pushes, meaning that the developer does not have to make any code changes regarding the fields on the front end.

**Potential Use Case**:

*   Dynamic Component-based content pages, e.g., Blog articles, can have different templates and content blogs with different ordering.
    
*   To show the end user something different based on their physical location (IP address), you can do so by using Modular Blocks in Contentstack.
    
*   Create Navigation with Menu items blocks for external, internal, and custom links schema fields.
    
*   Pick and choose page structure of predefined components for editors without relying on developers for dynamic page structuring.
    
*   Nested Blocks to create component hierarchy
    

**Quick Tips**:

*   Modular Blocks field can take 20 blocks max by default and you can add up to 5 Modular Blocks fields in a single content type.
    
*   If you have selected Single as your content type, we will be unable to set settings for the URL field.
    
*   While depth of nested blocks is 2 the maximum number of blocks that can be added within a nested Modular Blocks field is 20.
    
*   The maximum number of fields that can be added to a content type is 100. When you add a Modular Blocks field to a content type, each Modular Blocks field is counted as a field, each block within the Modular Blocks field is counted as a field, and each field within a block is calculated too.
    

_Example_**:** _A content type with one Modular Blocks field that contains two blocks, each block with two fields each, will be counted as a total of 7 fields._

# **Further Reading**

*   [About Modular Blocks](https://www.contentstack.com/docs/developers/create-content-types/modular-blocks/)

#### Key takeaways

- Connect **Modular Blocks Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 19 — Global Field

<!-- ai_metadata: {"lesson_id":"19","type":"text","duration_minutes":1,"topics":["Global","Field"]} -->

#### Lesson text

A **Global** field is a reusable field (consisting of a group of fields) that you can define once and reuse in any content type within your stack.

This field saves the time and effort of adding the same set of fields (and their settings) in multiple content types of a stack.

![CSendUserTraining\_L19\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt502f137db684633a/67ddc790460eb496e7947c8c/CSendUserTraining_L19_img-1.png)

# **Understanding with an example**

*   If you want to capture SEO information for your website, you can do this using the Global field. You will create a Global field consisting of fields like ‘SEO Title,’ ‘SEO Description,’ etc. You can then reuse this on any page. You can select ‘Global Field’ in that respective content type.
    
*   You can use the Global field to create a Button-Link structure that can be reused across the website. You will create a Global field consisting of a ‘Link Field’ where the ‘Title will be ‘Button Title’ and ’‘Link’ will contain the actual link of the destination page/article. You can then use this button on any page or section. This field has specific properties you can change anytime per your needs.
    

The properties that can be modified are:

*   Basic
    
    *   Select Global Field
        
    *   **Display Name**
        
    *   **Unique ID**
        
    *   **Instruction Value**
        
    *   **Help Text**
        
    

![CSendUserTraining\_L19\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt581f12b4cfd93450/67ddc7ca443bd64168f1cfe5/CSendUserTraining_L19_img-2.png)

*   **Advanced**
    
    *   **Multiple**
        
    *   **Non-localizable**
        
    

![CSendUserTraining\_L19\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt5db61352c3d1269e/67ddc7e145b2291a8e911b21/CSendUserTraining_L19_img-3.png)

**Potential Use Case**:

*   Reusable SEO group field inside the global field to reuse in multiple content types and maintain.
    
*   For reusable components like Banner, CTA, and FAQs.
    

**Quick Tips**:

*   Like the number of fields in a content type is limited to 100, same also applies for Global fields.
    
*   And you can up to 25 Global fields in a content type.  
    Example: _As we know, only 100 fields are allowed per content type. If a content type already contains two fields and if we try to include a global field containing 100 fields in this content type, then this content type field will exceed 100 and will not be allowed._
    

# **Further Reading**

*   [About Global Field](https://www.contentstack.com/docs/developers/create-content-types/global/)

#### Key takeaways

- Connect **Global Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 20 — HTML-based Rich Text Editor Field

<!-- ai_metadata: {"lesson_id":"20","type":"text","duration_minutes":1,"topics":["HTML","based","Rich","Text","Editor","Field"]} -->

#### Lesson text

The **HTML Rich Text Editor (RTE)** field enables users to input different types of content, such as text, images, videos, and so on. Adding an HTML-based RTE field in a content type displays a text area with editing and formatting options on the entry page.

![CSendUserTraining\_L20\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt51f1f912e6e9bfd4/67ddc831782bfb8cc56f5abf/CSendUserTraining_L20_img-1.png)

  

![CSendUserTraining\_L20\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7dc5920f1e861cc7/67ddc8480c6f55bd7a1fd3f2/CSendUserTraining_L20_img-2.png)

![CSendUserTraining\_L20\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt80176931bcf764ff/67ddc8643a0f38aaf200efe5/CSendUserTraining_L20_img-3.png)

![CSendUserTraining\_L20\_img-4.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltb4e86e72ae7d5264/67ddc8915e486d780c71bb0f/CSendUserTraining_L20_img-4.png)

# **Understanding with an example**

*   If you want to capture and format a description that includes text and images for the definition of a Blog Page or any Article, you can use HTML-based Rich Text Editor.
    

The HTML-based Rich Text Editor (RTE)  stores content as strings in HTML format.

This field allows you to edit and format content entered in the field without using HTML tags (however, you can use HTML tags in the HTML mode, if needed).

Besides choosing between the Basic and Advanced editors, developers can choose the Custom editor when adding the HTML-based RTE field to content types.

The Custom editor allows you to choose from various formatting options and control what will be available in the HTML-based RTE toolbar for content managers.

# **Best Practices To Use**

*   Use this to embed entries and assets within the HTML-based Rich Text Editor, which are automatically updated within the Rich Text Editor field whenever the source entry or asset is updated. You can do this by checking the ‘Embed Objects’ in the ‘Advanced’ section of the HTML-based Rich Textor Editor.
    

**Potential Use Case**:

*   **Embed entry inline** - To pass in some value from a linked entry that might be dynamic, such as a working title or a link that opens a modal popup.
    
*   **Embed entry as a block** - To add descriptive image carousels, survey forms, or product listings.
    
*   **Embed entry as a hyperlink** - To add a hyperlink in the RTE that changes dynamically whenever any updates are made.
    
*   **Displayable embedded images** - Such assets are dynamically updated in the front end whenever you change the source item in the asset manager.
    
*   **Downloadable Images or Files** - Such items are usually PDFs or other reference file formats with a handy download link.
    

**Quick Tips**:

*   At any given time, you can combine a total of 100 entries and assets to be embedded inside a single RTE field.
    
*   A maximum default count of 10 content types can be selected for a Single RTE as a reference including embedded assets.
    
*   Any references within the embedded entry will not be resolved.
    

# **Further Reading**

*   [About Rich Text Editor Fields](https://www.contentstack.com/docs/developers/create-content-types/rich-text-editor/)

#### Key takeaways

- Connect **HTML-based Rich Text Editor Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 21 — JSON Rich Text Editor Field

<!-- ai_metadata: {"lesson_id":"21","type":"text","duration_minutes":1,"topics":["JSON","Rich","Text","Editor","Field"]} -->

#### Lesson text

The **JSON Rich Text Editor (RTE)** field is a block-style rich text editor that enables users to add different types of content. It stores content in structured JSON blocks containing text, images, videos, etc.

![CSendUserTraining\_L21\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta315ac2124d921c4/67ddc8e2a714584a1fb9ba41/CSendUserTraining_L21_img-1.png)

![CSendUserTraining\_L21\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt24a5f46ac6e54d54/67ddc8fbbbf93e4aab5872b7/CSendUserTraining_L21_img-2.png)

![CSendUserTraining\_L21\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltf612ddcb5e323d37/67ddc915efd8a965984c0676/CSendUserTraining_L21_img-3.png)

![CSendUserTraining\_L21\_img-4.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc9ffb5e7e88135a2/67ddc92fa6d88eb2b5053994/CSendUserTraining_L21_img-4.png)

# **Understanding with an example**

*   If you want to capture and format a description that includes text, and images, say, for the description of a Blog Page or any Article, you can use JSON Rich Text Editor.
    

JSON Rich Text Editor stores content in structured JSON blocks containing text, images, videos, etc.

Adding a JSON RTE field in a content type displays a text area with editing and formatting options on the entry page. This field allows you to edit and format content entered in the field without using HTML tags.

Besides choosing between the Basic and Advanced editors, developers can choose the Custom editor when adding the JSON RTE field to content types.

The Custom editor allows you to choose from the various formatting options and control what will be made available in the JSON RTE toolbar for content managers.

You can type in the forward slash ("/") in your JSON Rich Text Editor to open a list of formatting options to style your content.

Contentstack also includes the '**JSON RTE Comments'** feature that allows you to add comments within the JSON Rich Text Editor. This feature helps you collaborate efficiently with other Contentstack users during content creation and review processes. We will take a look a this in our next video.

**Potential Use Case**:

1.  It provides built-in syntax formatting for more than 60 programming languages.  
    Examples: JavaScript, HTML, Python, etc.
    
2.  You can create custom plugins or use existing marketplace apps like Aprimo, Cloudinary, etc., which will be available as an option in the formatting panel.
    

# **Real World Use Cases**

*   Compared to HTML RTE, JSON RTE response can be in JSON format, which is easy to configure on different devices.
    
*   Formatting content is easy for editors.
    
*   **Embed entry inline** - To pass in some value from a linked entry that might be dynamic, such as a working title or a link that opens a modal popup.
    
*   **Embed entry as a block** - To add descriptive image carousels, survey forms, or product listings.
    
*   **Embed entry as a hyperlink** - To add a hyperlink in the RTE that changes dynamically whenever any updates are made.
    
*   **Displayable embedded images** - Such assets are dynamically updated in the front end whenever you change the source item in the asset manager.
    
*   **Downloadable Images or Files** - Such items are usually PDFs or other reference file formats with a handy download link.
    

**Quick Tips**:

*   You can add 10 JSON RTEs per content type and 100 Entries embedded to one.
    
*   The maximum JSON RTE field data size limit (in bytes) is 30000 (30 KB).
    
*   A maximum of 15 content types can be selected as references for a single JSON RTE.
    
*   The maximum number of instances for JSON RTEs marked as "Multiple" is 100.
    
*   During migration, both the HTML-based and JSON RTEs should be at the same level of field depth to migrate content successfully.
    
*   If the JSON RTE is marked as "Multiple" and HTML RTE is of "Single" type, you won't be able to migrate content.
    
*   The HTML RTE and JSON RTE should allow embedded entries from the same referenced content types during migration. If the referenced content types differ, you cannot migrate content between the RTEs.
    
*   You can have multiple discussions within the JSON Rich Text Editor.
    
*   One active discussion can be associated with each selected content block, text, and image within the JSON RTE.
    

# **Further Reading**

*   [About JSON Rich Text Editor](https://www.contentstack.com/docs/developers/json-rich-text-editor/about-json-rich-text-editor/)

#### Key takeaways

- Connect **JSON Rich Text Editor Field** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 22 — Field Visibility Rules

<!-- ai_metadata: {"lesson_id":"22","type":"text","duration_minutes":1,"topics":["Field","Visibility","Rules"]} -->

#### Lesson text

**Field Visibility** **Rules** allow you to display or hide fields on an entry page based on the value entered.

![CSendUserTraining\_L22\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt503ee8acbf63b263/67ddc993b1a1f3be0f3efd36/CSendUserTraining_L22_img-1.png)

![CSendUserTraining\_L22\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltafefb9eb51921026/67ddc9ac37e25a3f4e1e4b4e/CSendUserTraining_L22_img-2.png)

# **Understanding with an example**

*   While checking out from an online shopping site, selecting the ‘The Same as Shipping Address’ field hides the ‘Billing Address’ field automatically.
    
*   When you select Gender as Male, it automatically adds ‘Mr.’ before the First Name field and hides the ‘Ms./Mrs.’ title.
    
*   While filling out a job form, if you answer the ‘Do you have any prior experience?’ field as ‘Yes,’ it shows the ‘Years of experience’ field while selecting ‘No’ does not.
    

You can define Field visibility rules while creating or editing a content type. Only the stack owner, admins, and users assigned ‘Developer’ roles have the right to make a Field visibility rule in the stack.

The list of operators that can be used to set the visibility rules can be found [here](https://www.contentstack.com/docs/developers/create-content-types/operand-fields-and-supported-operators/).

**Quick Tips**:

*   While you could easily add up to 10 rules per content type, with max of 5 conditions per rule.
    
*   And target as many as 5 fields for each rule.
    

# **Further Reading**

*   [About Field Visibility Rules](https://www.contentstack.com/docs/developers/create-content-types/about-field-visibility-rules/)

#### Key takeaways

- Connect **Field Visibility Rules** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 23 — Building the Content

<!-- ai_metadata: {"lesson_id":"23","type":"text","duration_minutes":1,"topics":["Building","the","Content"]} -->

#### Lesson text

Get ready to witness the incredible abilities of our esteemed content creators! Meet **Lightning Bolt**, the unrivaled master of speed and creativity, **Thunder Monarch**, the precise and skilled Grammarian, and **Demo Almighty**, the media mogul from Composable Heroes. Together, they are about to unleash the full potential of Contentstack, utilizing its powers to create captivating content for the Hall of Heroes and the Hero Details Page.

![CSendUserTraining\_L23\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt2c857adba5a27c4b/67ddc9f4037e2bdbb822df2f/CSendUserTraining_L23_img-1.png)

![CSendUserTraining\_L23\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc5496f28642c645a/67ddca0e782bfb37756f5ad6/CSendUserTraining_L23_img-2.png)

![CSendUserTraining\_L23\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt3ca7d096a0ec0105/67ddca26443bd6c63bf1d002/CSendUserTraining_L23_img-3.png)

  

The goal is to produce content for:

*   **Hall of Heroes** (with images, names, and brief information about them)
    
*   **Hero Details Page** (includes detailed information about the heroes, their powers, and the message)
    

In their quest to reach a global audience, our talented creators will craft captivating content in multiple languages. They will showcase mesmerizing images, heroic names, and intriguing information in the Hall of Heroes while providing detailed insights into each hero's powers and message on the Hero Details Page. With their expertise in managing multiple content versions, they will navigate the ever-changing content landscape. Embark on an exhilarating journey of content creation, management, and localization with Contentstack as your guiding companion. Unleash your creative superpowers and join these extraordinary content creators!

**In this episode, you'll learn how to create, manage and localize the content.**

#### Key takeaways

- Connect **Building the Content** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 24 — Assets

<!-- ai_metadata: {"lesson_id":"24","type":"text","duration_minutes":1,"topics":["Assets"]} -->

#### Lesson text

In Contentstack, any files (images, videos, PDFs, audio files, and so on) that you upload get stored in your repository for future use. This repository of uploaded files is called **Assets**.

![CSendUserTraining\_L24\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt01eb842f79e81166/67ddca692d0b98af66fd0a9b/CSendUserTraining_L24_img-1.png)

# Video: How to Use Assets in Contentstack

The following video shows how to manage assets in Contentstack.

# **Exercise 3 Video**

Follow along with the video to practice using Assets.

# **Understanding with an example**

*   If you want to upload an Author's Image for a Blog post, you can upload the image in the assets. You can then use or reference the asset in any entries with a field for assets.
    

Once you upload a file to your Assets repository, you can attach it to any entry. This is especially useful when using certain assets in multiple entries.

You can perform the following actions on assets:

*   Upload assets to your stack.
    
*   Update asset details.
    
*   Delete assets permanently from your stack.
    
*   Publish assets to a specific environment(s) and locale(s).
    
*   Unpublish assets from the particular environment(s) and locale(s).
    
*   Locate assets easily using filters.
    

To organize assets, you can create folders in the ASSETS section of Contentstack. You can maintain your assets in a nested folder structure, creating folders within folders with a maximum depth of five levels.

An asset has the following metadata associated with it:

![CSendUserTraining\_L24\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltbe895439fecb8620/67ddca85c5b83e29e6925048/CSendUserTraining_L24_img-2.png)

*   **Title** - Defines the Title for the image and will initially be the file's name that gets uploaded. You do have the option to change the Title.
    
*   **Description and Tags** - Both of these fields are optional. You can provide a basic description of the image while adding tags helps to search/filter the image based on tag names.
    
*   **Filename** - Defines the name of the file that gets uploaded to the assets.
    
*   **Unique ID** - Defines the unique identifier for the image.
    
*   **File URL** - Defines the URL of the image stored in assets and can be used to serve the image on your website. Clicking on the URL copy's the URL text, which you can use to open the image.
    
*   **Permanent URL** - Create a permanent URL by specifying a custom name for the image name in the URL.
    
*   **File Location** \- Change the location of an image in the assets by clicking on the 'Change' option.
    
*   **Type, File Size, Resolution, Created By, Created At, Last Modified By, Modified At** - These are the basic properties that define the metadata of an image.
    
*   **Referenced In** - Provides information about which Content-Type and Locale the image are referenced.
    

# **Real World Use Cases**

*   Contentstack provides a digital asset management feature with the Asset module to help manage assets and easily reference them on web pages.
    
*   Editors can organize assets in folders and filter based on the type of assets.
    

**Quick Tips**:

*   For ease of management a folder can have default max of 500 asset.
    
*   And a multi level hierarchy of 5 levels.
    

# **Further Reading**

*   [About Assets](https://www.contentstack.com/docs/content-managers/author-content/about-assets/)
    
*   [Assets FAQ](https://www.contentstack.com/docs/faqs/#assets-faqs)

#### Key takeaways

- Connect **Assets** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 25 — Assets Exercise

<!-- ai_metadata: {"lesson_id":"25","type":"text","duration_minutes":1,"topics":["Assets","Exercise"]} -->

#### Lesson text

## Hello folks! 

Now that you have a good hold over the major entities in Contentstack, it's time to try some of those immediately.

*   **Download** the images in the next module. (You can choose any random video for the video portion)
    
*   Navigate to the Assets area.
    
*   Create a new **FOLDER**  to upload assets. The name of the folder should be **New Heroes**.
    
*   Upload new **ASSETS** for the following heroes.
    

1.  **One Image** for a Hero '**Wild West Warrior**'
    
2.  **ONE Video** for a Hero '**Royal Defender**'
    
3.  **ONE Image** for a Hero '**Royal Defender**'
    

*   Open the image related to the hero '**Wild West Warrior**' and **change** the **TITLE** and **GENERATE PERMANENT URL**. **Save** the changes.
    
*   Open the video related to the hero '**Royal Defender**' and **replace the video with the image provided** for the hero '**Royal Defender**' using the **Replace** button. Make sure to upload the image in the same folder.
    

Bingo! You have completed this exercise successfully. Go ahead to submit the output of your practice.

#### Key takeaways

- Connect **Assets Exercise** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 26 — Entries

<!-- ai_metadata: {"lesson_id":"26","type":"text","duration_minutes":1,"topics":["Entries"]} -->

#### Lesson text

An **entry** is an actual piece of content that you want to publish. You can only create entries with existing content types.

![CSendUserTraining\_L26\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt67556a092dc428c5/67ddcaef5e486dd05571bb30/CSendUserTraining_L26_img-1.png)

Once an entry is created(saved), a new version is generated. We will take a look at the versioning in the upcoming episodes.

# **Video: Entries**

The following video provides an overview of Entries in Contentstack.

# **Exercise 4 Video**

Follow along with the video to practice using Entries and Content Types.

# **Understanding with an example**

*   If you have created a content type, ‘Blog Page,’ you can create a new entry for this content type.
    

The number of entries that can be created depends on the content type you have made. If the type is ‘Single’ for a content type, you can only create a single entry. You can create multiple entries if the type is ‘Multiple’ for a content type.

Once an entry has been created, you can find the basic information/metadata about that entry on the right sidebar.

The metadata includes information such as the following:

*   Entry ID \- Defines the unique ID for an entry.
    
*   Content Type ID \- Defines the unique Content Type ID for an entry.
    
*   Created By \- Defines the name of the user who created the entry.
    
*   Created At \- Defines the date and time when the entry is made.
    
*   Modified By \- Defines the name of the user who modified the entry.
    
*   Modified At \- Defines the date and time when the entry is modified.
    

Apart from these, you can learn about ‘In which Content Type this entry is referenced’ and its ‘Localization Status.’ We will be looking at metadata in the video walkthrough below.

You can perform the following actions on entries:

*   Create and Update entries.
    
*   Delete entries permanently from your stack.
    
*   [Publish entries](https://www.contentstack.com/docs/content-managers/author-content/publish-an-entry/) to a specific **environment(s)** and **locale(s)**.
    
*   [Unpublish entries](https://www.contentstack.com/docs/content-managers/author-content/unpublish-an-entry/) from the particular environment(s) and locale(s).
    
*   Locate entries easily using search and labels.
    

Entry Comments:

Contentstack’s ‘[Comments](https://www.contentstack.com/docs/content-managers/author-content/about-entry-comments/)’ feature allows you to add comments to fields in the entry editor and collaborate with other Contentstack users across the content creation and review processes. You can add a comment or mention other users using the “@” character.

Entry Tags: Contentstack provides a ‘[Tag Field](https://www.contentstack.com/docs/developers/how-to-guides/reference-field-vs-select-field-vs-tags-field/#tags)’ default entry field. Whenever you create a new entry, you can add tags to that entry. The applied tags are visible on the entry list page. It is best to use tags if you plan to search entries using **Contentstack’s Advanced Search**. This is not recommended if you wish to retrieve entries (by filtering) using APIs.

**Quick Tips**:

*   While the max query limit is 100 for the Reference field.
    
*   You can Tag up to 50 tags per Entry.
    

# **Further Reading**

*   [About Entries](https://www.contentstack.com/docs/content-managers/author-content/about-entries/)

#### Key takeaways

- Connect **Entries** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 27 — Entries Exercise

<!-- ai_metadata: {"lesson_id":"27","type":"text","duration_minutes":1,"topics":["Entries","Exercise"]} -->

#### Lesson text

## Hello folks! 

*   Create new **ENTRIES** for the '**Character**' Content Type with the following heroes.
    

1.  Royal Defender
    
2.  Wild West Warrior
    

*   In the above entries, add appropriate content like Name, Description, Powers, etc. (Make sure you fill all the fields)
    
*   **ADD** the appropriate **ASSETS** that you uploaded in **Assignment 1**.
    
*   **SAVE** the entries.
    
*   Navigate to the '**Composable Heroes**' entry (Super Hero Gallery Page Content Type).
    
*   In the Character field, click **Choose Existing Entry** and select the character entries 'Royal Defender' and 'Wild West Warrior' to reference them.
    
*   Click add selected references.
    
*   **SAVE** the entry.
    
*   Navigate to the '**Composable Heroes Landing Page**' entry (Super Hero Landing Page Content Type).  
    
*   Add the modular block named '**Hero Banner**' and fill in the details.
    
*   **SAVE** the entry.
    

Bingo! You have completed the exercise successfully. Go ahead to submit the output of your practice.

#### Key takeaways

- Connect **Entries Exercise** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 28 — Versioning

<!-- ai_metadata: {"lesson_id":"28","type":"text","duration_minutes":1,"topics":["Versioning"]} -->

#### Lesson text

Contentstack allows users to create multiple entry and asset **versions** of the content.

# Video: Versioning

The following video provides an overview of how versioning works in Contentstack.

# **Understanding with an example**

**Entry Versioning:**

*   It helps users to view, manage, and compare the content of the required versions.
    
*   By default, entry versions are identified with numbers. For each new version created (upon entry save), the version is incremented  (e.g., Version 1, Version 2, and so on).
    

![CSendUserTraining\_L28\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blte5f457abf23cf51f/67ddcb54f7eccc711e90dd30/CSendUserTraining_L28_img-1.png)

**Asset Versioning:**

*   When you update an asset by changing the file, title, description, or tags, Contentstack creates a new asset version. This allows you to view the asset's previously saved/published versions, get the publishing details (who published it, when, and where), consider the older version, and restore the earlier version if required.
    
*   By default, asset versions are identified with numbers (e.g., Version 1, Version 2).
    

![CSendUserTraining\_L28\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt2090e96cb5f72e61/67ddcb6d3a0f38133e00f018/CSendUserTraining_L28_img-2.png)

For easy identification, you can re-assign/rename a version name (e.g., Christmas Sale, Production Ready, Do Not Edit) to an entry/asset version.

**Potential Use Case**:

*   Versioning is a great feature to keep track of all content update history and is helpful for editors to hassle-free roll back to previous versions.
    
*   Users can assign proper names to each version, according to their choice, for easy identification.  
    **Example:** _You can set ‘Friday Sale’ as a version name for entry with Content of Promotion which could be scheduled for a specific duration and can be rollback to the previous version._
    

# **Further Reading**

*   [About Entry Versions](https://www.contentstack.com/docs/content-managers/author-content/understanding-entry-versions/)
    
*   [About Asset Versions](https://www.contentstack.com/docs/content-managers/author-content/about-asset-versioning/)

#### Key takeaways

- Connect **Versioning** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 29 — Localization

<!-- ai_metadata: {"lesson_id":"29","type":"text","duration_minutes":1,"topics":["Localization"]} -->

#### Lesson text

Contentstack has a sophisticated, multilingual content capability. It allows you to create and publish entries in any language. When creating entries in other languages, they inherit data initially from the fallback language until they are **localized**.

Contentstack comes with over [200 pre-configured locales](https://www.contentstack.com/docs/developers/multilingual-content/list-of-supported-languages/) and their respective language codes. Further locales can be added through the Contentstack interface.

Every Stack has a master language as default while creating the Stack. And once we add languages to our Stack, **localization** can be added to an entry.

![CSendUserTraining\_L29\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7bc35dc6ebcaecf9/67ddcbb817f7b42c590d0618/CSendUserTraining_L29_img-1.png)

# Video: Localization in Contentstack

The following video provides an overview of how to work with localization in Contentstack.

# **Understanding with an example**

Consider a stack whose Master or Default language is English(United States). We can add multiple other languages to the stack, such as French(France), French(Belgium), Spanish(Spain), Spanish(Mexico), etc. While adding a new language, you should select its fallback language.

Take a look at the diagrams below to better understand how languages and fallback languages work in Contentstack:

![CSendUserTraining\_L29\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4595f878b4b6632a/67ddcbd137e25a4ff11e4b71/CSendUserTraining_L29_img-2.png)

**Fallback language:**

A fallback language is the parent language from which a given language inherits data. It need not necessarily be the Master or Default language.  
Example: In the diagram below, English(United States) is a fallback language of French(France), and French(France) is a fallback language of French(Belgium). Suppose an entry is created in English(United States). When you try to switch this entry to French(France), and it is unlocalized, it will fetch the entry content from English(United States). Similarly, when you switch this entry to French(Belgium), and it is unlocalized, it will fetch the entry content from French(France), which is subsequently brought from English(United States).

**Localization:**

Consider a scenario where a ‘Blog Webpage’ wants to fetch published content from the English(United States) language. The content is brought from the ‘Blog Entry’ English(United States). Now, consider another scenario where the ‘Blog Webpage’ wants to fetch published content from the French(France) language, but the entry has not yet been localized for the French(France). In this case, the content is fetched from its fallback language, i.e., English(United States). Also, it will serve the same version of entry as that of English(United States).

![CSendUserTraining\_L29\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7585ad5c055bf1e6/67ddcbe8986725c183888e7f/CSendUserTraining_L29_img-3.png)

Now, consider another scenario where the ‘Blog Webpage’ wants to fetch published content from the French(France) language, and the entry has been localized for the French(France). In this case, the content is fetched from French(France), and it will cease to bring entry from its fallback language, i.e., English(United States). Also, it will create a new version for that entry.

![CSendUserTraining\_L29\_img-4.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltfb765f2e5da7ba76/67ddcc0720a3dccde7f82ca7/CSendUserTraining_L29_img-4.png)

  
**Potential Use Case**:

*   Localization is a great feature to solve a use case where we need multiple copies of the same content in different languages and countries.
    
*   Using the Custom Locale feature, you can achieve some use cases where you want to copy content for a specific country irrespective of language.
    

**Quick Tips**:

*   Contentstack allows one level of data inheritance for fallback languages and limits from adding a fallback language (other than the master language) for the language that is already set as a fallback for another language.
    

# **Further Reading**

*   [About Localization](https://www.contentstack.com/docs/developers/multilingual-content/about-localization/)
    
*   [About Fallback Languages](https://www.contentstack.com/docs/developers/multilingual-content/about-fallback-languages/)

#### Key takeaways

- Connect **Localization** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 30 — Environments

<!-- ai_metadata: {"lesson_id":"30","type":"text","duration_minutes":1,"topics":["Environments"]} -->

#### Lesson text

### **Publishing Power**

**"A Knowledge Assimilated without Application is of no Use"**

                                     - _The Technomancer (_Wisdom weaver from Composable Heroes)

Understanding the significance of serving content from Contentstack to the website is crucial. Just as Technomancer carefully chooses the perfect commander for each role, he has assembled a team of Content Managers led by Royal Sanctuary. Together, they are eager to delve into the world of previewing and serving content, seeking to expand their knowledge in this realm.

![CSendUserTraining\_L30\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltb43943a3576d8f84/67ddcc75a6d88e103d0539b3/CSendUserTraining_L30_img-1.png)

![CSendUserTraining\_L30\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt39f927c0ea05b436/67ddcc8c20a3dc2c6cf82cb2/CSendUserTraining_L30_img-2.png)

  

The team requires assistance in:

*   Previewing content changes before they are served on the website
    
*   Managing multiple content types at the same time
    
*   Removing content from the website as needed
    

The Technomancer can foresee that it's time to make the content available to the general public.

**In this episode, you'll learn how to publish, unpublish and track the same for content.**

# **What are Environments****?**

A **publishing environment** refers to one or more deployment servers or a content delivery destination (webpage address) where you will publish your content (entries or assets).

An environment allows users to publish their content on the destination URL. After you create an entry, you will publish it on an environment.

![CSendUserTraining\_L30\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt50b60166c16c87c8/67ddcca3a71458a203b9ba75/CSendUserTraining_L30_img-3.png)

![CSendUserTraining\_L30\_img-4.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt19ca049fd3d030d0/67ddccc2f7eccc65a590dd41/CSendUserTraining_L30_img-4.png)

# **Understanding with an example**

In a real-world scenario, Developers may publish their content to the ‘Development’ environment to test their changes before handing it over to the QA team. The QA team can test the content on a separate ‘QA’ environment. A client can try the same on their own ‘UAT(User Acceptance Testing)’ environment before publishing it onto the Production environment.

Each environment may serve the same or different versions of content.

The most common publishing environments used are development, staging, and production.

The diagram below provides an example:

![CSendUserTraining\_L30\_img-5.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt3879c1ee240a09de/67ddccd9632b93546fd4a702/CSendUserTraining_L30_img-5.png)

**Potential Use Case**:

*   By setting up Testing, Staging, and Production environments, content changes can go through multiple checkpoints before its released to production to mitigate any breaking changes.
    
*   Environments help segregate content for platforms or devices(Mobile/Desktop).
    

# **Further Reading**

*   [About Environments](https://www.contentstack.com/docs/developers/set-up-environments/about-environments/)

#### Key takeaways

- Connect **Environments** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 31 — Live Preview

<!-- ai_metadata: {"lesson_id":"31","type":"text","duration_minutes":1,"topics":["Live","Preview"]} -->

#### Lesson text

**Live Preview** allows content managers to preview content without publishing it to an environment or saving the changes made. The content changes you make reflect in the preview pane in real-time.

You can also preview your content changes across multiple channels, such as mobiles, tablets, and desktops. This flexibility allows you to ensure website content looks precisely how you intended and thus helps achieve omnichannel content delivery.

![CSendUserTraining\_L31\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blted1f6edd282a7203/67ddcd2e782bfb01066f5af3/CSendUserTraining_L31_img-1.png)

# Video: Contentstack's Live Preview

The following video demonstrates the Live Preview feature.

# **Understanding with an example**

Content managers always preview their content before deploying it on production. With the Live Preview feature, you can edit your content and view the changes you make in real-time without saving or publishing to a live website.

To do this, perform the following steps:

*   Once the developer has configured Live Preview for your stack, you can preview entry content across all entries of your stack. Click on the Live Preview icon in the right sidebar of the entry editor page to open the preview window for your entry.
    
*   While hovering over blocks in the preview pane, you will see an Edit button. If you need to edit any block, click on this edit button to be redirected to the corresponding field on your entry page.
    
*   If a block of content is referenced from another entry, when you click the Edit button, you will be redirected to the corresponding field within the specific entry. Make changes to the field and watch them reflect in the preview pane in real-time.
    
*   Once you know the changes, you can publish your content to the production site.
    

We will be looking into publishing in the upcoming episodes.

**Potential Use Case**:

*   Live Preview is an excellent feature for editors to preview content changes hassle-free and quickly while editing any field content in a side-by-side panel without saving and publishing to reduce overall time to audit changes.
    
*   Live Preview also allows some amount of device specific previews like Desktop and Mobile view.
    

**Quick Tips**:

*   Live Preview feature can be configured for websites build with Contentstack's REST APIs integration and does not work for websites that use a third-party website builder or CMS to generate HTML.
    
*   Currently Live Preview not compatible with native mobile applications and the preview websites must be hosted over HTTPS.
    
*   You can configure tight User Access and Roles around Live Preview to decide what user role have permission to a specific environment or language in which the entry has been published to access to Live Preview.
    

# **Further Reading**

*   [About Live Preview](https://www.contentstack.com/docs/content-managers/author-content/about-live-preview/)
    
*   [Live Preview Scenarios](https://www.contentstack.com/docs/content-managers/author-content/live-preview-real-world-scenarios/)

#### Key takeaways

- Connect **Live Preview** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 32 — Publishing

<!-- ai_metadata: {"lesson_id":"32","type":"text","duration_minutes":1,"topics":["Publishing"]} -->

#### Lesson text

Once you create an entry/asset and have environments in place, you can **publish** to them. By publishing, you get the content served in that particular environment.

# Video: Publishing Content in Contentstack

The following video demonstrates how to publish content in Contentstack.

# **Understanding with an example**

*   If you have a ‘Blog entry’ that you want to display on your website, you will need to publish it to make it available on your website. Once you publish it on a particular environment like ‘development,’ you can fetch that entry using the API on your website.
    

While publishing, the following options will appear:

*   **The environment** - You can select the environment(s) to which you want to publish the entry.
    
*   **The language** - You can select which language to publish the entry.
    
*   **The time of publishing(Now/Later)** - You can choose the time to publish the entry. If you choose ‘Now’ and proceed, the entry will be published immediately. If you choose ‘Later,’ you will be asked to select the date and time. Once you set the date and time and proceed, the entry will get published on the specific date and time.
    
*   **With or without the references attached to the entry** - When you complete selecting the above options, you will be prompted to ask to proceed with ‘With References’ or ‘Without References.’ Suppose your entry consists of any referenced entries and assets. In that case, you can select ‘With References,’ which will publish the main parent entry and its references and assets. However, you can choose and select ‘Without References,’ which will only publish the main parent entry.
    

![CSendUserTraining\_L32\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt5252f5ac77d7d0b0/67ddcd7ef7eccc394a90dd4a/CSendUserTraining_L32_img-1.png)

![CSendUserTraining\_L32\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt27205a5f165c1566/67ddcd9417f7b4643e0d0633/CSendUserTraining_L32_img-2.png)

Similarly, you can Unpublish the published entries and assets using the ‘Unpublish’ option in an entry and asset. When you unpublish the content, it will cease to serve the content on your website for that particular environment and language.

**Potential Use Case**:

*   Publishing is a feature to make content available for the presentation layers to specific environments or languages.
    
*   To schedule publishing and unpublishing of content for a timed Business need, like a holiday promotion banner or a new product launch notice where you need a certain content on the website for a specific duration.
    

# **Further Reading**

*   [About Publishing Content](https://www.contentstack.com/docs/content-managers/publish-content/)

#### Key takeaways

- Connect **Publishing** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 33 — Publish Queue

<!-- ai_metadata: {"lesson_id":"33","type":"text","duration_minutes":1,"topics":["Publish","Queue"]} -->

#### Lesson text

When the Content Manager publishes an entry and asset, the system puts the action into a **publish queue**.

Publish/unpublish activities in this queue are performed one at a time, almost at high speed. This eliminates waiting for an entry to be published before moving on to the next item. You can keep publishing items and let the system manage the queue.

![CSendUserTraining\_L33\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7f44a98f556a3048/67ddcdd317f7b498a40d0639/CSendUserTraining_L33_img-1.png)

# Video: The Publishing Queue

The following video provides an overview of the publishing queue.

# **Understanding with an example**

*   If you publish an entry for a Blog post/article, the entry and all its referenced entries and assets are sent for publishing, which can be tracked in the Publish Queue.
    

Whenever you publish an entry or an asset, Contentstack attaches a publish status icon to the corresponding publishing environment for that item on the entries list page. This publish status icon either appears as an ‘i’ icon or a ‘clock’ icon.

The ‘i’ icon either appears in green or orange color.

Each color indicates specific information about the publishing status of the entry or asset in that particular environment.

Let’s understand what the different colors of the publish status icon (i) stand for:

*   **Green** - Indicates that the latest version of the entry has been published to the specified environment.
    
*   **Orange** - Indicates that an older version of the entry has been published to the specified environment.
    
*   The ‘clock’ icon appears **gray** and indicates that an entry has been scheduled for publishing later.
    

![CSendUserTraining\_L33\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt24b68e5619165014/67ddcdf1c566eedf635e0588/CSendUserTraining_L33_img-2.png)

# **Further Reading**

*   [About Publish Queue](https://www.contentstack.com/docs/content-managers/publish-content/view-publish-status-of-entries-assets-in-publish-queue/)

#### Key takeaways

- Connect **Publish Queue** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 34 — Releases

<!-- ai_metadata: {"lesson_id":"34","type":"text","duration_minutes":1,"topics":["Releases"]} -->

#### Lesson text

You can define a ‘**Release**’ as a set of entries and assets that must be deployed (published or unpublished) simultaneously to a particular environment.

This is useful, particularly at the time of an event or announcement, or product update.

![CSendUserTraining\_L34\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blte48c480e370bc04e/67ddce45b1a1f336903efd7c/CSendUserTraining_L34_img-1.png)

# Video: Releases in Contentstack

The following video shows how to manage releases in Contentstack.

# **Exercise 5 Video**

Follow along with the video to practice publishing in Contentstack.

# **Understanding with an example**

*   If you have a product launch, press release, or sales promotion and you have to publish multiple entries/assets at one go without consuming more time, you can create a ‘Release,’ add those entries/assets to the release, and ‘Deploy’ it at the specified time that you need.
    
*   You can even schedule the release action(publish/unpublish).
    

You can create a new ‘Release’ from the release page by clicking on the left sidebar, ‘Release Icon.’ Once the release is created, you can add the entry and assets from an entry page. After you open an entry, you can click on the ‘Three Dots’ at the bottom right and click ‘Add To Release’ which will prompt you with a dialog box to select the  ‘Release’ and choose to add it to the ‘Publishing’ or ‘Unpublishing’ action. You can also create a new ‘Release‘ from the dialog box by clicking on ‘Create New Release.’

You can deploy the release from the release page by clicking on ‘Deploy’ and selecting the environments and time to deploy.

Contentstack also allows you to update items (assets and entries) in a release to their latest versions. This feature helps you publish up-to-date content whenever you deploy the release to an environment. You can collectively update all items in the release to their latest versions and choose not to update any particular item individually.

You cannot update the release items under the following scenarios:

*   If the release is locked(A release gets locked when you deploy it at least once).
    
*   If the updated version of an entry has new references, the references are not automatically added to the release. You need to add them manually.
    
*   If the latest version of an entry is in the in-progress state, you cannot update the entry.
    

### Best Practices To Use

*   Always use this to address events that need to do the bulk publish/unpublish activity.
    

**Potential Use Case**:

*   Always use this to address events that need to do the bulk publish/unpublish activity like bulk publish content for specific promotions where all editor's teams add and review entries to a release before publishing.
    
*   Promotions are a good use case where we can create a release of entries and assets and set promotion content for a specific duration using scheduled publishing and unpublishing release items.
    

**Quick Tips**:

*   The Release title can be up to 50 character long.
    
*   The maximum number of items that can be added to a Release is 500 and in a single instance via API, is 25.
    
*   The '**Update release items to their latest versions'** this option does not automatically update new references and needs to be done manually and don't update the release entries with the latest in-progress version.
    

# **Further Reading**

*   [About Releases](https://www.contentstack.com/docs/content-managers/create-and-manage-releases/about-releases/)

#### Key takeaways

- Connect **Releases** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 35 — Understanding the Management Tools

<!-- ai_metadata: {"lesson_id":"35","type":"text","duration_minutes":1,"topics":["Understanding","the","Management","Tools"]} -->

#### Lesson text

## **Managing Processes**

**The Lightning Excavator** is concerned about the content available for all Composable Heroes. Initially, he had assigned a few users to the Stack, but it appears that more users will be required as more content is created.

The next challenge is ensuring all users adhere to a streamlined content delivery process. **Royal Sanctuary** will lead this operation. It's time for you to delve into Contentstack's management capabilities to provide solid content organization.

Goals that must be attained:

*   Add new users to the account.
    
*   Create an order of steps to manage the content delivery process.
    
*   Examine the content and make suggestions for improvements.
    

The entire Composable Heroes team is eager to harness this power.

**In this episode, you'll learn how to add and manage users and user roles, content workflow, and other content management tools.**

# **What are** **User and User Roles****?**

All accounts registered with Contentstack are known as **Users**. A stack can have many users with varying permissions and roles. Users with the required permissions can invite others to collaborate on a stack.

**User Roles** prescribe what information the Authorized User can access, use, and disclose within the Contentstack.

![CSendUserTraining\_L35\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt76c82bf1db8060ac/67ddce99dd73e3a70cbf39bb/CSendUserTraining_L35_img-1.png)

![CSendUserTraining\_L35\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt0a4c2effdbebf830/67ddceb0037e2b158f22df58/CSendUserTraining_L35_img-2.png)

# Video: Users, Roles and Permissions in Contentstack

The following video shows how to add users and roles, and how to manage permissions in Contentstack.

# **Understanding with an example**

Contentstack provides four user roles out of the box, namely:

*   Owner - Each stack can have only one Owner. Creating a stack in Contentstack makes you the Owner of the stack.
    
*   Admin \- The Admin role has more rights than a Developer and fewer than the Owner.
    
*   Developer \- A Developer is a person who creates the site's structure or defines the way content will appear on the site.
    
*   **Content Manager** - A Content Manager is a user who works with/on the content of a stack.
    
*   **Custom Role** - In addition to the predefined system roles, you can add custom roles by defining specific permissions and assigning these roles to the users of a stack. You have fine-grained control over permissions. You can set permissions at the entry, field, and asset levels.  
    Examples:
    

1.  The 'Content Writer' role can WRITE only entries of a content type.
    
2.  The 'SEO Expert' role can EDIT only the SEO fields for entries of a content type.
    
3.  The 'Content Publisher' role can READ and PUBLISH only entries of a content type.
    

The diagrams below depict the User Role Privileges:

![CSendUserTraining\_L35\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta93003fc3bce59fd/67ddceca17f7b4425c0d064e/CSendUserTraining_L35_img-3.png)

![CSendUserTraining\_L35\_img-4.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltab0cab5756e09a03/67ddcee9c5de5376cbd2e7f0/CSendUserTraining_L35_img-4.png)

![CSendUserTraining\_L35\_img-5.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt896e52b4233278fa/67ddcf01c5de533024d2e7f4/CSendUserTraining_L35_img-5.png)

**Potential Use Case**:

*   User Roles are essential to set up accessibility across the stack based on usage and user tasks. Content Editors need access to entry but not content modeling.
    
*   Custom roles can be used to set up:
    

1.  **Entry-level Permissions** \- All permissions to the “Products” content type entries.
    
2.  **Field-level permissions** - CANNOT EDIT the Description field of the Products entry.
    
3.  **Asset-level permissions** - Specific permissions on specific assets or assets folders.
    
4.  **Language-level permissions** - Translation role to perform translation activity to a specific language with certain permissions.
    
5.  Environment
    

**Quick Tips**:

*   The default maximum number of users that can be added in an organization is 1000.
    

# **Further Reading**

*   [About Stack Users](https://www.contentstack.com/docs/developers/invite-users-and-assign-roles/about-stack-users/)
    
*   [Different Types of Roles](https://www.contentstack.com/docs/developers/invite-users-and-assign-roles/types-of-roles/)

#### Key takeaways

- Connect **Understanding the Management Tools** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 36 — Workflows

<!-- ai_metadata: {"lesson_id":"36","type":"text","duration_minutes":1,"topics":["Workflows"]} -->

#### Lesson text

A **workflow** lets you define your team's content creation and review process. This enables users to maintain a systematic approach to reviewing and approving content.

![CSendUserTraining\_L356img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt59abc3a3207fe38e/67ddcf5545b229e638911b84/CSendUserTraining_L356img-1.png)

# **Understanding with an example**

Let's understand this using the below diagram:

![CSendUserTraining\_L36-img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4fa5ed43893adac6/67ddcf825e486dbbde71bb63/CSendUserTraining_L36-img-2.png)

The core part of creating a workflow is defining the stages of content creation. Once you have added these stages and enabled the workflow, the stages will be visible on every entry page of the corresponding content types of the stack. Workflows let content managers know the current content stage and allow them to control the stages of an entry.

We first need to understand a simple use case or scenario to create the stages.

**The Scenario:**

We need to create, review, and publish Blog posts/articles to ensure that the whole process happens smoothly without any intervention from users.

To accomplish this, we can create custom roles like:

*   **Content Writer** - Will only be able to create and update the entry of Blog posts/articles.
    
*   **Content Reviewer** - Will only review the content.
    
*   **Content Publisher** - Will only publish the content.
    

Based on these roles, the order of steps in the workflow should be as follows:

*   **Step 1** - The 'Content Writer' creates a draft of the content(creates entry). The 'Content Writer' then assigns it to the 'Content Reviewer' for review.
    
*   **Step 2** - If the 'Content Reviewer' approves of the quality, they should be able to assign it to the 'Content Publisher' for publishing.
    
*   **Step 3** - The 'Content Publisher' publishes the content.
    

If the content is unsatisfactory, the 'Content Reviewer' should be able to assign it back to the 'Content Writer' for changes. The 'Content Writer' will make the required changes and again assign it to the 'Content Reviewer' for approval.

**The Stages:**

Based on the above steps, we can define the stages for the workflow in Contentstack as follows:

*   **Draft Stage** - This is the stage where Step 1 will be executed. The 'Content Writer' can then update the stage to 'Review.'
    
*   **Review Stage** - This is the stage where Step 2 will be executed. The 'Content Reviewer' can then update the stage to 'Publish.'
    
*   **Publish Stage** - This is the stage where Step 3 will be executed.
    

The number of stages and the users/user roles may vary depending on the use case. For more control, you can also configure options to restrict user roles from switching between stages.

While changing the stages, the respective users/user roles can do the following activities:

*   Switch to any of the available roles.
    
*   Set the Due date for the task(the task the user/user role must perform at the particular stage. Example: Review the Content).
    
*   Assign the task to the users/user roles.
    
*   Notify via email(When enabled, the information about the task is sent via email to the assigned users/user roles)
    
*   Comments(To add any specific comments for the assigned users/user roles)
    

![bc6ebe14-a6f6-4713-9b25-cdf30cdc9730-Screenshot\_2023-05-03\_at\_1.05.24\_PM.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7939c43045409a9b/67ddcf9aa714585585b9baa2/bc6ebe14-a6f6-4713-9b25-cdf30cdc9730-Screenshot_2023-05-03_at_1.05.24_PM.png)

Additionally, workflow [tasks](https://www.contentstack.com/docs/developers/set-up-workflows-and-publish-rules/about-workflow-tasks/) l allow you to track pending tasks assigned to users. We will review this in the next episode.

**Potential Use Case**:

*   In a typical media company's content creation and publishing process where we need all entries should go through multiple teams like Draft, Translation, SEO, and Review stages to add all necessary checks to verify before it gets published to production.
    

**Quick Tips**:

*   You can configure 10 workflows per Stack by default.
    
*   While a minimum of 2 stages are required per workflow, the maximum number of stages a workflow can have is 20.
    

# **Further Reading**

*   [About Workflows](https://www.contentstack.com/docs/developers/set-up-workflows-and-publish-rules/about-workflows/)
    
*   [Workflow Stages](https://www.contentstack.com/docs/developers/set-up-workflows-and-publish-rules/about-workflow-stages/)

#### Key takeaways

- Connect **Workflows** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 37 — Tasks

<!-- ai_metadata: {"lesson_id":"37","type":"text","duration_minutes":1,"topics":["Tasks"]} -->

#### Lesson text

**Tasks** or **The Workflow Tasks** page is a collection of all your pending tasks. Whenever someone assigns you to work on a workflow stage on an entry or if someone sends you an entry for publishing or unpublishing approval, it is added to your Tasks page. Each stack has a separate Tasks section.

This enables you to get an overview of the approval requests specific to the content of your stack.

![CSendUserTraining\_L37\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt02308f7ebd09e85e/67ddcfecc9b8d442f5d14759/CSendUserTraining_L37_img-1.png)

# Video: Workflows & Tasks in Contentstack

The following video describes how workflow tasks are assigned and how to access them in Contentstack.

# **Understanding with an example**

*   When The ‘Content Writer’ creates a draft of the content(creates an entry) and assigns it to the ‘Content Reviewer’ for review, the ‘Content Reviewer’ gets notified about this task in the left sidebar option under the  ‘Tasks’ icon.
    

Key points to remember:

*   Stack owners and administrators can view all the tasks assigned to different users.
    
*   Content managers and other custom roles with limited privileges cannot view the entire task list.
    
*   They can only view their tasks list. The docs link can include steps for getting to the Tasks section.
    

**Potential Use Case**:

*   If someone has assigned you to work on a workflow stage of an entry, this task will remain in your Tasks section until you work on the stage and assign it to some other user. This task section helps users to keep track of all assigned tasks with due dates and filters.
    

# **Further Reading**

*   [About Workflow Tasks](https://www.contentstack.com/docs/developers/set-up-workflows-and-publish-rules/about-workflow-tasks/)

#### Key takeaways

- Connect **Tasks** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 38 — Publish Rules

<!-- ai_metadata: {"lesson_id":"38","type":"text","duration_minutes":1,"topics":["Publish","Rules"]} -->

#### Lesson text

**Publish Rules** are conditions that you define for your content publishing. They allow you to govern whether entries can be published with or without someone’s approval, or only when the content is at a particular stage.

![CSendUserTraining\_L38\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltab3f600083a5d5d0/67ddd03d37e25a07371e4bb0/CSendUserTraining_L38_img-1.png)

# **Exercise Video**

Follow along with the video to practice governance, workflows, and permissions.

# **Understanding with an example**

*   You can define a publishing rule in which every entry first needs to be approved by a particular user, such as John Smith. Unless John Smith approves it, the entry cannot be published. Alternatively, if you define that the Stage should be Complete to be published, the entry will not be published unless the Complete Stage is reached.
    

Only the stack owner, the administrator, or the developer can define the Publish Rules.

Publish Rules are made up of two parts:

*   **Parameters** -  For every publish rule, you need to define the following parameters:
    

1.  **Environment** - The environment for which the publish rule will be applicable.
    
2.  **Content type** - The content type to which the publish rule will be applied.
    
3.  **Action** - Whether the publishing rule is for publish or unpublish (or both) action.
    
4.  **Language** - The language for which the rule is applicable.
    

Once you define the parameters, define a condition.

*   **Conditions** - You can use either or both of the following conditions for your publishing rule.
    

1.  **Approver** - Use this condition if you want to add an approver to all the entries that are being published or unpublished. Add the user(s)/role(s) who should be authorized to approve the publishing or unpublishing of an entry.  
    Example: If you assign 'John Smith' as the Approver, every entry sent for publishing or unpublishing (and meets the required parameters) will go to John Smith for approval. The entry cannot be published or unpublished unless John approves it. And, if you assign a role, let's say 'Content Approver,' as the Approver, every entry sent for publishing or unpublishing and meets the required parameters will go to every user assigned this role for approval. The entry cannot be published or unpublished unless any user assigned the 'Content Approver' role approves it.
    
2.  **Stage** - Use this condition to allow the publishing or unpublishing of an entry only if it has reached a particular workflow stage. When this condition is defined, an entry cannot be published or unpublished unless it comes to the defined Stage while creating content.  
    Example: If you have selected 'Complete' here, an entry (that matches the parameters defined above) cannot be published unless it reaches the Complete Stage.
    

Key points to remember:

*   Setting up publish rules is optional.
    
*   You must choose at least one condition (Approver(s) or Stage) for a publishing rule. You can select both if required, but at least one is mandatory.
    
*   A publishing rule with Approver (s) as the condition can work independently of workflows. This means you can add one or more publish rules (with Approver (s) under conditions) even if you have not added any workflows for your stack.
    

However, you will need at least one workflow to use the Stage condition for your publishing rule. Once a rule is in place, whenever a content manager attempts to publish or unpublish an entry on the specified environment, Contentstack will either send the entry for approval (if approvers are added as a condition) or check if the entry has reached the specified Stage (if the Stage is added as a condition). It will then return the response accordingly.

**Potential Use Case**:

*   Publish Rules are helpful to set up specific rules for any entry to be published in a particular environment or language with appropriate approvals.
    
*   You can setup a Publish Rule that no entry is allowed to be published on production till it does not reach an approved stage in the workflow.
    

# **Further Reading**

*   [About Publish Rules](https://www.contentstack.com/docs/developers/set-up-workflows-and-publish-rules/about-publish-rules/)
    
*   [About Publish Rule Components](https://www.contentstack.com/docs/developers/set-up-workflows-and-publish-rules/about-publish-rule-components/)

#### Key takeaways

- Connect **Publish Rules** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 39 — Comments and Discussions

<!-- ai_metadata: {"lesson_id":"39","type":"text","duration_minutes":1,"topics":["Comments","and","Discussions"]} -->

#### Lesson text

Contentstack provides features to comment on the entry fields and start discussions.The ‘**Comments**’ feature allows you to add comments to fields in the entry editor and collaborate with other Contentstack users across the content creation and review processes. You can add a comment or mention other users using the “@” character to start a discussion.

The ‘**Discussion**’ feature is a conversation you can have with other users of Contentstack over the content of a particular field.

![CSendUserTraining\_L39\_img-1.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta98f164ec56295a3/67ddd0876f6858ad16fdad73/CSendUserTraining_L39_img-1.png)

  

![CSendUserTraining\_L39\_img-2.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4911aa1642b95141/67ddd09ec5b83e3f88925091/CSendUserTraining_L39_img-2.png)

  

![CSendUserTraining\_L39\_img-3.png](https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt6efcd7c4cc86c29c/67ddd0b8c5b83e7700925095/CSendUserTraining_L39_img-3.png)

# **Understanding with an example**

You start a discussion when you add your first comment to a field in an entry. A discussion can consist of multiple comments. Each localized version of an entry can have multiple discussions running simultaneously. However, you cannot have discussions for unlocalized or older entry versions. You can view all the discussions that have taken place over the fields of an entry, whether active or resolved, under the Discussions section on the right sidebar.

To manage the discussions, you can perform the following actions:

*   **Resolve a Discussion** - When a discussion has served its purpose, you can resolve it, which marks it as done.
    
*   **Reopen a Discussion** - You can always reopen a resolved or deleted discussion from the Discussions tab in the right sidebar if you would like to continue the discussion.
    
*   **Relink a Discussion** - Some discussions are unlinked from their fields due to recent changes to the content type or the entry. This usually happens under the following scenarios:
    

1.  **Mark fields as multiple and vice versa** - Fields such as “Group,” “Modular Blocks,” or “Global” are constituted by grouping various fields. You can create discussions for each of their subfields. However, when you mark the parent field as “Multiple,” the discussion fails to recognize which subfield it was linked to. The same occurs when you revert a parent field set as “Multiple” to “Single.”
    
2.  **Metadata not provided via API(For Developers)** - You must pass the \_metadata parameter in the API request to identify each instance of a field marked as “Multiple.” When you do not pass the \_metadata parameter, the discussion fails to recognize the field instance it was linked to.  
    When a discussion is unlinked from a field, it moves to the ‘Active’ section in the right sidebar. The discussion continues to appear in the Unlinked state.
    

*   **View Discussions Timeline** - Under the Timeline section, you can view all the discussions that have taken place over the fields of an entry, whether active or resolved.
    

Apart from this, Contentstack also provides the ‘Comments’ feature for the JSON RTE. It allows you to add comments within the JSON Rich Text Editor. This feature helps you to collaborate with other Contentstack users across the content creation and review processes efficiently. You can tag/mention other users or roles using the “**@**” character within your comments. You can edit, resolve, view, and delete comments like that in other entry fields.

**Potential Use Case**:

*   Comments and Discussion is a powerful feature for editors to collaborate with Entry fields and, during the review process, to share review pointers for specific field content and tag User or User Roles so that they get notified via emails and easy navigation to commented Entry field.
    

**Quick Tips**:

*   While each field allows only one active discussion, but the JSON Rich Text Editor allows multiple active discussions.
    
*   One active discussion can be associated with each selected content block, text, and image within the JSON RTE.
    
*   The maximum number of active discussions allowed per entry, per locale, is 100 and 1000 comments per discussion.
    
*   The maximum message length allowed for each comment is 500 characters and 20 users/roles in a single comment..
    
*   While discussions or comments do not get export while exporting the entries; we cannot view comments for unlocalized or older entry versions.
    
*   You can only add comments to the subfields of ‘Group’ and ‘Global Fields,’ not the parent field as a whole. Similarly, you can only add comments to the fields inside each block of a “Modular Blocks” field, not to the parent field as a whole.
    

# **Further Reading**

*   [About Entry Comments](https://www.contentstack.com/docs/content-managers/author-content/about-entry-comments/)
    
*   [About Discussions](https://www.contentstack.com/docs/content-managers/author-content/about-discussions/)

#### Key takeaways

- Connect **Comments and Discussions** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 40 — EUT Summary

<!-- ai_metadata: {"lesson_id":"40","type":"text","duration_minutes":3,"topics":["EUT","Summary"]} -->

#### Lesson text

Thank you for completing the End User Training course and taking your first step to be a Composable Hero.

Through this course, you have learned the fundamentals of working with Contentstack. You should now be able to effectively navigate the Contentstack UI, manage and create content, comprehend how to publish, understand how to utilize permissions and workflows, make use of the advanced search, and have a foundational grasp of some additional features.  

Before you leave, please ensure to fill out the end-of-course survey in the next module. Your feedback is crucial to improving our learning experience for our users.

#### Key takeaways

- Connect **EUT Summary** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

## Resources & references

| Page | Companion Markdown |
| --- | --- |
| /courses/contentstack-end-user-training-eut-/headless-and-composable-contentstack | /academy/md/courses/contentstack-end-user-training-eut-/headless-and-composable-contentstack.md |
| /courses/contentstack-end-user-training-eut-/organization-and-stacks | /academy/md/courses/contentstack-end-user-training-eut-/organization-and-stacks.md |
| /courses/contentstack-end-user-training-eut-/building-the-content-structure | /academy/md/courses/contentstack-end-user-training-eut-/building-the-content-structure.md |
| /courses/contentstack-end-user-training-eut-/content-type-classification | /academy/md/courses/contentstack-end-user-training-eut-/content-type-classification.md |
| /courses/contentstack-end-user-training-eut-/labels | /academy/md/courses/contentstack-end-user-training-eut-/labels.md |
| /courses/contentstack-end-user-training-eut-/fields | /academy/md/courses/contentstack-end-user-training-eut-/fields.md |
| /courses/contentstack-end-user-training-eut-/single-line-textbox-field | /academy/md/courses/contentstack-end-user-training-eut-/single-line-textbox-field.md |
| /courses/contentstack-end-user-training-eut-/multi-line-textbox-field | /academy/md/courses/contentstack-end-user-training-eut-/multi-line-textbox-field.md |
| /courses/contentstack-end-user-training-eut-/url-field | /academy/md/courses/contentstack-end-user-training-eut-/url-field.md |
| /courses/contentstack-end-user-training-eut-/number-field | /academy/md/courses/contentstack-end-user-training-eut-/number-field.md |
| /courses/contentstack-end-user-training-eut-/boolean-field | /academy/md/courses/contentstack-end-user-training-eut-/boolean-field.md |
| /courses/contentstack-end-user-training-eut-/date-field | /academy/md/courses/contentstack-end-user-training-eut-/date-field.md |
| /courses/contentstack-end-user-training-eut-/file-field | /academy/md/courses/contentstack-end-user-training-eut-/file-field.md |
| /courses/contentstack-end-user-training-eut-/link-field | /academy/md/courses/contentstack-end-user-training-eut-/link-field.md |
| /courses/contentstack-end-user-training-eut-/select-field | /academy/md/courses/contentstack-end-user-training-eut-/select-field.md |
| /courses/contentstack-end-user-training-eut-/reference-field | /academy/md/courses/contentstack-end-user-training-eut-/reference-field.md |
| /courses/contentstack-end-user-training-eut-/group-field | /academy/md/courses/contentstack-end-user-training-eut-/group-field.md |
| /courses/contentstack-end-user-training-eut-/modular-blocks-field | /academy/md/courses/contentstack-end-user-training-eut-/modular-blocks-field.md |
| /courses/contentstack-end-user-training-eut-/global-field | /academy/md/courses/contentstack-end-user-training-eut-/global-field.md |
| /courses/contentstack-end-user-training-eut-/html-based-rich-text-editor-field | /academy/md/courses/contentstack-end-user-training-eut-/html-based-rich-text-editor-field.md |
| /courses/contentstack-end-user-training-eut-/json-rich-text-editor-field | /academy/md/courses/contentstack-end-user-training-eut-/json-rich-text-editor-field.md |
| /courses/contentstack-end-user-training-eut-/field-visibility-rules | /academy/md/courses/contentstack-end-user-training-eut-/field-visibility-rules.md |
| /courses/contentstack-end-user-training-eut-/building-the-content | /academy/md/courses/contentstack-end-user-training-eut-/building-the-content.md |
| /courses/contentstack-end-user-training-eut-/assets | /academy/md/courses/contentstack-end-user-training-eut-/assets.md |
| /courses/contentstack-end-user-training-eut-/assets-exercise | /academy/md/courses/contentstack-end-user-training-eut-/assets-exercise.md |
| /courses/contentstack-end-user-training-eut-/entries | /academy/md/courses/contentstack-end-user-training-eut-/entries.md |
| /courses/contentstack-end-user-training-eut-/entries-exercise | /academy/md/courses/contentstack-end-user-training-eut-/entries-exercise.md |
| /courses/contentstack-end-user-training-eut-/versioning | /academy/md/courses/contentstack-end-user-training-eut-/versioning.md |
| /courses/contentstack-end-user-training-eut-/localization | /academy/md/courses/contentstack-end-user-training-eut-/localization.md |
| /courses/contentstack-end-user-training-eut-/environments | /academy/md/courses/contentstack-end-user-training-eut-/environments.md |
| /courses/contentstack-end-user-training-eut-/live-preview | /academy/md/courses/contentstack-end-user-training-eut-/live-preview.md |
| /courses/contentstack-end-user-training-eut-/publishing | /academy/md/courses/contentstack-end-user-training-eut-/publishing.md |
| /courses/contentstack-end-user-training-eut-/publish-queue | /academy/md/courses/contentstack-end-user-training-eut-/publish-queue.md |
| /courses/contentstack-end-user-training-eut-/releases | /academy/md/courses/contentstack-end-user-training-eut-/releases.md |
| /courses/contentstack-end-user-training-eut-/understanding-the-management-tools | /academy/md/courses/contentstack-end-user-training-eut-/understanding-the-management-tools.md |
| /courses/contentstack-end-user-training-eut-/workflows | /academy/md/courses/contentstack-end-user-training-eut-/workflows.md |
| /courses/contentstack-end-user-training-eut-/tasks | /academy/md/courses/contentstack-end-user-training-eut-/tasks.md |
| /courses/contentstack-end-user-training-eut-/publish-rules | /academy/md/courses/contentstack-end-user-training-eut-/publish-rules.md |
| /courses/contentstack-end-user-training-eut-/comments-and-discussions | /academy/md/courses/contentstack-end-user-training-eut-/comments-and-discussions.md |
| /courses/contentstack-end-user-training-eut-/eut-summary | /academy/md/courses/contentstack-end-user-training-eut-/eut-summary.md |

## Supplement for indexing

### Content summary

Welcome, brave and ambitious learners, to the End User Training course! You have taken the first step towards unleashing your inner Composable Hero and becoming a master of the Contentstack platform. With the power of MA… Welcome, brave and ambitious learners, to the End User Training course! You have taken the first step towards unleashing your inner Composable Hero and becoming a master of the Contentstack platform. With the power of MACH, you will learn how to develop and manage content that is not bound by the constraints of traditional systems. Instead, you will be able to create dynamic, headless websites that offer exceptional flexibility and versatility. By mastering the fundamentals, you will be equipped with the tools to rescue businesses from outdated and cumbersome systems and guide them toward a br

### Retrieval tags

- cms
- contentstack
- content editor
- contentstack-end-user-training-eut-
- Headless
- and
- Composable
- Organization
- Stacks
- Building
- the
- Content
- Structure
- Type

### Indexing notes

Chunk at each "### Lesson NN — Title" heading; copy lesson_id and topics from the preceding HTML comment into chunk metadata for RAG filters.
Course slug: contentstack-end-user-training-eut-. Union of lesson topic tokens: Headless, and, Composable, Contentstack, Organization, Stacks, Building, the, Content, Structure, Type, Classification, Labels, Fields, Single, Line, Textbox, Field, Multi, URL, Number, Boolean, Date, File, Link, Select, Reference, Group, Modular, Blocks, Global, HTML, based, Rich, Text, Editor, JSON, Visibility, Rules, Assets, Exercise, Entries, Versioning, Localization, Environments, Live, Preview, Publishing, Publish, Queue, Releases, Understanding, Management, Tools, Workflows, Tasks, Comments, Discussions, EUT, Summary.
Do not embed or retrieve LMS-only quiz items or mastery exam answer keys from this export.

### Asset references

| Label | URL |
| --- | --- |
| CSendUserTraining\_L1\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt3a7cd737dd1ffba6/67ddbda1460eb4862f947c10/CSendUserTraining_L1_img-1.png` |
| CSendUserTraining\_L1\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt01572978ba8e1ffc/67ddbdbe314d67533d1b73d9/CSendUserTraining_L1_img-2.png` |
| CSendUserTraining\_L1\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta3f1c041a58ea182/67ddbdd9efd8a91bdd4c05cf/CSendUserTraining_L1_img-3.png` |
| CSendUserTraining\_L2\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc0f04bffbc8a0ffa/67ddbeb52d0b989dcbfd0a27/CSendUserTraining_L2_img-1.png` |
| CSendUserTraining\_L2\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt814406ff649a7996/67ddbec237e25a80c01e4abc/CSendUserTraining_L2_img-2.png` |
| CSendUserTraining\_L3\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt97a9e860b93948ce/67ddbf4cc5b83ec006924fb6/CSendUserTraining_L3_img-1.png` |
| CSendUserTraining\_L4\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltec6c7f763733b58c/67ddbf9637e25a9d011e4acd/CSendUserTraining_L4_img-1.png` |
| CSendUserTraining\_L4\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltcae3098603ecc0a0/67ddbfaf986725d6e8888e13/CSendUserTraining_L4_img-2.png` |
| CSendUserTraining\_L4\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt29b808c0eb3c4927/67ddbfc9314d678f8c1b73f0/CSendUserTraining_L4_img-3.png` |
| CSendUserTraining\_L5\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt15bd7e47554c7fb3/67ddc00b983a65c32d3b8054/CSendUserTraining_L5_img-1.png` |
| CSendUserTraining\_L6\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt99a3f0f16eb3528d/67ddc069443bd64be5f1cf90/CSendUserTraining_L6_img-1.png` |
| Image | `https://learnupon.s3.eu-west-1.amazonaws.com/575824/original/d3efe4db-b1fb-451d-9d89-c1046d76786a-Title_Field.png` |
| CSendUserTraining\_L6\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt976d2cd51e2babba/67ddc081efd8a90eca4c05ed/CSendUserTraining_L6_img-2.png` |
| CSendUserTraining\_L6\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt21be6e4407267d3c/67ddc099c5b83e9013924fc4/CSendUserTraining_L6_img-3.png` |
| CSendUserTraining\_L7\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt70ae10a5e6fa50b7/67ddc0ef0c6f5530f61fd388/CSendUserTraining_L7_img-1.png` |
| CSendUserTraining\_L7\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltf89e42496d473e48/67ddc10ac5b83e415e924fcd/CSendUserTraining_L7_img-2.png` |
| CSendUserTraining\_L7\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltf12e8e94b472764d/67ddc12020a3dcaff7f82c2f/CSendUserTraining_L7_img-3.png` |
| CSendUserTraining\_L8\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltea7a963ad5527e5a/67ddc16d2d0b983fc5fd0a40/CSendUserTraining_L8_img-1.png` |
| CSendUserTraining\_L9\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt1cd2e888f997a5a8/67ddc1b9443bd66e1df1cfa2/CSendUserTraining_L9_img-1.png` |
| CSendUserTraining\_L9\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltdf8da74c3a43fd87/67ddc1d16f68586740fdacb0/CSendUserTraining_L9_img-2.png` |
| CSendUserTraining\_L10\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltb29710f8f4f41fce/67ddc213efd8a9a4434c060b/CSendUserTraining_L10_img-1.png` |
| CSendUserTraining\_L10\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7277e2ff4a3b7e25/67ddc234632b93aba7d4a667/CSendUserTraining_L10_img-2.png` |
| CSendUserTraining\_L11\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blte64d76b732809e2d/67ddc279314d670aad1b741b/CSendUserTraining_L11_img-1.png` |
| CSendUserTraining\_L11\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc743439c72d09928/67ddc299983a65421b3b806d/CSendUserTraining_L11_img-2.png` |
| CSendUserTraining\_L11\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt62e93395b0eda8ab/67ddc2b7c5de53cebed2e76d/CSendUserTraining_L11_img-3.png` |
| CSendUserTraining\_L11\_img-4.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt9c3ff75be2392429/67ddc2d520a3dc9311f82c38/CSendUserTraining_L11_img-4.png` |
| CSendUserTraining\_L12\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt1c0c9d89b2107b66/67ddc31c314d676a921b7427/CSendUserTraining_L12_img-1.png` |
| CSendUserTraining\_L12\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt9972a14cf96760a8/67ddc335c5b83ee6a2924fe9/CSendUserTraining_L12_img-2.png` |
| CSendUserTraining\_L13\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt045438b314f7fd2b/67ddc385efd8a987a74c0627/CSendUserTraining_L13_img-1.png` |
| CSendUserTraining\_L13\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt1eb3c5092bb90e0e/67ddc39d37e25a3d851e4b00/CSendUserTraining_L13_img-2.png` |
| CSendUserTraining\_L14\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt88445e9dcbf06d1a/67ddc3ec037e2b4df222ded2/CSendUserTraining_L14_img-1.png` |
| CSendUserTraining\_L14\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt3db3e7cc00a2785b/67ddc403cb0241f07941ba52/CSendUserTraining_L14_img-2.png` |
| CSendUserTraining\_L15\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltdb420abd7d8ab22b/67ddc4cd20a3dc2171f82c50/CSendUserTraining_L15_img-1.png` |
| CSendUserTraining\_L15\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt9569bf00c4d49b12/67ddc4e7cb0241254b41ba5e/CSendUserTraining_L15_img-2.png` |
| CSendUserTraining\_L15\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta66895168fe6acdb/67ddc503037e2be2d522dee2/CSendUserTraining_L15_img-3.png` |
| CSendUserTraining\_L16\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4ef22b511fe7734d/67ddc5854a89c30494a307e6/CSendUserTraining_L16_img-1.png` |
| CSendUserTraining\_L16\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltb500d868733cf3d7/67ddc5a0983a65c79d3b808b/CSendUserTraining_L16_img-2.png` |
| CSendUserTraining\_L16\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltad470e7226852c56/67ddc5bdb1a1f3a86d3efd0f/CSendUserTraining_L16_img-3.png` |
| CSendUserTraining\_L16\_img-4.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt0f31348e30b51c06/67ddc5d417f7b465c90d05e3/CSendUserTraining_L16_img-4.png` |
| CSendUserTraining\_L17\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltf0b7e1ad85b677f3/67ddc633f7eccc082c90dcfc/CSendUserTraining_L17_img-1.png` |
| CSendUserTraining\_L17\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc74468073a5f0ccf/67ddc64f2d0b9882fbfd0a69/CSendUserTraining_L17_img-2.png` |
| CSendUserTraining\_L17\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt825d13e12667d548/67ddc66b782bfb3b696f5aaa/CSendUserTraining_L17_img-3.png` |
| CSendUserTraining\_L17\_img-4.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4b87ff6b78c2417b/67ddc68437e25a2b131e4b27/CSendUserTraining_L17_img-4.png` |
| CSendUserTraining\_L18\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt8849a67c2b859bce/67ddc6da632b938bb4d4a6af/CSendUserTraining_L18_img-1.png` |
| CSendUserTraining\_L18\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt48158fa666113212/67ddc74237e25a119f1e4b35/CSendUserTraining_L18_img-3.png` |
| CSendUserTraining\_L18\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt71952031b8329dba/67ddc6f8460eb46371947c7b/CSendUserTraining_L18_img-2.png` |
| CSendUserTraining\_L19\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt502f137db684633a/67ddc790460eb496e7947c8c/CSendUserTraining_L19_img-1.png` |
| CSendUserTraining\_L19\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt581f12b4cfd93450/67ddc7ca443bd64168f1cfe5/CSendUserTraining_L19_img-2.png` |
| CSendUserTraining\_L19\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt5db61352c3d1269e/67ddc7e145b2291a8e911b21/CSendUserTraining_L19_img-3.png` |
| CSendUserTraining\_L20\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt51f1f912e6e9bfd4/67ddc831782bfb8cc56f5abf/CSendUserTraining_L20_img-1.png` |
| CSendUserTraining\_L20\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7dc5920f1e861cc7/67ddc8480c6f55bd7a1fd3f2/CSendUserTraining_L20_img-2.png` |
| CSendUserTraining\_L20\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt80176931bcf764ff/67ddc8643a0f38aaf200efe5/CSendUserTraining_L20_img-3.png` |
| CSendUserTraining\_L20\_img-4.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltb4e86e72ae7d5264/67ddc8915e486d780c71bb0f/CSendUserTraining_L20_img-4.png` |
| CSendUserTraining\_L21\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta315ac2124d921c4/67ddc8e2a714584a1fb9ba41/CSendUserTraining_L21_img-1.png` |
| CSendUserTraining\_L21\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt24a5f46ac6e54d54/67ddc8fbbbf93e4aab5872b7/CSendUserTraining_L21_img-2.png` |
| CSendUserTraining\_L21\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltf612ddcb5e323d37/67ddc915efd8a965984c0676/CSendUserTraining_L21_img-3.png` |
| CSendUserTraining\_L21\_img-4.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc9ffb5e7e88135a2/67ddc92fa6d88eb2b5053994/CSendUserTraining_L21_img-4.png` |
| CSendUserTraining\_L22\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt503ee8acbf63b263/67ddc993b1a1f3be0f3efd36/CSendUserTraining_L22_img-1.png` |
| CSendUserTraining\_L22\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltafefb9eb51921026/67ddc9ac37e25a3f4e1e4b4e/CSendUserTraining_L22_img-2.png` |
| CSendUserTraining\_L23\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt2c857adba5a27c4b/67ddc9f4037e2bdbb822df2f/CSendUserTraining_L23_img-1.png` |
| CSendUserTraining\_L23\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc5496f28642c645a/67ddca0e782bfb37756f5ad6/CSendUserTraining_L23_img-2.png` |
| CSendUserTraining\_L23\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt3ca7d096a0ec0105/67ddca26443bd6c63bf1d002/CSendUserTraining_L23_img-3.png` |
| CSendUserTraining\_L24\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt01eb842f79e81166/67ddca692d0b98af66fd0a9b/CSendUserTraining_L24_img-1.png` |
| CSendUserTraining\_L24\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltbe895439fecb8620/67ddca85c5b83e29e6925048/CSendUserTraining_L24_img-2.png` |
| CSendUserTraining\_L26\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt67556a092dc428c5/67ddcaef5e486dd05571bb30/CSendUserTraining_L26_img-1.png` |
| CSendUserTraining\_L28\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blte5f457abf23cf51f/67ddcb54f7eccc711e90dd30/CSendUserTraining_L28_img-1.png` |
| CSendUserTraining\_L28\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt2090e96cb5f72e61/67ddcb6d3a0f38133e00f018/CSendUserTraining_L28_img-2.png` |
| CSendUserTraining\_L29\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7bc35dc6ebcaecf9/67ddcbb817f7b42c590d0618/CSendUserTraining_L29_img-1.png` |
| CSendUserTraining\_L29\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4595f878b4b6632a/67ddcbd137e25a4ff11e4b71/CSendUserTraining_L29_img-2.png` |
| CSendUserTraining\_L29\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7585ad5c055bf1e6/67ddcbe8986725c183888e7f/CSendUserTraining_L29_img-3.png` |
| CSendUserTraining\_L29\_img-4.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltfb765f2e5da7ba76/67ddcc0720a3dccde7f82ca7/CSendUserTraining_L29_img-4.png` |
| CSendUserTraining\_L30\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltb43943a3576d8f84/67ddcc75a6d88e103d0539b3/CSendUserTraining_L30_img-1.png` |
| CSendUserTraining\_L30\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt39f927c0ea05b436/67ddcc8c20a3dc2c6cf82cb2/CSendUserTraining_L30_img-2.png` |
| CSendUserTraining\_L30\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt50b60166c16c87c8/67ddcca3a71458a203b9ba75/CSendUserTraining_L30_img-3.png` |
| CSendUserTraining\_L30\_img-4.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt19ca049fd3d030d0/67ddccc2f7eccc65a590dd41/CSendUserTraining_L30_img-4.png` |
| CSendUserTraining\_L30\_img-5.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt3879c1ee240a09de/67ddccd9632b93546fd4a702/CSendUserTraining_L30_img-5.png` |
| CSendUserTraining\_L31\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blted1f6edd282a7203/67ddcd2e782bfb01066f5af3/CSendUserTraining_L31_img-1.png` |
| CSendUserTraining\_L32\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt5252f5ac77d7d0b0/67ddcd7ef7eccc394a90dd4a/CSendUserTraining_L32_img-1.png` |
| CSendUserTraining\_L32\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt27205a5f165c1566/67ddcd9417f7b4643e0d0633/CSendUserTraining_L32_img-2.png` |
| CSendUserTraining\_L33\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7f44a98f556a3048/67ddcdd317f7b498a40d0639/CSendUserTraining_L33_img-1.png` |
| CSendUserTraining\_L33\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt24b68e5619165014/67ddcdf1c566eedf635e0588/CSendUserTraining_L33_img-2.png` |
| CSendUserTraining\_L34\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blte48c480e370bc04e/67ddce45b1a1f336903efd7c/CSendUserTraining_L34_img-1.png` |
| CSendUserTraining\_L35\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt76c82bf1db8060ac/67ddce99dd73e3a70cbf39bb/CSendUserTraining_L35_img-1.png` |
| CSendUserTraining\_L35\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt0a4c2effdbebf830/67ddceb0037e2b158f22df58/CSendUserTraining_L35_img-2.png` |
| CSendUserTraining\_L35\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta93003fc3bce59fd/67ddceca17f7b4425c0d064e/CSendUserTraining_L35_img-3.png` |
| CSendUserTraining\_L35\_img-4.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltab0cab5756e09a03/67ddcee9c5de5376cbd2e7f0/CSendUserTraining_L35_img-4.png` |
| CSendUserTraining\_L35\_img-5.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt896e52b4233278fa/67ddcf01c5de533024d2e7f4/CSendUserTraining_L35_img-5.png` |
| CSendUserTraining\_L356img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt59abc3a3207fe38e/67ddcf5545b229e638911b84/CSendUserTraining_L356img-1.png` |
| CSendUserTraining\_L36-img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4fa5ed43893adac6/67ddcf825e486dbbde71bb63/CSendUserTraining_L36-img-2.png` |
| bc6ebe14-a6f6-4713-9b25-cdf30cdc9730-Screenshot\_2023-05-03\_at\_1.05.24\_PM.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt7939c43045409a9b/67ddcf9aa714585585b9baa2/bc6ebe14-a6f6-4713-9b25-cdf30cdc9730-Screenshot_2023-05-03_at_1.05.24_PM.png` |
| CSendUserTraining\_L37\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt02308f7ebd09e85e/67ddcfecc9b8d442f5d14759/CSendUserTraining_L37_img-1.png` |
| CSendUserTraining\_L38\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltab3f600083a5d5d0/67ddd03d37e25a07371e4bb0/CSendUserTraining_L38_img-1.png` |
| CSendUserTraining\_L39\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta98f164ec56295a3/67ddd0876f6858ad16fdad73/CSendUserTraining_L39_img-1.png` |
| CSendUserTraining\_L39\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt4911aa1642b95141/67ddd09ec5b83e3f88925091/CSendUserTraining_L39_img-2.png` |
| CSendUserTraining\_L39\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt6efcd7c4cc86c29c/67ddd0b8c5b83e7700925095/CSendUserTraining_L39_img-3.png` |

### External links

| Label | URL |
| --- | --- |
| Contentstack Academy home | `https://www.contentstack.com/academy/` |
| Training instance setup | `https://www.contentstack.com/academy/training-instance` |
| Academy playground (GitHub) | `https://github.com/contentstack/contentstack-academy-playground` |
| Contentstack documentation | `https://www.contentstack.com/docs/` |
| Create Training Instance | `https://www.contentstack.com/academy-old` |
| CSendUserTraining\_L1\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt3a7cd737dd1ffba6/67ddbda1460eb4862f947c10/CSendUserTraining_L1_img-1.png` |
| CSendUserTraining\_L1\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt01572978ba8e1ffc/67ddbdbe314d67533d1b73d9/CSendUserTraining_L1_img-2.png` |
| CSendUserTraining\_L1\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blta3f1c041a58ea182/67ddbdd9efd8a91bdd4c05cf/CSendUserTraining_L1_img-3.png` |
| Marketplace | `https://www.contentstack.com/docs/developers/marketplace-apps/` |
| Automation Hub | `https://www.contentstack.com/docs/developers/automation-hub-guides/about-automation-hub/` |
| Launch | `https://www.contentstack.com/blog/all-about-headless/announcing-contentstack-launch-composable-is-now-even-easier/` |
| What is a Headless CMS? | `https://www.contentstack.com/cms-guides/headless-cms/` |
| What is a composable architecture? | `https://www.contentstack.com/cms-guides/what-is-composable-architecture/` |
| CSendUserTraining\_L2\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltc0f04bffbc8a0ffa/67ddbeb52d0b989dcbfd0a27/CSendUserTraining_L2_img-1.png` |
| CSendUserTraining\_L2\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt814406ff649a7996/67ddbec237e25a80c01e4abc/CSendUserTraining_L2_img-2.png` |
| More About Organizations | `https://www.contentstack.com/docs/developers/organization/about-organizations/` |
| More About Stacks | `https://www.contentstack.com/docs/developers/set-up-stack/about-stack/` |
| CSendUserTraining\_L3\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt97a9e860b93948ce/67ddbf4cc5b83ec006924fb6/CSendUserTraining_L3_img-1.png` |
| More About Content Types | `https://www.contentstack.com/docs/developers/create-content-types/about-content-types/` |
| About Unique IDs | `https://www.contentstack.com/docs/developers/create-content-types/unique-id/` |
| CSendUserTraining\_L4\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltec6c7f763733b58c/67ddbf9637e25a9d011e4acd/CSendUserTraining_L4_img-1.png` |
| CSendUserTraining\_L4\_img-2.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/bltcae3098603ecc0a0/67ddbfaf986725d6e8888e13/CSendUserTraining_L4_img-2.png` |
| CSendUserTraining\_L4\_img-3.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt29b808c0eb3c4927/67ddbfc9314d678f8c1b73f0/CSendUserTraining_L4_img-3.png` |
| About References | `https://www.contentstack.com/docs/developers/create-content-types/reference/` |
| CSendUserTraining\_L5\_img-1.png | `https://images.contentstack.io/v3/assets/bltebc53cfaf0dd6403/blt15bd7e47554c7fb3/67ddc00b983a65c32d3b8054/CSendUserTraining_L5_img-1.png` |
