---
title: Content Model
url: https://docs.kaltura.com/docs/getting-started/general/api-content-model
---

## Content Model: Entries and Assets

Understanding Kaltura's content model helps agents choose the right API for each task. All content in Kaltura is organized around two core concepts: **entries** and **assets**.

### Entries — The Content Container

An **entry** is a logical container that represents a single piece of content. It holds metadata (name, description, tags, categories) and links to one or more assets (files). Every entry has a unique `id` (e.g., `1_abc12345`) and a `type` that determines its behavior.

**Entry type hierarchy:**

| Entry Class | Type Value | Service | Description |
|-------------|-----------|---------|-------------|
| `KalturaMediaEntry` | 1 | `media` | Video, audio, or image — transcoded into playable renditions (flavors) |
| `KalturaLiveStreamEntry` | 7 | `liveStream` | Live broadcast entry with streaming endpoints |
| `KalturaPlaylist` | 5 | `playlist` | Ordered collection of entries (playlistType: `3`=static list, `10`=dynamic filter) |
| `KalturaDataEntry` | 6 | `data` | Arbitrary file storage — served as-is, no transcoding |
| `KalturaDocumentEntry` | 10 | `documents_documents` | PDF, DOCX, PPTX — document conversion for web viewing |

`KalturaMediaEntry` is the most common type. It extends `KalturaPlayableEntry`, which adds playback-related fields (`plays`, `views`, `duration`, `width`, `height`). Data and document entries extend `KalturaBaseEntry` directly and have no playback fields.

### Assets — The Files Inside an Entry

An **asset** is a file attached to an entry. Each entry can have multiple assets of different types:

| Asset Type | Service | Description |
|------------|---------|-------------|
| **Flavor asset** | `flavorAsset` | A transcoded rendition of the source video (e.g., 360p, 720p, 1080p). Created automatically by the conversion profile. The source file is also stored as a flavor (with `isOriginal=true`). |
| **Thumbnail asset** | `thumbAsset` | A thumbnail image. The default is auto-generated; additional thumbnails can be uploaded or captured from a video frame. |
| **Caption asset** | `caption_captionAsset` | A subtitle/caption file (SRT, VTT, DFXP). Can be uploaded manually or generated by REACH AI services. |
| **Attachment asset** | `attachment_attachmentAsset` | A supplementary file (PDF, JSON, etc.) linked to the entry. Shown as "Related Files" in the KMC. |

The relationship is one-to-many: one entry has many assets. Each asset has an `entryId` linking it to its parent entry.

### Entry Lifecycle

A media entry progresses through these states:

```
media.add (creates empty entry, status=7 NO_CONTENT)
    ↓
media.addContent (attaches uploaded file to entry)
    ↓
Transcoding (status=4 PENDING — conversion profile creates flavors)
    ↓
Entry Ready (status=2 READY — all required flavors transcoded)
```

The conversion profile assigned to the entry determines which flavors to create and when the entry is considered READY (e.g., "ready when the lowest-bitrate flavor is done" vs "ready when all flavors are done").

### Partial Updates

Update calls (`media.update`, `baseEntry.update`) apply **partial updates** — only the fields you include in the request are changed. Fields you omit are left unchanged. There is no need to `get` the entry before updating it.

```bash
# Only the tags field is updated — name, description, and all other fields remain unchanged
curl -X POST "$KALTURA_SERVICE_URL/service/media/action/update" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "entryId=$KALTURA_ENTRY_ID" \
  -d "mediaEntry[tags]=updated,tags,here"
```
