---
title: "Reprocess Video"
method: PUT
path: "/v1/videos/{video_id}"
tags: ["Video Emotion API"]
---

# Reprocess Video

`PUT /v1/videos/{video_id}`

## Request

- Base URL: `https://api.imentiv.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.imentiv.ai/v1/videos/{video_id}`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Reprocess an already uploaded and completed video file.
This is useful when insights need to be regenerated or logic has been updated on the backend.
Reprocessing can optionally notify your system via a callback URL.

`language` is optional. Without it the video keeps the language it already has (detected from the audio when
it has none). With it, the video and its companion audio are processed in that language, and the video
remembers it for later reprocesses. It is checked before anything is charged, so an unsupported code is refused
with 422 `invalid_language` and costs nothing. It is only used by a request that starts a run (a failed video,
or `reprocess=true`); on a request that does not, it is ignored.

The video's companion audio is transcribed again in that language, as part of the video's charge: a `failed`
one as before, and a `completed` one too (its language-range edits are discarded). One that is still
`processing` is not restarted; fix it with `PUT /v1/audios/{audio_id}` once it has finished. One busy with a
language-range job is refused with 409 `audio_busy`. `GET` on the video returns the stored `multilingual` and
`expected_languages`, but not the stored language.

`multilingual` and `expected_languages` are the language hints (`expected_languages` is the set of languages the
audio may contain, up to 5; see the field descriptions). Each is optional and, unlike on the audio endpoint, an
omitted one keeps what the video has: `multilingual=false` turns the switch off and an empty `expected_languages`
removes the set, which is how a video returns to unrestricted detection. They are checked with `language`
before anything is charged (an invalid one is 422 `invalid_language` and costs nothing), and `language` must be
in the set the video will have: naming only `language` outside the stored set is refused the same way, so send
the set too (or an empty one) to change both. Naming any of the three also re-runs a `completed` companion
audio, and the companion is given the video's resulting hints.

## Path parameters

- `video_id` string, required: Unique identifier of the video to reprocess

## Request body `application/x-www-form-urlencoded`

- BodyReprocessVideoV1VideosVideoIdPut
  - `callback_url` string, nullable: The callback url to notify video reprocessing is completed. Give a valid URL. Must be an https URL on a publicly reachable host.
  - `reprocess` boolean: Set to 'True' to reprocess an already completed video; defaults to 'False'.
  - `language` string, nullable: Language of the video's audio track as a language code such as `hu` or `pt-BR` (a region is ignored, so `zh-yue` becomes `zh`: send `yue` for Cantonese). Use it when automatic detection got the language wrong. Omit to keep the video's current language (auto-detect if it has none). Unlike the audio endpoint, a later reprocess that omits it re-sends this language rather than auto-detecting again. Unsupported codes are refused with 422 `invalid_language`. With `expected_languages` (sent or stored) it must be one of them.
  - `multilingual` boolean, nullable: Opt in to mixed-language transcription: the speech may switch language, and each stretch is transcribed in the language it is spoken in. Once the audio completes, the lines that are not in its main language are also translated into the main language and billed as a translation, on top of transcription (`auto_translation` reports it). This is input only; the languages actually detected are reported separately. Omitted keeps what is stored. `false` turns it off.
  - `expected_languages` string, nullable: Comma-separated codes of the languages the audio may contain, the main one included (e.g. `en,ja`), 1 to 5 after duplicates are removed. Case and whitespace are ignored, a region is dropped (`pt-BR` is `pt`) and an alias maps to the Whisper spelling (`iw` is `he`); Cantonese is `yue`. Language detection is restricted to the set, with or without `multilingual`. If `language` is also sent it must be one of them (422 `invalid_language` otherwise). If `language` is omitted, detection still runs, restricted to the set. An unknown code, or more than 5, is refused with 422 `invalid_language` before anything is charged. Omitted keeps what is stored. Send the field empty to remove the stored set.

## Response `200`

Successful Response

- ReprocessVideoResponse: Response returned after requesting reprocessing of a video. Inherits from: GenerateCSVResponse
  - `id` string, required
  - `message` string, required
  - `status` string, required

## Other responses

- `422`: Request validation failed (`{"detail": str}` only), or `processing_fps_over_budget`: the video is too long to process at its frame rate. Nothing was charged. The body then also offers the frame rates that fit (`recommended_processing_fps`, `fits_processing_fps`) and each tier's longest video (`duration_s`, `max_duration_by_fps`), so the client can suggest a lower frame rate or a trim.

## Changes

- **2026-11-06** `bc15cec7e794`: 1 breaking, 7 info
  - the `detail` response's property type changed from `array` to `string` for status `422`
  - added the optional property `code` to the response with the `422` status
  - added the optional property `duration_s` to the response with the `422` status
  - added the optional property `fits_processing_fps` to the response with the `422` status
  - …4 more
- **2026-10-31** `bd825cd86e8c`: 3 info
  - added the new optional request property `expected_languages`
  - added the new optional request property `language`
  - added the new optional request property `multilingual`
- **2026-08-20** `74ceee4a5c98`: 1 info
  - request property `callback_url` list-of-types was widened by adding types `null` to media type `application/x-www-form-urlencoded`

[Operation history](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai/changes/v1/videos/:video_id/put.md)

---

[API](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai.md) - [All operations](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai/llms.txt) - [OpenAPI document](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai/revisions/bc15cec7e794?raw)
