Complete guide to integrating with the LipSync.dev API
All API requests require authentication using your API key. Include your key in the request headers:
Get your API key from Dashboard → API Keys after signing up.
Generate lipsync video from an existing video and audio file. Perfect for dubbing, voice-over, and video translation.
Note: The system automatically determines the processing method based on your input. Provide videoUrl for video-to-video lipsync, or imageUrl for image-to-video lipsync.
{
"audioUrl": "https://example.com/audio.mp3",
"videoUrl": "https://example.com/video.mp4",
"settings": {
"resolution": "720p",
"fps": 25,
"maxDuration": 60
},
"webhookUrl": "https://yourapp.com/webhook"
}Publicly accessible URL to the audio file (MP3, WAV, etc.)
Publicly accessible URL to the source video file (MP4, MOV, etc.)
Processing settings:
resolution: "480p", "720p", or "1080p" (default: "720p")fps: Number between 24-60 (default: 25)maxDuration: Maximum duration in seconds (optional)URL to receive job completion notification
{
"success": true,
"data": {
"jobId": "abc123-xyz789",
"status": "queued",
"inputType": "video",
"estimatedCredits": 5,
"estimatedTime": 120
}
}{
"success": true,
"data": {
"jobId": "abc123-xyz789",
"inputType": "video",
"status": "completed",
"outputUrl": "https://storage.supabase.co/.../video.mp4",
"createdAt": "2025-01-28T12:00:00Z",
"updatedAt": "2025-01-28T12:02:00Z",
"processingTime": 120
}
}Credits: 5 credits per minute of video processed
const response = await fetch('https://lipsync-api-yft3.onrender.com/api/v1/lipsync/generate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'your_api_key_here'
},
body: JSON.stringify({
audioUrl: 'https://example.com/audio.mp3',
videoUrl: 'https://example.com/video.mp4',
settings: {
resolution: '720p',
fps: 25
},
webhookUrl: 'https://yourapp.com/webhook'
})
});
const data = await response.json();
console.log('Job ID:', data.data.jobId);
// Poll for completion
const jobId = data.data.jobId;
const statusResponse = await fetch(
`https://lipsync-api-yft3.onrender.com/api/v1/lipsync/status/${jobId}`,
{
headers: { 'X-API-Key': 'your_api_key_here' }
}
);
const status = await statusResponse.json();
console.log('Status:', status.data.status);
console.log('Output URL:', status.data.outputUrl);import requests
API_KEY = "your_api_key_here"
BASE_URL = "https://lipsync-api-yft3.onrender.com/api/v1"
headers = {
"X-API-Key": API_KEY,
"Content-Type": "application/json"
}
# Submit job
response = requests.post(
f"{BASE_URL}/lipsync/generate",
headers=headers,
json={
"audioUrl": "https://example.com/audio.mp3",
"videoUrl": "https://example.com/video.mp4",
"settings": {
"resolution": "720p",
"fps": 25
},
"webhookUrl": "https://yourapp.com/webhook"
}
)
job_id = response.json()["data"]["jobId"]
print(f"Job submitted: {job_id}")
# Check status
import time
while True:
status = requests.get(
f"{BASE_URL}/lipsync/status/{job_id}",
headers=headers
).json()
if status["data"]["status"] == "completed":
video_url = status["data"]["outputUrl"]
print(f"Video ready: {video_url}")
break
time.sleep(5)curl -X POST https://lipsync-api-yft3.onrender.com/api/v1/lipsync/generate \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key_here" \
-d '{
"audioUrl": "https://example.com/audio.mp3",
"videoUrl": "https://example.com/video.mp4",
"settings": {
"resolution": "720p",
"fps": 25
}
}'When you provide a webhookUrl, we'll POST to it when your job completes.
{
"jobId": "abc123-xyz789",
"status": "completed",
"result": {
"outputUrl": "https://storage.supabase.co/.../video.mp4",
"duration": 120
},
"creditsUsed": 10
}{
"jobId": "abc123-xyz789",
"status": "failed",
"error": "Processing failed: insufficient memory"
}Generate natural-sounding speech from text using advanced neural TTS technology.
Documentation coming soon
Generate lipsync videos directly from a single image and audio. Revolutionary image-to-video technology.
Documentation coming soon