Sync a talking head video to a provided audio track.
Authenticate with the X-API-Key request header.
List price. Volume / bulk customers get a discounted rate — contact us for account pricing.
| Name | Type | Required | Description | Default / options |
|---|---|---|---|---|
| video_url | string | required | Source video with a visible face. | — |
| audio_url | string | optional | Audio track to lip-sync to (audio2video mode). Provide this OR text. | — |
| text | string | optional | Text to speak (text2video mode, max 120 chars). Provide this OR audio_url. | — |
| voice_id | string | optional | TTS voice id (required for text2video). | — |
| voice_language | string | optional | TTS language. | default: zhzhen |
| voice_speed | number | optional | TTS speech rate, 0.8-2.0. | default: 1.0 |
| callback_url | string | optional | Webhook URL notified when the task completes. | — |
curl -X POST https://brahmand-api.bulletshorts.co/v1/video/kling-lipsync \
-H "X-API-Key: $TRINETRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"video_url":"https://example.com/face.mp4","audio_url":"https://example.com/speech.mp3"}'{
"video_url": "https://example.com/face.mp4",
"audio_url": "https://example.com/speech.mp3"
}Submitting a job returns 202 Accepted with a job id. Poll GET /v1/jobs/{id} until the job reaches a terminal state, or register a webhook to be notified.
{
"job_id": "job_klinglipsync_a1b2c3",
"status": "queued"
}{
"id": "job_klinglipsync_a1b2c3",
"model": "kling-lipsync",
"status": "succeeded",
"output": {
"outputs": [
{
"url": "https://cdn.trinetra.ai/out/kling-lipsync/a1b2c3.mp4",
"type": "video"
}
]
},
"credits_charged": 10
}Webhook: set a webhook_url on your API key to receive a POST with the terminal job document instead of polling.