88API88API
使用指南AI 应用API 文档帮助支持
视频(Video)

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-8sVeo 3.1 Fast、固定 8 秒速度优先、日常生成
veo-3.1-1080p-8sVeo 3.1 Standard、固定 8 秒质量优先

请始终使用表中的 88API 模型名。响应中的 model 可能显示实际的上游模型名,客户端不应依赖该字段判断任务归属。

第一步:提交视频任务

请求

POST /v1/videos

请求体为 JSON:

参数类型必填说明
modelstring使用上表中的模型名
promptstring视频内容、镜头、运动和风格描述
sizestring推荐横屏 1920x1080 或竖屏 1080x1920;其他尺寸由上游决定实际输出
durationinteger当前模型固定为 8 秒,建议明确传入 8
imagesstring[]图生视频参考图,支持图片 URL 或 Base64,最多 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
  }'

竖屏只需将 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"
    ]
  }'

提交成功响应

接口会立即返回排队中的任务:

{
  "id": "task_xxxxxxxxxxxxxxxxxxxxxxxx",
  "task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxx",
  "object": "video",
  "model": "veo-3.1-fast",
  "status": "queued",
  "progress": 0,
  "created_at": 1786106645,
  "size": "1920x1080"
}

保存 idtask_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,必须继续调用查询接口,直到状态变为 completedfailed

可以请求 15 秒或 30 秒吗?

不可以。当前公开的两个 Veo 模型均为固定 8 秒规格,请使用模型名中带有的 8s 作为能力边界。

应该使用 seconds 还是 duration

Veo 接口请使用本文档中的 duration: 8。不要照搬旧版或其他视频供应商的 multipart/form-data 示例。