Güçlü REST API’mizle dudak senkronlu videoları programlı olarak üretin
API kimlik doğrulama anahtarlarınızı yönetin
Kolay hatırlanacak bir ad verin (isteğe bağlı)
Giriş gerekli
API anahtarları oluşturmak ve yönetmek için giriş yapın.
Esnek ve rekabetçi planlarla başlayın
Not: API kredileri ve kullanıcı kredileri bağımsızdır, birbirine dönüştürülemez.
API isteklerinizi güvene alın
Tüm isteklerde Authorization başlığında API anahtarınızı gönderin:
Authorization: Bearer sk_XXXX_YYYY
RESTful API uç noktaları
/api/v1/lipsync-videoVideodaki sesi yenisiyle değiştir (dudak senkronu korunur)
/api/v1/lipsync-imageGörüntü + ses → tek konuşmacılı avatar videosu
/api/v1/lipsync-image-multiGörüntü + çift ses → çoklu konuşmacı avatarı (sohbet/diyalog)
/api/v1/jobs/{requestId}İş durumunu sorgula ve sonucu al
Tam uç nokta özellikleri
Tüm uç noktalar ortak bir yapıyı paylaşır: isteğe bağlı webhook ve modele özgü formState parametreleri.
Mevcut videodaki sesi, dudak senkronunu koruyarak yenisiyle değiştirir
webhookisteğe bağlıCallback URL’niz (HTTPS). Tamamlandığında sonucu buraya POST ederiz.
formStategerekliTüm üretim parametrelerini içeren nesne (aşağıya bakın).
videogerekliKaynak videonun genel URL’si (MP4, MOV, vb.)
audiogerekliSesin genel URL’si (MP3, WAV, vb.)
resolutionisteğe bağlı"480p" veya "720p" (varsayılan: 480p)
mask_imageisteğe bağlıMaske görselinin genel URL’si (lipsync alanını sınırlar)
promptisteğe bağlıStil rehberi metni
seedisteğe bağlıTekrarlanabilirlik için tam sayı tohum
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();