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

# Video ads

> Turn product images into short video ads.

A **video** animates one or more images (for example, images from a completed shoot) into
a short ad. Credits are charged up front and refunded automatically if generation fails.

## Create a video

`POST /v1/videos`

<ParamField body="image_urls" type="string[]" required>
  Public http(s) URLs of the source image(s). The maximum count depends on duration:
  5s → 1, 10s → 3, 15s → 4.
</ParamField>

<ParamField body="duration" type="integer" required>
  `5`, `10`, or `15` seconds.
</ParamField>

<ParamField body="resolution" type="string" required>
  `480p`, `720p`, or `1080p`.
</ParamField>

<ParamField body="mode" type="string" default="product_only">
  `product_only` or `with_model`. `product_only` is billed 15% cheaper.
</ParamField>

<ParamField body="aspect_ratio" type="string">
  One of `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`. Auto-selected from the images if omitted.
</ParamField>

<ParamField body="logo_url" type="string">
  Optional public URL of a logo to reveal in the ad.
</ParamField>

<ParamField body="music" type="boolean" default="true">
  Include a background track.
</ParamField>

<ParamField body="note" type="string">
  Optional creative direction for the ad.
</ParamField>

```json Response theme={null}
{
  "id": "7a2b...-...",
  "object": "video",
  "status": "pending",
  "credits_used": 40,
  "credits_remaining": 206
}
```

## Pricing

Cost = credits-per-second × duration × mode multiplier, rounded up.

| Resolution | Credits / second |
| ---------- | ---------------- |
| 480p       | 2                |
| 720p       | 4                |
| 1080p      | 9                |

`product_only` applies a 0.85× multiplier. Example: a 10s 720p product-only video =
`ceil(4 × 10 × 0.85)` = **34** credits.

## Poll a video

`GET /v1/videos/{id}`

When `status` is `completed`, `video_url` holds the MP4. Video generation typically takes
several minutes, so poll on a longer interval than shoots.

```json theme={null}
{
  "id": "7a2b...",
  "object": "video",
  "status": "completed",
  "video_url": "https://.../ad.mp4",
  "credits_used": 40,
  "created_at": "2026-07-01T10:05:00Z"
}
```
