API Documentation

Complete guide to integrating with the LipSync.dev API

Lipsync API

Available

Getting Started

Base URL

https://lipsync-api-yft3.onrender.com

Authentication

All API requests require authentication using your API key. Include your key in the request headers:

// Headers
X-API-Key: your_api_key_here
Content-Type: application/json

Get your API key from Dashboard → API Keys after signing up.

Video-to-Video Lipsync

POST/api/v1/lipsync/generate

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.

Request Body

{
  "audioUrl": "https://example.com/audio.mp3",
  "videoUrl": "https://example.com/video.mp4",
  "settings": {
    "resolution": "720p",
    "fps": 25,
    "maxDuration": 60
  },
  "webhookUrl": "https://yourapp.com/webhook"
}

Parameters

audioUrlrequired

Publicly accessible URL to the audio file (MP3, WAV, etc.)

videoUrlrequired

Publicly accessible URL to the source video file (MP4, MOV, etc.)

settingsoptional

Processing settings:

  • resolution: "480p", "720p", or "1080p" (default: "720p")
  • fps: Number between 24-60 (default: 25)
  • maxDuration: Maximum duration in seconds (optional)
webhookUrloptional

URL to receive job completion notification

Response

{
  "success": true,
  "data": {
    "jobId": "abc123-xyz789",
    "status": "queued",
    "inputType": "video",
    "estimatedCredits": 5,
    "estimatedTime": 120
  }
}

Check Job Status

GET/api/v1/lipsync/status/:jobId
{
  "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

Code Examples

JavaScript/Node.js

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);

Python

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

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
    }
  }'

Rate Limits

10
Requests per minute
Free Plan
60
Requests per minute
Starter Plan
300
Requests per minute
Pro Plan

Webhooks

When you provide a webhookUrl, we'll POST to it when your job completes.

Success Payload

{
  "jobId": "abc123-xyz789",
  "status": "completed",
  "result": {
    "outputUrl": "https://storage.supabase.co/.../video.mp4",
    "duration": 120
  },
  "creditsUsed": 10
}

Error Payload

{
  "jobId": "abc123-xyz789",
  "status": "failed",
  "error": "Processing failed: insufficient memory"
}

TTS

Coming Soon

Generate natural-sounding speech from text using advanced neural TTS technology.

Features

  • • Multiple voice options and customization
  • • Support for 50+ languages
  • • High-quality audio output
  • • Real-time generation available

Endpoint

POST /api/v1/tts/generate

Documentation coming soon

Lipsync Genesis V2

Coming Soon

Generate lipsync videos directly from a single image and audio. Revolutionary image-to-video technology.

Features

  • • Generate talking videos from static images
  • • Ultra-realistic lip synchronization
  • • Support for multiple resolutions (480p, 720p, 1080p)
  • • Fast processing times

Endpoint

POST /api/v1/lipsync/generate
// imageUrl required for image-to-video

Documentation coming soon

Need Help?

Can't find what you're looking for? Our support team is here to help.

Get Started Today