> This page is for Concepts.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://contentful-staging.ferndocs.com/developers/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://contentful-staging.ferndocs.com/developers/docs/_mcp/server.

# Data model

> Contentful organizes content into spaces with content entries, media assets, and settings for localizing content into different languages.

Contentful organizes content into *spaces*, that allows you to group all the related resources for a project together, this includes content entries, media assets, and settings for localizing content into different languages.

Each space has a *content model* that represents the *content types* you create.

## Content type properties

All content types have standard fields that contain basic information about the content type, its fields and metadata.

| Field        | Type     | Description                        |
| ------------ | -------- | ---------------------------------- |
| sys          | Sys      | Common system properties.          |
| field type   | String   | Name of the content type.          |
| description  | String   | Description of the content type.   |
| fields       | \[Field] | List of fields.                    |
| displayField | String   | ID of main field used for display. |

## Fields

Each *content type* consists of a set of up to **50** fields that you define, these fields can be one of the following, and correspond to a JSON type. There are differences between the fields you can create in the web app and the API.

| Name             | API type   | JSON type | Description                                                                                                                                               | Limits                                                                   | Example                                                                                                                                               |
| ---------------- | ---------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Text (Short)     | `Symbol`   | String    | A short text field for titles and names.                                                                                                                  | Maximum length of 256 characters.                                        | `"The title"`                                                                                                                                         |
| Text (Long)1     | `Text`     | String    | A long text field for paragraphs of text. Supports full-text search.                                                                                      | Maximum length of 50,000 characters.                                     | `"This is a post and ..."`                                                                                                                            |
| Rich text        | `RichText` | `Object`  | A field for rich text content such as paragraphs, lists and tables. Supports full-text search.                                                            | Maximum length of 200,000 characters and not to exceed 1MB in total.     | `{"nodeType": "document", ...}`                                                                                                                       |
| Number (Integer) | `Integer`  | Number    | A whole number                                                                                                                                            | Values from -2 53 to 2 53. Note: GraphQL cannot exceed a 32-bit integer. | `42`                                                                                                                                                  |
| Number (Decimal) | `Number`   | Number    | A decimal number.                                                                                                                                         | Values from -2 53 to 2 53.                                               | `3.14`                                                                                                                                                |
| Date and time 2  | `Date`     | String    | A date and time in ISO 8601 format.                                                                                                                       |                                                                          | `"2015-11-06"`  `"2015-11-06T09:45"`  `"2015-11-06T09:45:27"`  `"2015-11-06T09:45:27Z"`  `"2015-11-06T09:45:27+00:00"`  `"2015-11-06T09:45:27-08:00"` |
| Location         | `Location` | Object    | Coordinate values for storing the latitude and longitude of a location.                                                                                   |                                                                          | `{"lat": 52.5208, "lon": 13.4049}`                                                                                                                    |
| Boolean          | `Boolean`  | Boolean   | For values that have two states, e.g. `yes` or `no`, `true` or `false`.                                                                                   |                                                                          | `true`                                                                                                                                                |
| Media            | `Link`     | Object    | A link to an asset. The type of the referenced item is defined by the `linkType` property. Read our [links guide](/concepts/links) for more details.      |                                                                          |                                                                                                                                                       |
| Reference        | `Link`     | Object    | A link to another entry. The type of the referenced item is defined by the `linkType` property. Read our [links guide](/concepts/links) for more details. |                                                                          |                                                                                                                                                       |
| Array            | `Array`    | Array     | List of values. See [array fields](#array-fields) below.                                                                                                  | Limited by entry size.                                                   | `["name1", "name2", ...]`                                                                                                                             |
| JSON Object      | `Object`   | Object    | For storing any other types of objects you have defined.                                                                                                  | Limited by entry size.                                                   | `{"foo": "bar"}`                                                                                                                                      |

1. **Text**: Fields do not support ordering or strict equality.
2. **Date**: Fields must be ISO8601 formatted, but do not require a time portion.

![Add new field](https://images.ctfassets.net/tz3n7fnw4ujc/2Oy5ezqjYElZaZrMMRDcvo/ed2fff4af66bda0794f994410208beab/add-new-field.png)

### Array fields

Fields can contain multiple values with the `Array` type. An array can contain symbols (strings up to 256 characters), **or** [links](/concepts/links) to other entries or assets. The `items` property defines the allowed values in the array.

You define a field that contains symbols like this:

```json
{
  "id": "tags",
  "type": "Array",
  "items": { "type": "Symbol" }
}
```

You define a field that contains links to assets like this:

```json
{
  "id": "relatedImages",
  "type": "Array",
  "items": {
    "type": "Link",
    "linkType": "Asset"
  }
}
```

You define a field that contains links to items like this:

```json
"reference_field": {
  "en-US": [
    {
      "sys": {
        "type": "Link",
        "linkType": "Asset",
        "id": "id1"
    }},
    {
      "sys": {
        "type": "Link",
        "linkType": "Asset",
        "id": "id2"
    }}
    ...
  ]
}
```

Individual fields also contain metadata, such as validations and widget appearance.

Contentful stores individual items of content as *entries*, which represent textual or structural information based on the content type used. Items can also be *assets*, which are binary files, such as images, videos or documents. Assets have three fixed fields, the name, description and attached file.

You can see how Contentful represents your content model in JSON by clicking the *JSON preview* tab next to the *fields* tab.

If you want to hide fields from appearing in JSON output, you can disable it by clicking the three dots to the right of the field.

![Disable Field](https://images.ctfassets.net/tz3n7fnw4ujc/3OjFlMBvmEu86ig0Yeoi6m/f6df20bb8baca265f34176295c753187/ECFFF57E-2FB6-44D5-B677-F0B58B3F43B4.png_dl_1)

This is useful for content information that is important to writers and editors, but not for public consumption.

## Example - data modeling a product catalogue

One of the template spaces in Contentful is for a product catalogue, it consists of:

* **A Category**: What product type is it?
* **A Brand**: Who made the product?
* **A Product**: An item for sale that references a *category* and a *brand*.

And the **Brand** content type consists of the following fields:

* **Company Name**: A text field that represents the title of the entry, it's required, with the *Single line* appearance setting.
* **Logo**: A media field that references assets.
* **Description**: Describes the brand, it's a longer text field with the Markdown editor enabled.
* **Website, Twitter, Email**: Three text fields that hold the contact details for the brand. They have validation rules to ensure the correct contact information.
* **Phone #**: Another text field, but one that allows a user to add a list of values.

## Next steps

* [Model relationships between content with links](/concepts/links/)
* [Add images to your content](/concepts/images/)
* [Learn more about content modeling in our Learning Center](https://training.contentful.com/courses/contentful-basics-intro-to-modeling)