Add sound to Kling video
August 8, 2025
Table of contents
This endpoint generates sound for an existing video using Kling’s AI audio generation capabilities.
https://api.useapi.net/v1/kling/videos/add-sound
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
API token
is required, see Setup useapi.net for details.
Request Body
{
"video": "https://s21-kling.klingai.com/....mp4",
"replyUrl": "https://my.domain.com/webhook-endpoint-kling",
"replyRef": "my-id-1234"
}
-
email
is optional when only one account configured.
However, if you have multiple accounts configured, this parameter becomes required. -
video
is required, the URL of the video to add sound to.
Video can be uploaded using POST /assets and the returned URL can be used here. -
cropVideoOriginalSound
is optional, whether to preserve the original video’s sound.
Defaultfalse
(original sound will be replaced). -
maxJobs
is optional, the maximum number of concurrent Kling jobs. -
replyUrl
is optional, a URL to receive webhooks when the video is completed.
See useapi.net Webhooks. -
replyRef
is optional, include a custom reference to identify the job.
Passed as-is to thereplyUrl
webhook.
Responses
-
{ "task": { "id": 1234567890, "userId": 12345, "type": "kwave_video2audio", "scene": "NORMAL_CREATION", "status": 5, "taskInfo": { "type": "kwave_video2audio", "inputs": [ { "name": "video", "inputType": "URL", "token": null, "blobStorage": null, "url": "https://v15-kling.klingai.com/…", "cover": null, "fromWorkId": null, "fromUploadId": null } ], "arguments": [ { "name": "biz", "value": "klingai" }, { "name": "imageCount", "value": "1" }, { "name": "duration", "value": "20" } ], "extraArgs": {}, "callbackPayloads": [ { "name": "video2audio_payloads", "resources": [ { "name": "originalVideoUrl", "type": "VIDEO", "url": "https://v15-kling.klingai.com/…" } ], "arguments": [ { "name": "cropVideoOriginalSound", "value": "false" } ] } ], "scene": "NORMAL_CREATION" }, "favored": false, "deleted": false, "viewed": false, "createTime": 1754630611379, "updateTime": 1754630611379, "viewTime": 0, "status_name": "submitted", "status_final": false }, "works": [], "status": 5, "message": "", "limitation": null, "userPoints": { "points": [ { "orderId": "1234567890", "type": "reward", "amount": 26600, "balance": 3150, "startTime": 1754406534079, "endTime": 1757084934079 } ], "total": 113390 }, "userTickets": { "ticket": [ { "orderId": "1234456789", "type": "priority", "packageType": "reward", "amount": 1, "balance": 1, "startTime": 1754406534079, "endTime": 1757084934079 } ] }, "editProject": null, "status_name": "submitted", "status_final": false }
-
{ "error": "Invalid video URL format" }
-
{ "error": "Unauthorized", "code": 401 }
When successful, the response includes a task ID which can be used to check the status using GET /tasks/task_id
.
Model
{ // TypeScript, all fields are optional
task: {
id: number // Unique task identifier
userId: number // User ID
type: string // Task type: "kwave_video2audio"
scene: string // Scene type: "NORMAL_CREATION"
status: number // Task status
taskInfo: {
type: string // Task type
inputs: {
name: string // Input name: "video"
inputType: string // Input type: "URL"
token: string | null
blobStorage: string | null
url: string // Video URL
cover: string | null
fromWorkId: number | null
fromUploadId: number | null
}[]
arguments: {
name: string // Argument name
value: string // Argument value
}[]
extraArgs: Record<string, any>
callbackPayloads: {
name: string // "video2audio_payloads"
resources: {
name: string // "originalVideoUrl"
type: string // "VIDEO"
url: string // Original video URL
marginTop?: number
countInRow?: number
mode?: string
}[]
arguments: {
name: string // Parameter name
value: string // Parameter value
}[]
}[]
scene: string // Scene type
}
favored: boolean
deleted: boolean
viewed: boolean
createTime: number // Creation timestamp
updateTime: number // Update timestamp
viewTime: number // View timestamp
status_name: string // Status name: "submitted"
status_final: boolean // Whether status is final
}
works: any[] // Work items (empty initially)
status: number // Overall status
message: string // Status message
limitation: any | null // Rate limiting info
userPoints: {
points: {
orderId: string // Order ID
type: string // Point type
amount: number // Point amount
balance: number // Remaining balance
startTime: number // Start timestamp
endTime: number // End timestamp
}[]
total: number // Total points
}
userTickets: {
ticket: {
orderId: string // Order ID
type: string // Ticket type
packageType: string // Package type
amount: number // Ticket amount
balance: number // Remaining balance
startTime: number // Start timestamp
endTime: number // End timestamp
}[]
}
editProject: any | null // Edit project info
status_name: string // Status name
status_final: boolean // Whether status is final
}
Examples
-
curl "https://api.useapi.net/v1/kling/videos/add-sound" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -d '{ "email": "[email protected]", "video": "https://s21-kling.klingai.com/....mp4", "replyUrl": "https://my.domain.com/webhook-endpoint-kling" }'
-
const token = "API token"; const email = "Previously configured account email"; const requestData = { email, video: "https://s21-kling.klingai.com/....mp4", replyUrl: "https://my.domain.com/webhook-endpoint-kling" }; const response = await fetch("https://api.useapi.net/v1/kling/videos/add-sound", { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${token}`, }, body: JSON.stringify(requestData) }); const result = await response.json(); console.log("response", {response, result});
-
import requests token = "API token" email = "Previously configured account email" request_data = { "email": email, "video": "https://s21-kling.klingai.com/....mp4", "replyUrl": "https://my.domain.com/webhook-endpoint-kling" } headers = { "Content-Type": "application/json", "Authorization": f"Bearer {token}" } response = requests.post("https://api.useapi.net/v1/kling/videos/add-sound", headers=headers, json=request_data) print(response, response.json())