Docs

Generate lip-synced dubbed videos from a video

Generates lip-synced dubbed videos from a source video in one or more target languages, cloning each speaker’s voice and matching their lip movements. Each language produces a new, independent video in the library. The work runs asynchronously: this call returns immediately with one job per language that you poll for status. Billed in credits per minute of the source video, per language; the debit is refunded in full if a job fails. Idempotent per language: a language already in flight or completed is returned without charging again. Only videos with confirmed speech and up to 30 minutes long are eligible; a video that is itself a dub cannot be re-dubbed.

POST
/v1/videos/{id}/lipsync

Authorization

BearerAuth
AuthorizationBearer <token>

Pass the raw API key as a Bearer token (Authorization: Bearer <key>). Publishable keys start with mvi_pub_ (playback-scoped). Other prefixes denote private/admin keys for general REST routes. GET /v1/embeds/{embedId}/playback accepts publishable keys only.

In: header

Path Parameters

id*string

Source video identifier.

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://api.moviie.ai/v1/videos/497f6eca-6276-4993-bfeb-53cbbbba6f08/lipsync" \  -H "Content-Type: application/json" \  -d '{}'
{
  "items": [
    {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "videoId": "3524e86f-1bba-489a-bf6b-386ea1abbac0",
      "outputVideoId": "674410a1-df92-40ad-9bc0-483a8b9c5820",
      "language": "pt",
      "status": "completed",
      "creditsReserved": "60",
      "idempotentReplay": true,
      "createdAt": "2019-08-24T14:15:22Z"
    }
  ],
  "totalCreditsReserved": "120"
}
{
  "error": "Resource not found",
  "code": "NOT_FOUND"
}
{
  "error": "Resource not found",
  "code": "NOT_FOUND"
}
{
  "error": "Resource not found",
  "code": "NOT_FOUND"
}
{
  "error": "rate_limited"
}