Veo 影片 API
使用 88API 提交 Veo 3.1 影片任務、輪詢狀態並下載生成結果
88API 的 Veo 介面採用非同步任務模式:先提交生成任務,再使用返回的任務 ID 輪詢狀態。任務完成後,響應中會提供可下載的 video_url。
介面地址
https://88api.ai所有請求都需要攜帶 API Key:
Authorization: Bearer sk-xxxx
Content-Type: application/json可用模型
| 模型 | 規格 | 適用場景 |
|---|---|---|
veo-3.1-fast-1080p-8s | Veo 3.1 Fast、固定 8 秒 | 速度優先、日常生成 |
veo-3.1-1080p-8s | Veo 3.1 Standard、固定 8 秒 | 質量優先 |
請始終使用表中的 88API 模型名。響應中的 model 可能顯示實際的上游模型名,客戶端不應依賴該欄位判斷任務歸屬。
輸入能力與實測邊界
以下結果已透過 88API 公開介面實際提交任務並下載成片驗證:
| 能力 | 支援情況 | 實測說明 |
|---|---|---|
| 文生影片 | 支援 | Fast 與 Standard 均已生成成功 |
| 單圖生影片 | 支援 | 1 張圖片作為起始參考幀 |
| 首尾幀生影片 | 支援 | 第 1 張作為首幀,第 2 張作為尾幀;Fast 與 Standard 均已驗證 |
| 3 張及以上參考圖 | 不支援 | 請求可能仍會完成,但第 3 張開始不會生效;客戶端必須限制為最多 2 張 |
| 參考音訊輸入 | 不支援 | 不支援上傳或傳入音訊 URL,參考音訊數量為 0 |
| 生成影片音軌 | 支援 | Veo 會為成片生成原生音軌,但不能使用使用者提供的音訊作為參考 |
重要:介面可能不會對多餘圖片或未知音訊欄位返回引數錯誤。請求成功只表示任務已建立,不代表這些輸入已經生效。請嚴格按照上表構造請求。
第一步:提交影片任務
請求
POST /v1/videos請求體為 JSON:
| 引數 | 型別 | 必填 | 說明 |
|---|---|---|---|
model | string | 是 | 使用上表中的模型名 |
prompt | string | 是 | 影片內容、鏡頭、運動和風格描述 |
size | string | 否 | 推薦橫屏 1920x1080 或豎屏 1080x1920;其他尺寸由上游決定實際輸出 |
duration | integer | 否 | 當前模型固定為 8 秒,建議明確傳入 8 |
images | string[] | 否 | 圖生影片參考圖,支援圖片 URL 或 Base64;1 張為首幀,2 張為首幀加尾幀,最多 2 張 |
當前介面沒有參考音訊引數。不要傳入 audio、audio_url、audios 或 input_audio;這些未知欄位即使沒有觸發報錯,也不會作為參考音訊生效。
文生影片示例
curl --request POST 'https://88api.ai/v1/videos' \
--header 'Authorization: Bearer sk-xxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "veo-3.1-fast-1080p-8s",
"prompt": "電影感航拍鏡頭,夜晚的未來城市,霓虹燈倒映在溼潤街道上,鏡頭緩慢向前推進",
"size": "1920x1080",
"duration": 8
}'豎屏只需將 size 改為:
{
"size": "1080x1920"
}圖生影片示例
單張參考圖會作為影片的起始參考幀:
curl --request POST 'https://88api.ai/v1/videos' \
--header 'Authorization: Bearer sk-xxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "veo-3.1-1080p-8s",
"prompt": "保持主體外觀一致,鏡頭緩慢靠近,背景雲層自然移動",
"size": "1920x1080",
"duration": 8,
"images": [
"https://example.com/reference.jpg"
]
}'使用兩張圖片時,第 1 張是首幀,第 2 張是尾幀:
curl --request POST 'https://88api.ai/v1/videos' \
--header 'Authorization: Bearer sk-xxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "veo-3.1-fast-1080p-8s",
"prompt": "保持主體和畫面風格一致,從首幀自然過渡到尾幀,鏡頭運動平穩",
"size": "1920x1080",
"duration": 8,
"images": [
"https://example.com/first-frame.jpg",
"https://example.com/last-frame.jpg"
]
}'不要提交第 3 張圖片。當前介面可能仍返回成功,但實測第 3 張圖片不會進入生成結果。
提交成功響應
介面會立即返回排隊中的任務:
{
"id": "task_xxxxxxxxxxxxxxxxxxxxxxxx",
"task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxx",
"object": "video",
"model": "veo-3.1-fast",
"status": "queued",
"progress": 0,
"created_at": 1786106645,
"size": "1920x1080"
}儲存 id 或 task_id,下一步查詢時使用。不要在客戶端超時後直接重複提交相同的 POST 請求,否則可能建立並計費多個任務。
第二步:輪詢任務狀態
請求
GET /v1/videos/{id}curl 'https://88api.ai/v1/videos/task_xxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'Authorization: Bearer sk-xxxx'推薦每隔 5~10 秒查詢一次,總超時時間設定為至少 600 秒。
狀態說明
| 狀態 | 說明 |
|---|---|
queued | 已進入佇列 |
processing | 正在生成 |
completed | 生成成功,讀取 video_url |
failed | 生成失敗,讀取 error |
生成成功響應
{
"id": "task_xxxxxxxxxxxxxxxxxxxxxxxx",
"model": "veo-3.1-fast",
"status": "completed",
"video_url": "https://example-bucket.s3.amazonaws.com/video.mp4?...",
"created_at": 1786106645
}生成失敗響應
{
"id": "task_xxxxxxxxxxxxxxxxxxxxxxxx",
"model": "veo-3.1-fast",
"status": "failed",
"error": {
"code": "generation_failed",
"message": "影片生成失敗"
}
}JavaScript 完整示例
const apiKey = 'sk-xxxx';
const baseUrl = 'https://88api.ai';
async function createVideo() {
const response = await fetch(`${baseUrl}/v1/videos`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'veo-3.1-fast-1080p-8s',
prompt: '一架無人機掠過雪山山脊,清晨金色陽光,電影感航拍',
size: '1920x1080',
duration: 8,
}),
});
const data = await response.json();
if (!response.ok) throw new Error(data?.error?.message || '提交失敗');
return data.id;
}
async function waitForVideo(id) {
const deadline = Date.now() + 10 * 60 * 1000;
while (Date.now() < deadline) {
await new Promise((resolve) => setTimeout(resolve, 8000));
const response = await fetch(`${baseUrl}/v1/videos/${id}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const data = await response.json();
if (!response.ok) throw new Error(data?.error?.message || '查詢失敗');
if (data.status === 'completed') return data.video_url;
if (data.status === 'failed') {
throw new Error(data?.error?.message || '影片生成失敗');
}
}
throw new Error('影片生成超時');
}
const taskId = await createVideo();
const videoUrl = await waitForVideo(taskId);
console.log(videoUrl);下載和連結注意事項
- 完成後直接下載響應中的
video_url,不要拼接其他下載路徑。 video_url通常是有有效期的簽名地址,請在任務完成後及時儲存影片。- JSON 文字中可能看到
\u0026,這是字元&的轉義形式。請使用 JSON 解析器讀取響應,不要手工複製未解析的原始字串。 - 不要把 API Key 寫入瀏覽器前端程式碼、公開倉庫或日誌。
常見問題
為什麼提交後沒有立即返回影片?
影片生成是非同步任務。提交介面只返回任務 ID,必須繼續呼叫查詢介面,直到狀態變為 completed 或 failed。
可以請求 15 秒或 30 秒嗎?
不可以。當前公開的兩個 Veo 模型均為固定 8 秒規格,請使用模型名中帶有的 8s 作為能力邊界。
可以上傳參考音訊嗎?
不可以。當前 Veo 介面的參考音訊數量為 0。生成結果通常會包含 Veo 自動生成的原生音軌,但不能透過 audio、audio_url、audios 或 input_audio 指定參考音訊。