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

# Analyze a video

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

## Request

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

**Scope:** `analyze:write`

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

## Path parameters

- `id` string, required

## Request body

- object
  - `videoContext` string
  - `companyContext` string
  - `language` string
  - `tone` string
  - `contentStyle` 'how-to' | 'sop' | 'promotional' | 'training' | 'announcement'
  - `productName` string
  - `scriptSource` 'video' | 'transcript' | 'original' | 'custom'
  - `customScript` string
  - `scriptSkillId` string
  - `forceRefresh` boolean
  - `keyEvents` union[]
    - union
      - string
      - object
        - `text` string, required
        - `timestamp` number
  - `analysisModel` 'gemini'
  - `subtitleModel` 'openai' | 'gemini'
  - `autoZoom` boolean

## 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
- `423`: The video's content is locked and can't be changed
- `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)
