> ## Documentation Index
> Fetch the complete documentation index at: https://docs.semicola.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How AdCP thinks about video

> Why a hosted video carries pixel dimensions and a VAST tag doesn't, and where size, duration and container rules live.

Video comes in two shapes, and AdCP models them as two asset types with opposite rules.

* **A hosted video file** is a concrete file (an MP4) that gets served as is. Its resolution,
  duration and codec are baked in. Format kind `video_hosted`, asset type `video`.
* **A VAST tag** isn't a file. It's a URL pointing at a video ad server's decision at play time. The
  ad server can return several renditions at different sizes and bitrates, and the player picks one.
  Format kind `video_vast`, asset type `vast`.

<Note>
  The asset must match the format. An MP4 is a hosted video, not a VAST tag, and labeling it VAST
  doesn't make it one. Use a VAST tag only when you have a real VAST URL.
</Note>

## Dimensions belong to a file, not a tag

A hosted file has one native resolution, so Semicola sends its `width`, `height` and `duration_ms`
with the asset when it syncs the creative to a seller. A VAST tag has no single size: each rendition
inside the VAST response carries its own. So a `vast` asset carries only its `url` and, if you give
one, its `vast_version`.

## Where size and duration rules live

Rules like "16:9, up to 30 seconds, MP4" are **constraints on the format**, not properties of the
asset. An asset describes what you're sending; a format describes what a placement accepts:

* size (exact width and height, or an aspect ratio);
* duration (a maximum, or an exact length);
* containers the format accepts.

When Semicola matches a creative to a seller's formats, a hosted file is checked against those
constraints up front:

| Result        | When                                                                   |
| ------------- | ---------------------------------------------------------------------- |
| Missing facts | The format needs a size or duration the file doesn't have on record.   |
| `resize`      | Different size, same aspect ratio.                                     |
| `letterbox`   | Different size and aspect ratio.                                       |
| `trim`        | Longer than the format's duration (more than half a second over).      |
| `transcode`   | A container the format doesn't list.                                   |
| Nothing fits  | A different family: a video creative against an image or audio format. |

A VAST tag is checked at serve time, when the player picks a rendition.

For delivery, a hosted video should be **MP4** (H.264 video, AAC audio). Editing formats like MOV are
sources, not delivery files: convert them first.

## Add a VAST tag

Create a creative whose primary asset is a URL (`urlAsset`) with `urlType: "vast"`, the tag `url`, and
optionally `vastVersion`: `2.0`, `3.0`, `4.0`, `4.1`, `4.2` or `4.3`. Pass it to `save_creative`, or
`POST /api/v2/buyer/advertisers/{id}/creatives/create`. A tag sheet can also bring VAST URLs in; see
[Inspect a tag sheet](/skills/inspect-tag-sheet).

Upload a hosted video from the creative library (up to 2 GB); see [Creatives](/buy/creatives).

## Not available yet

* Inline VAST XML: a VAST creative is always a tag URL.
* Automatic transcoding, trimming or letterboxing. The fit result names the adaptation; nothing
  converts the file for you.
