---
title: "Export a video"
method: POST
path: "/v1/videos/{id}/export"
tags: ["Operations"]
---

# Export a video

`POST /v1/videos/{id}/export`

## Request

- Base URL: `https://api.vidocu.ai`
- URL: `https://api.vidocu.ai/v1/videos/{id}/export`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://vidocu.ai/oauth/authorize`, token URL `https://api.vidocu.ai/oauth/token`)

Per-request overrides layer on top of the video's settings and the Brand Kit (request > video > Brand Kit) and apply to this render only.

**Scope:** `export:write`

**Role permission:** `canExport` (OAuth only — API keys carry full workspace permissions)

## Path parameters

- `id` string, required

## Request body

- object
  - `language` string
  - `ratio` '16:9' | '9:16' | '1:1' | '4:5' | '4:3'
  - `watermark` union
    - false
    - object
      - `imageUrl` string, uri
      - `position` 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'
      - `size` 'small' | 'medium' | 'large'
      - `opacity` number
  - `captions` union
    - false
    - object
      - `mode` string
      - `position` string
      - `positionPercent` number
  - `music` union
    - false
    - object
      - `url` string, uri
      - `volume` number: Music level from 0 to 1, where 0.3 is 30%.
      - `duckVolume` number: Music level from 0 to 1 while a voiceover plays, where 0.1 is 10%.
      - `fadeDuration` number
      - `playInScenes` boolean
  - `openingSceneUrl` string, uri, nullable
  - `closingSceneUrl` string, uri, nullable
  - `zooms` boolean
  - `elements` boolean
  - `reframe` boolean
  - `slides` object[]
  - `avatarSettings` union
    - false
    - object
      - `avatarId` string
      - `voiceId` string
      - `layout` string
      - `sizePercent` number
      - `shape` 'circle' | 'rounded' | 'square'
      - `backgroundColor` string
      - `zoom` number
      - `offsetY` number

## Response `202`

Job accepted; poll GET /v1/jobs/:id

- object: Async operation accepted.
  - `jobId` string, required: Poll this via GET /v1/jobs/{id}.
  - `status` 'pending', required

## Other responses

- `400`: Validation error
- `401`: Invalid or missing credentials
- `403`: Missing scope (`insufficient_scope`), insufficient role (`insufficient_role`), or quota exhausted (`limit_exceeded`)
- `404`: Not found
- `429`: Rate limit exceeded (60 req/min)
- `500`: Server error

---

[API](https://skmtc.dev/vidocu/apis/vidocu-api.md) · [All operations](https://skmtc.dev/vidocu/apis/vidocu-api/llms.txt) · [OpenAPI document](https://skmtc.dev/vidocu/apis/vidocu-api/revisions/cc813d2ca5d2?raw)
