Erzeuge Lip-Sync-Videos programmatisch mit unserer leistungsstarken REST-API
Verwalte deine Authentifizierungsschlüssel
Gib einen einprägsamen Namen an (optional)
Anmeldung erforderlich
Bitte melde dich an, um API-Schlüssel zu erstellen und zu verwalten.
Starte mit flexiblen und wettbewerbsfähigen Tarifen
Hinweis: API-Credits und Benutzer-Credits sind unabhängig und nicht austauschbar.
Schütze deine API-Anfragen
Füge den API-Schlüssel in allen Anfragen im Authorization-Header ein:
Authorization: Bearer sk_XXXX_YYYY
RESTful API-Endpunkte
/api/v1/lipsync-videoVideo-zu-Video mit Audiotausch (Lip-Sync beibehalten)
/api/v1/lipsync-imageBild + Audio → Einsprecher-Avatar
/api/v1/lipsync-image-multiBild + zwei Audios → Mehrsprecher-Avatar (Gespräch/Dialog)
/api/v1/jobs/{requestId}Jobstatus abfragen und Ergebnis abrufen
Vollständige Endpunktspezifikationen
Alle Endpunkte teilen eine gemeinsame Struktur: optionaler webhook und modellspezifische formState-Parameter.
Ersetzt die Tonspur eines bestehenden Videos unter Beibehaltung des Lip-Syncs
webhookoptionalDeine Callback-URL (HTTPS). Wir senden das Ergebnis per POST nach Abschluss.
formStateerforderlichObjekt mit allen Generierungsparametern (siehe unten).
videoerforderlichÖffentliche URL des Quellvideos (MP4, MOV, etc.)
audioerforderlichÖffentliche URL des Audios (MP3, WAV, etc.)
resolutionoptional"480p" oder "720p" (Standard: 480p)
mask_imageoptionalÖffentliche URL des Maskenbilds (beschränkt den Lip-Sync-Bereich)
promptoptionalText für Stilvorgaben
seedoptionalGanzzahliger Seed für Reproduzierbarkeit
Choose how to receive your results
All API calls are asynchronous. You have two options to retrieve results:
Provide a webhook URL in the JSON body. We will POST the result to your endpoint when the job completes.
Omit the webhook parameter and use the returned requestId to poll GET /api/v1/jobs/{requestId} every 5-10 seconds until status is "completed".
POST /api/v1/lipsync-image
Authorization: Bearer sk_XXXX_YYYY
Content-Type: application/json
{
"webhook": "https://your-app.example.com/webhooks/lipsync",
"formState": {
"image": "https://.../face.png",
"audio": "https://.../voice.mp3",
"resolution": "720p",
"seed": 42
}
}
// Immediate Response:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing"
}
// Later, when job completes, we POST to your webhook:
POST https://your-app.example.com/webhooks/lipsync
Content-Type: application/json
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"model": "lipsync-image",
"status": "completed",
"output": "https://.../result.mp4",
"error": "",
"executionTime": 12345,
"timings": null
}// Step 1: Submit job (no webhook parameter)
POST /api/v1/lipsync-image
Authorization: Bearer sk_XXXX_YYYY
Content-Type: application/json
{
"formState": {
"image": "https://.../face.png",
"audio": "https://.../voice.mp3",
"resolution": "720p"
}
}
// Immediate Response:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing"
}
// Step 2: Poll for status (repeat every 5-10 seconds)
GET /api/v1/jobs/550e8400-e29b-41d4-a716-446655440000
Authorization: Bearer sk_XXXX_YYYY
// Response while processing:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"model": "lipsync",
"status": "processing",
"output": null,
"error": "",
"executionTime": null,
"timings": null
}
// Response when completed:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"model": "lipsync-image",
"status": "completed",
"output": "https://.../result.mp4",
"error": "",
"executionTime": 12345,
"timings": null
}
// Response if failed:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"model": "lipsync-image",
"status": "failed",
"output": null,
"error": "Invalid audio format",
"executionTime": null,
"timings": null
}Ready-to-use integration examples
import fetch from 'node-fetch';
import express from 'express';
const API_KEY = 'Bearer sk_XXXX_YYYY';
const BASE_URL = 'https://lipsync.studio/api/v1';
// Set up webhook server to receive results
const app = express();
app.use(express.json());
app.post('/webhooks/lipsync', (req, res) => {
const { id, status, output, error, model } = req.body;
console.log('✅ Job update received!');
console.log('Job ID:', id);
console.log('Model:', model);
console.log('Status:', status);
if (status === 'completed') {
console.log('Video URL:', output);
} else if (status === 'failed') {
console.error('Error:', error);
}
// TODO: Save output URL to your database, send notification, etc.
res.status(200).json({ received: true });
});
app.listen(3000, () => {
console.log('Webhook server listening on port 3000');
});
// Submit job with webhook
async function submitJobWithWebhook() {
const webhookUrl = 'https://your-public-domain.com/webhooks/lipsync';
const res = await fetch(`${BASE_URL}/lipsync-image`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': API_KEY
},
body: JSON.stringify({
webhook: webhookUrl,
formState: {
image: 'https://example.com/portrait.jpg',
audio: 'https://example.com/speech.mp3',
resolution: '720p'
}
})
});
const data = await res.json();
console.log('Job submitted:', data.id);
console.log('Waiting for webhook callback...');
// You don't need to poll! The result will be POSTed to your webhook.
}
submitJobWithWebhook();