---
title: "Get Video Analysis"
method: GET
path: "/v3/video-analyses/{analysis_id}"
tags: ["Video Analysis"]
---

# Get Video Analysis

`GET /v3/video-analyses/{analysis_id}`

## Request

- Base URL: `https://api.heygen.com`
- URL: `https://api.heygen.com/v3/video-analyses/{analysis_id}`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Return a job created by `POST /v3/video-analyses`: `pending` until its balance check passes, `processing` while the model works, `completed` with its `output` and `usage`, or `failed` with its `failure_code` and `failure_message`. A failed analysis is not charged, except `output_not_json`, `no_answer` and a `vendor_timeout` once the video had reached the model: the model ran for those, so they are charged as described in `POST /v3/video-analyses`.

## Path parameters

- `analysis_id` string, required

## Response `200`

Successful response

- object
  - `data` VideoAnalysisResponse
    - `id` string, required: Analysis identifier; read it again with GET /v3/video-analyses/{id}.
    - `status` 'pending' | 'processing' | 'completed' | 'failed', required
    - `model` 'gemini-3.8-flash' | 'gemini-4-argon', required: The model the analysis runs on.
    - `created_at` integer, required: Request creation time as Unix seconds.
    - `duration_seconds` number, required: Length of the analyzed video in seconds, measured before the analysis starts.
    - `completed_at` integer, nullable: When the analysis completed or failed, as Unix seconds.
    - `output` union: The answer; present once completed.
      - VideoAnalysisTextOutput
        - `type` 'text': The answer is text: no `response_schema` was given.
        - `text` string, required: The model's answer.
      - VideoAnalysisJsonOutput
        - `type` 'json': The answer is JSON that validates against the request's `response_schema`.
        - `json` object, required: The model's answer.
    - `usage` VideoAnalysisUsage
      - `input_tokens` integer, required: Tokens the model read: the prompt, the sampled video frames and its audio.
      - `output_tokens` integer, required: Tokens the model wrote, its thinking included.
    - `failure_code` 'video_too_long' | 'video_unreadable' | 'invalid_input' | 'content_policy_violation' | 'output_not_json' | 'no_answer' | 'ai_vendor_access_restricted' | 'vendor_timeout' | 'vendor_unavailable' | 'insufficient_credit' | 'internal_error'
    - `failure_message` string, nullable: A customer-safe explanation; present once failed. It never contains any of the model's answer.

## Other responses

- `400`: Invalid request parameters
- `401`: Authentication failed
- `404`: Resource not found
- `429`: Rate limit exceeded

## Changes

- **2026-11-03** `7dfa5e59b4f5`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/heygen/apis/heygen-external-api/changes/v3/video-analyses/:analysis_id/get.md)

---

[API](https://skmtc.dev/heygen/apis/heygen-external-api.md) - [All operations](https://skmtc.dev/heygen/apis/heygen-external-api/llms.txt) - [OpenAPI document](https://skmtc.dev/heygen/apis/heygen-external-api/revisions/7dfa5e59b4f5?raw)
