cURL
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": true
}'import os
import requests
payload = {
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": True
}
response = requests.post(
"https://api.apipod.ai/v1/videos/generations",
headers={
"Authorization": f"Bearer {os.environ['APIPOD_API_KEY']}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
response.raise_for_status()
print(response.json())package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`{
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": true
}`)
req, err := http.NewRequest(http.MethodPost, "https://api.apipod.ai/v1/videos/generations", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("APIPOD_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(resp.Status, string(out))
}use reqwest::Client;
use serde_json::json;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload = json!({
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": true
});
let response = Client::new()
.post("https://api.apipod.ai/v1/videos/generations")
.bearer_auth(env::var("APIPOD_API_KEY")?)
.json(&payload)
.send()
.await?
.error_for_status()?;
println!("{}", response.text().await?);
Ok(())
}const response = await fetch("https://api.apipod.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.APIPOD_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": true
}),
});
if (!response.ok) {
throw new Error(`APIPod request failed: ${response.status} ${await response.text()}`);
}
console.log(await response.json());{
"code": 200,
"message": "success",
"data": {
"task_id": "vid_task_01JEXAMPLE"
}
}Kling 3.0 Omni
Kling 3.0 Omni 视频编辑
Kling 3.0 Omni Edit 是 APIPod 面向 Kling 3.0 Omni 提供的视频编辑模式,根据文本指令改写源视频,可附加最多 4 张参考图。
POST
https://api.apipod.ai
/
v1
/
videos
/
generations
cURL
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": true
}'import os
import requests
payload = {
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": True
}
response = requests.post(
"https://api.apipod.ai/v1/videos/generations",
headers={
"Authorization": f"Bearer {os.environ['APIPOD_API_KEY']}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
response.raise_for_status()
print(response.json())package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`{
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": true
}`)
req, err := http.NewRequest(http.MethodPost, "https://api.apipod.ai/v1/videos/generations", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("APIPOD_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(resp.Status, string(out))
}use reqwest::Client;
use serde_json::json;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload = json!({
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": true
});
let response = Client::new()
.post("https://api.apipod.ai/v1/videos/generations")
.bearer_auth(env::var("APIPOD_API_KEY")?)
.json(&payload)
.send()
.await?
.error_for_status()?;
println!("{}", response.text().await?);
Ok(())
}const response = await fetch("https://api.apipod.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.APIPOD_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"model": "kling-3.0-omni-edit",
"prompt": "Replace the cloudy sky in @video_1 with the sunset sky from @image_1, keep everything else unchanged.",
"video_urls": [
"https://cdn.example.com/source-clip.mp4"
],
"image_urls": [
"https://cdn.example.com/kling-ref-1.jpg"
],
"resolution": "1080p",
"keep_original_sound": true
}),
});
if (!response.ok) {
throw new Error(`APIPod request failed: ${response.status} ${await response.text()}`);
}
console.log(await response.json());{
"code": 200,
"message": "success",
"data": {
"task_id": "vid_task_01JEXAMPLE"
}
}使用说明
- 源视频:
video_urls中必须且只能传 1 个 MP4/MOV 视频(3-15.5 秒),可附加最多 4 张参考图。输出时长与宽高比跟随源视频,因此不接受duration和aspect_ratio。将keep_original_sound设为true可保留原声。 - 引用输入:图片按顺序编号为
image_1..image_N,视频为video_1。在 prompt 中用@image_1/@video_1指向具体输入。 - 不支持:
negative_prompt(请把排除项写进 prompt)、audio_urls、video_url(请使用video_urls)。
计费
按源视频时长(向上取整到整秒)逐秒计费,720p / 1080p 按增强档计费(4K 按 4K 档)。每秒费率分档:720p 基础、720p 增强、1080p 基础、1080p 增强、4K。开启原生音频或带任何视频输入时按增强档计费。具体价格以 模型页 展示为准。任务流程
创建请求返回data.task_id。使用查询视频任务轮询,直到 status 变为 completed(结果位于 data.result)或 failed;也可以传入 callback_url,在任务进入终态时接收通知。授权
在 Authorization 请求头中以 Bearer Token 形式传入 APIPod API Key。
请求体
application/json
APIPod 公开模型 ID。
Allowed value:
"kling-3.0-omni-edit"必填的编辑指令,最多 2500 字。输入会自动编号:图片按顺序为 image_1..image_N,视频为 video_1;可在 prompt 中以 @image_1、@video_1 引用。
Maximum string length:
2500仅 1 个待编辑的源视频 URL(MP4 或 MOV,3-15.5 秒)。输出时长与宽高比跟随该视频。
Required array length:
1 element可选的参考图 URL(最多 4 张)。
Maximum array length:
4输出分辨率,默认 720p。每秒费率取决于分辨率档位。
可用选项:
720p, 1080p, 4k 是否保留源视频的音轨。默认 false(输出不保留原声)。
为 true 时额外生成带水印的副本,任务结果返回水印副本。
接收任务终态通知的 HTTPS 地址。
此页面对您有帮助吗?