> For the complete documentation index, see [llms.txt](https://docs.videograph.ai/llms.txt).
> Use it to discover all available pages before exploring further.

# Content Model & Playback Basics

Understand the Videograph content object, its lifecycle, status fields, and how playback identifiers map to HLS delivery.

## The content object

A Videograph content object represents an on-demand video you upload or reference by URL. It anchors ingestion, processing, and playback. Creation happens through the contents API, where you provide a title, playback policy, and at least one source URL.

<Callout kind="info" collapsed="false">
  For a walkthrough of uploading or ingesting a file, see [Uploading Videos (Dashboard & API)](/vod-uploading-ingesting).
</Callout>

When you create a content object, the API returns a unique `contentId` along with lifecycle status fields. These update as processing progresses and eventually include a playback identifier.

<CodeGroup show-lines="true" tabs={[]}>
  ```json
  {
    "content": [
      {
        "url": "https://d19nx8bm4jzw4h.cloudfront.net/Tears-of-steel.mp4"
      }
    ],
    "playback_policy": ["public"],
    "title": "Demo Video"
  }
  ```

  ```json
  {
    "contentId": "cnt_123",
    "title": "Demo Video",
    "playbackPolicy": ["public"],
    "status": "Pending"
  }
  ```
</CodeGroup>

## Lifecycle: upload through ready

After creation, Videograph retrieves the source file and prepares adaptive streaming outputs. The high-level lifecycle is consistent with the external "Add & Stream Video content" guide.

Stages typically include:

- Upload or URL fetch: Videograph obtains the source file.

- Processing: Transcoding and packaging for adaptive streaming.

- Ready: Playback information becomes available.

A simplified flow:

```
[Uploaded or URL provided] --> [Ingest] --> [Process] --> [Ready]
```

Once created, you can poll `GET /video/services/api/v1/contents/{CONTENT_ID}` to observe changes to the `status` and, once ready, receive the playback identifier.

## Status fields

The contents API exposes straightforward status values so you can track readiness.

Common values:

- `Pending`: Content was created and is queued for ingest.

- `Processing`: Videograph is transcoding and packaging the video.

- `Ready`: Streaming outputs are complete and a playback identifier can be used in a player.

<Callout kind="tip" collapsed="false">
  Polling for `Ready` is the simplest way to know when a content object can be streamed.
</Callout>

## Playback identifiers and URLs

When processing completes, the API returns a playback identifier associated with the content. This value is used to derive the HLS playback URL that Videograph players and any HLS-capable client can request.

Key points:

- A playback ID uniquely identifies the streaming output for a content object.

- The playback URL is an HLS manifest that points to adaptive renditions.

- Compatible players are documented under [Playing Videos (Web & App Integration)](/web-sdk-player).

### What the playback URL represents

The playback URL resolves to an HLS master playlist. Players use this manifest to select renditions dynamically based on network conditions.

### Sample representation

```
https://cdn.videograph.ai/hls/{playback_id}/master.m3u8
```

The value `playback_id` is returned only after the content reaches the `Ready` state.

## Next steps

- To upload your first asset, see [Uploading Videos (Dashboard & API)](/vod-uploading-ingesting).

- To monitor processing and lifecycle states, see [Monitoring Processing & Content Status](/analytics-overview).

- To embed and play your processed video, see [Playing Videos (Web & App Integration)](/web-sdk-player).

