# Video

URL: /business/nouns/video · Id: `noun:video`

> A Video is a timed composition held as data: a timeline of scenes and spoken lines, drafted from records and rendered per format.

A Video is a timed composition held as data: a timeline of scenes and spoken lines, drafted from records and rendered per format.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `status` | `string` | Yes | One of `Draft`, `Rendered`, `Final`, or `Superseded`. |
| `timeline` | `json` | Yes | The ordered scenes on a fixed grid, the only timing truth for picture, voice and captions. |
| `brand` | [Brand](/business/nouns/brand) | Yes | The Brand whose voice, palette and type the Video uses. |
| `offer` | [Offer](/business/nouns/offer) | No | The Offer the Video presents, when it presents one. |

## Object
```json
{
  "$id": "https://api.sb/routewise.dev/videos/video_1",
  "$type": "Video",
  "status": "Draft",
  "timeline": {},
  "brand": "brand_1",
  "offer": "offer_1"
}
```

## Relationships
None.

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| [Video.draft](/business/nouns/video/draft) | Draft writes a Video’s timeline from a Startup’s records, its Brand and a Template, with a draft mark on every frame. | [Video Producer](/agents/marketing/video-producer) | [`Video.drafted`](/business/events/Video.drafted) | None. |
| [Video.finalize](/business/nouns/video/finalize) | Finalize lifts a Video’s draft mark once every claim it makes reads from a live record, so its cuts can be published. | [Video Producer](/agents/marketing/video-producer) | [`Video.finalized`](/business/events/Video.finalized) | None. |
| <a id="create"></a>[Video.create](/business/nouns/video/create) | Creates a Video. Inherited from [Noun](/business/nouns/noun). | None. | `Video.created` | Two-way: `try`, `send`, `do` |
| <a id="get"></a>[Video.get](/business/nouns/video/get) | Returns one Video by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Video.list](/business/nouns/video/list) | Returns Videos, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="update"></a>[Video.update](/business/nouns/video/update) | Changes the given properties of a Video. Inherited from [Noun](/business/nouns/noun). | None. | `Video.updated` | Two-way: `try`, `send`, `do` |

## Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.

| Operation | `owner` | `admin` | `member` | `viewer` |
| --- | --- | --- | --- | --- |
| `Video.create` | Yes | Yes | Yes | No |
| `Video.get` | Yes | Yes | Yes | Yes |
| `Video.list` | Yes | Yes | Yes | Yes |
| `Video.update` | Yes | Yes | Yes | No |
| `Video.draft` | Yes | Yes | Yes | No |
| `Video.finalize` | Yes | Yes | Yes | No |

## Call it

**Ask**

```text
Draft the latest video with a brand.
```

**API**

```bash
curl -X POST https://api.sb/petpantry.shop/videos/draft \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"brand":"brand_1"}'
```

```json
{
  "api": "https://api.sb/petpantry.shop",
  "video": {
    "$id": "https://api.sb/petpantry.shop/videos/video_1",
    "$type": "Video",
    "status": "Draft",
    "timeline": {},
    "brand": "brand_1"
  },
  "action": {
    "$id": "https://api.sb/petpantry.shop/actions/action_1",
    "operation": "Video.draft",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/petpantry.shop/actions/action_1"
  }
}
```

**SDK**

```ts
import { $ } from 'startup-builder'

const video = await $.Video.draft({ brand: 'brand_1' })
```

**CLI**

```bash
npx startup-builder do Video.draft --json '{"brand":"brand_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Video.draft({ brand: 'brand_1' })"
  }
}
```

## Example
A home-workout app drafts a 30-second Video from a timeline of clips and a script. Once its captions and loudness checks pass, `Video.finalize` renders cuts for vertical and square formats.