Skip to content
DashboardGet API Key
Getting Started

Introduction

CHAMELAION API documentation for AI-powered lip sync, video dubbing, content localization, and personalized video at scale.

Our lip sync API takes any video and audio input and generates perfectly matched lip movements. Send a video of someone speaking English and an audio track in Japanese. CHAMELAION produces a new video where the speaker’s lips move naturally to match the Japanese audio. This powers video dubbing, content localization, personalized video messaging, and more.

Base URLhttps://api.chamelaion.com/api
AuthenticationBearer token or x-api-key header
Input formatsMP4 video and WAV/MP3 audio, via URL or direct upload
Max concurrent jobsDepends on plan
Rate limit60 requests/min on generation endpoints
SDKsPython 3.8+ and TypeScript/Node.js 18+
Active speaker detectionAutomatic (can be disabled per request)
  • AI Lip Sync: State-of-the-art lip sync model that preserves the speaker’s identity, speaking style, and expressions while matching lip movements to new audio.
  • URL-based generation: Pass publicly accessible URLs for your video and audio. No file uploads required.
  • Direct media upload: Upload video and audio files directly via multipart form-data when URLs are not available.
  • Active speaker detection: Automatically detects and syncs the active speaker in multi-person scenes. Can be disabled for single-speaker videos.
  • Request tracking: Every generation returns a request_id. Poll for status, retrieve results, or filter by your own reference_id.
  • Pagination: List and paginate through your generation history with limit and offset parameters.

AI lip sync fits anywhere you need lip movements to match new audio:

  • Video translation / dubbing: Translate videos into multiple languages with natural, lip-synced results.
  • AI Avatars: Make content always feel authentic. Enable avatars to speak with realistic, lip-synced articulation.
  • UGC & Creative Ads: Adapt and scale UGC and ad creative videos by changing messaging inside existing videos - without re-recording.
  • Dialogue Replacement & Personalization: Replace words or full lines in finished videos without re-shooting.

Get from zero to your first AI lip sync generation in three steps:

  1. Get your API key: Create one from the Dashboard.
  2. Authenticate: Pass your key as a Bearer token or x-api-key header. See the Authentication guide.
  3. Generate your first lip sync: Follow the Quickstart to generate a synced video in minutes.

CHAMELAION exposes a focused set of endpoints:

EndpointMethodDescription
/v1/lipsync/generatePOSTStart a lip sync job from video and audio URLs
/v1/lipsync/generate-with-mediaPOSTStart a lip sync job from uploaded files
/v1/lipsync/requests/{id}GETGet the status and result of a specific request
/v1/lipsync/requestsGETList all your lip sync requests with pagination
/v1/users/meGETVerify your API token identity
/healthGETService health check (no auth required)
What video and audio formats does CHAMELAION support?

CHAMELAION accepts common video formats like MP4 for video input and WAV or MP3 for audio input. You can provide media via publicly accessible URLs or upload files directly through the multipart form-data endpoint.

How long does a generation take?

Generation time depends on video length and current queue depth. Most videos under 60 seconds complete within 1–3 minutes. You can poll the status of your request using the request status endpoint.

Can CHAMELAION handle multi-person videos?

Yes. CHAMELAION includes active speaker detection that automatically identifies and syncs the speaking person in multi-face videos. For single-speaker videos, you can disable this feature by setting disable_active_speaker_detection: true for faster processing.

How does authentication work?

CHAMELAION supports two authentication methods: a Bearer token in the Authorization header or an API key in the x-api-key header. Both use the same API token from your dashboard. See the Authentication guide for details.

What happens if my generation fails?

When a generation fails, the request status will show failed with an error_message field explaining what went wrong. Common causes include inaccessible URLs, unsupported formats, or quota limits. See the Error Handling guide for troubleshooting.