📚 文档概览

本文档提供完整的API接口说明,包括图片生成模型视频生成模型两大部分。

🎨 图片生成模型(3个接口)

  • • 文生图接口 - /v1/images/generations
  • • 图生图接口 - /v1/images/edits
  • • 多模态对话接口 - /v1/chat/completions

🎬 视频生成模型(3个接口)

  • • 视频生成接口 - /v1/videos
  • • 视频状态查询 - /v1/videos/{video_id}
  • • 视频Remix - /v1/videos/{video_id}/remix

🚀 快速开始

1. API密钥配置

在使用API之前,您需要获取API密钥并进行配置:

export API_KEY="your-api-key-here"
export BASE_URL="https://api.example.com"

2. 认证方式

所有API请求都需要在请求头中包含认证信息:

Authorization: Bearer YOUR_API_KEY

3. 快速示例

以下是一个简单的图片生成请求示例:

curl -X POST https://api.example.com/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dall-e-3",
    "prompt": "一只可爱的猫咪在花园里玩耍",
    "n": 1,
    "size": "1024x1024"
  }'

4. 基础URL

所有API端点的基础URL为:

https://api.example.com
1

图片生成模型接口

1.1 文生图接口

POST
/v1/images/generations

📝 接口说明

通过文本描述生成图片,支持多种图片尺寸和格式。适用于根据提示词创建全新的图像内容。

📋 请求参数

参数名 类型 必需 说明
prompt string 图片描述文本,建议使用英文以获得更好效果
model string 模型ID,如 "flux.1-kontext-dev"、"dall-e-3"
size string 图片尺寸,默认 "1024x1024",支持 "512x512"、"1024x1024"、"1792x1024" 等
response_format string 返回格式:"url"(图片URL)或 "b64_json"(Base64编码)
n integer 生成图片数量,默认为 1,最大为 10

💻 请求示例

cURL:

curl -X POST "https://api.example.com/v1/images/generations" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dall-e-3",
    "prompt": "a beautiful sunset over mountains",
    "size": "1024x1024",
    "response_format": "url",
    "n": 1
  }'

Python:

import requests

url = "https://api.example.com/v1/images/generations"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "model": "dall-e-3",
    "prompt": "a beautiful sunset over mountains",
    "size": "1024x1024",
    "response_format": "url",
    "n": 1
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result)

JavaScript:

const response = await fetch('https://api.example.com/v1/images/generations', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'dall-e-3',
    prompt: 'a beautiful sunset over mountains',
    size: '1024x1024',
    response_format: 'url',
    n: 1
  })
});

const result = await response.json();
console.log(result);

✅ 响应示例

{
  "created": 1234567890,
  "data": [
    {
      "url": "https://example.com/generated-image.png",
      "revised_prompt": "a beautiful sunset over mountains with vibrant colors"
    }
  ]
}

1.2 图生图接口

POST
/v1/images/edits

📝 接口说明

基于已有图片进行编辑和修改,支持多种图片输入方式。可以对图片进行风格转换、内容修改等操作。

💡 支持的图片输入格式:

  • URL格式:直接传入图片的HTTP/HTTPS链接
  • Base64格式:将图片编码为base64字符串(需添加data URI前缀)
  • 文件上传:使用multipart/form-data上传本地文件

📋 请求参数

参数名 类型 必需 说明
image string/file 原始图片(URL、base64或文件)
prompt string 编辑描述文本,说明如何修改图片
model string 模型ID,如 "flux.1-kontext-dev"
size string 输出图片尺寸,默认 "1024x1024"
response_format string 返回格式:"url" 或 "b64_json"

💻 请求示例

方式1:JSON格式(URL方式)

curl -X POST "https://api.example.com/v1/images/edits" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "flux.1-kontext-dev",
    "image": "https://example.com/original-image.jpg",
    "prompt": "change the background to a beach",
    "size": "1024x1024",
    "response_format": "url"
  }'

方式2:FormData格式(文件上传)

curl -X POST "https://api.example.com/v1/images/edits" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "image=@/path/to/image.png" \
  -F "prompt=change the background to a beach" \
  -F "model=flux.1-kontext-dev" \
  -F "size=1024x1024"

方式3:Python(Base64方式)

import requests
import base64

# 读取并编码图片
with open('image.png', 'rb') as f:
    image_base64 = base64.b64encode(f.read()).decode('utf-8')

url = "https://api.example.com/v1/images/edits"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "model": "flux.1-kontext-dev",
    "image": f"data:image/png;base64,{image_base64}",
    "prompt": "change the background to a beach",
    "size": "1024x1024",
    "response_format": "url"
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result)

JavaScript(文件上传):

const formData = new FormData();
formData.append('image', fileInput.files[0]);
formData.append('prompt', 'change the background to a beach');
formData.append('model', 'flux.1-kontext-dev');
formData.append('size', '1024x1024');

const response = await fetch('https://api.example.com/v1/images/edits', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: formData
});

const result = await response.json();
console.log(result);

✅ 响应示例

{
  "created": 1234567890,
  "data": [
    {
      "url": "https://example.com/edited-image.png",
      "revised_prompt": "original image with background changed to a beach scene"
    }
  ]
}

1.3 多模态对话接口(图片)

POST
/v1/chat/completions

📝 接口说明

通过对话方式生成图片,支持在消息中包含图片URL进行图生图操作。此接口兼容OpenAI的chat completions格式。

⚠️ 注意:使用此接口生成图片时,需要在提示词末尾使用英文中括号指定宽高比,例如:[1024:1024]

📋 请求参数

参数名 类型 必需 说明
model string 模型ID,支持图片生成的模型
messages array 对话消息数组,可包含文本和图片
stream boolean 是否流式返回,默认false

💻 请求示例

文生图示例(cURL):

curl -X POST "https://api.example.com/v1/chat/completions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dall-e-3",
    "messages": [
      {
        "role": "user",
        "content": "帮我画一只宇航猫在月球漫步[1024:1024]"
      }
    ],
    "stream": false
  }'

图生图示例(Python):

import requests

url = "https://api.example.com/v1/chat/completions"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "model": "dall-e-3",
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "将这张图片的背景改成海滩[1024:1024]"
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://example.com/original.jpg"
                    }
                }
            ]
        }
    ],

    "stream": false
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result)

✅ 响应示例

{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1234567890,
  "model": "dall-e-3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "https://example.com/generated-image.png"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 20,
    "completion_tokens": 1,
    "total_tokens": 21
  }
}
2

视频生成模型接口

🎬 视频API特性

文生视频、图生视频

支持纯文本描述或基于图片生成视频

视频角色生成

传入视频参数生成角色动画

视频分镜功能

使用特殊格式创建多镜头视频

视频Remix

基于已有视频进行二次创作

异步生成

支持状态查询和进度跟踪

横屏/竖屏自动检测

智能识别视频方向和尺寸

2.1 视频生成接口(异步)

POST
/v1/videos

📝 接口说明

创建视频生成任务,支持多种生成模式。此接口为异步接口,会立即返回任务ID,需要通过查询接口获取生成结果。

💡 支持的生成模式:

  • 文生视频:仅提供prompt参数
  • 图生视频:提供image参数(URL/base64/文件)
  • 视频角色生成:提供video参数
  • 视频分镜:使用特殊格式的prompt(镜头1: ... 镜头2: ...)
  • 视频Remix:提供remix_target_id参数

📋 请求参数

参数名 类型 必需 说明
model string 模型名称,如 "sora-2"、"sora-2-landscape"、"sora-2-portrait"
prompt string 视频描述文本,支持分镜格式
image string/file 图片输入(URL、base64或文件上传),用于图生视频
video string/file 视频输入,用于视频角色生成
remix_target_id string Remix目标视频的share_id

💻 请求示例

示例1:文生视频(cURL)

curl -X POST "https://api.example.com/v1/videos" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sora-2",
    "prompt": "A serene lake at sunset with mountains in the background"
  }'

示例1:文生视频(Python)

import requests

url = "https://api.example.com/v1/videos"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "model": "sora-2",
    "prompt": "A serene lake at sunset with mountains in the background"
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(f"Video ID: {result['id']}")
print(f"Status: {result['status']}")

示例1:文生视频(JavaScript)

const response = await fetch('https://api.example.com/v1/videos', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'sora-2',
    prompt: 'A serene lake at sunset with mountains in the background'
  })
});

const result = await response.json();
console.log('Video ID:', result.id);
console.log('Status:', result.status);

示例2:图生视频(cURL)

curl -X POST "https://api.example.com/v1/videos" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sora-2-landscape",
    "prompt": "Animate this image with gentle camera movement",
    "image": "https://example.com/input-image.jpg"
  }'

示例2:图生视频(Python)

import requests
import base64

# 使用Base64编码的图片
with open('input.jpg', 'rb') as f:
    image_base64 = base64.b64encode(f.read()).decode('utf-8')

url = "https://api.example.com/v1/videos"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "model": "sora-2-landscape",
    "prompt": "Animate this image with gentle camera movement",
    "image": f"data:image/jpeg;base64,{image_base64}"
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(f"Video ID: {result['id']}")

示例2:图生视频(JavaScript)

const response = await fetch('https://api.example.com/v1/videos', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'sora-2-landscape',
    prompt: 'Animate this image with gentle camera movement',
    image: 'https://example.com/input-image.jpg'
  })
});

const result = await response.json();
console.log('Video ID:', result.id);

示例3:视频角色生成(cURL)

curl -X POST "https://api.example.com/v1/videos" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sora-2",
    "prompt": "A character walking through a forest",
    "video": "https://example.com/character-video.mp4"
  }'

示例3:视频角色生成(Python)

import requests

url = "https://api.example.com/v1/videos"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "model": "sora-2",
    "prompt": "A character walking through a forest",
    "video": "https://example.com/character-video.mp4"
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(f"Video ID: {result['id']}")

示例3:视频角色生成(JavaScript)

const response = await fetch('https://api.example.com/v1/videos', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'sora-2',
    prompt: 'A character walking through a forest',
    video: 'https://example.com/character-video.mp4'
  })
});

const result = await response.json();
console.log('Video ID:', result.id);

示例4:视频分镜(cURL)

📌 分镜格式说明:使用"镜头X: 描述..."的格式,每个镜头占一行

curl -X POST "https://api.example.com/v1/videos" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sora-2",
    "prompt": "镜头1: 清晨的城市街道,阳光洒在建筑物上\n镜头2: 咖啡店内,顾客正在点餐\n镜头3: 公园里,人们在晨跑锻炼"
  }'

示例4:视频分镜(Python)

import requests

url = "https://api.example.com/v1/videos"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

# 分镜格式的prompt
storyboard_prompt = """镜头1: 清晨的城市街道,阳光洒在建筑物上
镜头2: 咖啡店内,顾客正在点餐
镜头3: 公园里,人们在晨跑锻炼"""

data = {
    "model": "sora-2",
    "prompt": storyboard_prompt
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(f"Video ID: {result['id']}")

示例4:视频分镜(JavaScript)

// 分镜格式的prompt
const storyboardPrompt = `镜头1: 清晨的城市街道,阳光洒在建筑物上
镜头2: 咖啡店内,顾客正在点餐
镜头3: 公园里,人们在晨跑锻炼`;

const response = await fetch('https://api.example.com/v1/videos', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'sora-2',
    prompt: storyboardPrompt
  })
});

const result = await response.json();
console.log('Video ID:', result.id);

示例5:FormData格式(文件上传)

curl -X POST "https://api.example.com/v1/videos" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=sora-2-landscape" \
  -F "prompt=Animate this image" \
  -F "image=@/path/to/image.jpg"

✅ 响应示例

{
  "id": "video_abc123def456ghi789",
  "object": "video",
  "created_at": 1234567890,
  "status": "queued",
  "model": "sora-2",
  "prompt": "A serene lake at sunset with mountains in the background",
  "progress": 0,
  "seconds": "15",
  "size": "1280x720"
}

2.2 查询视频状态接口

GET
/v1/videos/{video_id}

📝 接口说明

查询异步视频任务的生成状态和进度。视频生成通常需要几分钟时间,可以通过此接口轮询获取最新状态。

📋 请求参数

参数名 类型 必需 说明
video_id string 视频ID,从创建接口返回的id字段

💻 请求示例

cURL:

curl -X GET "https://api.example.com/v1/videos/video_abc123def456ghi789" \
  -H "Authorization: Bearer YOUR_API_KEY"

Python:

import requests
import time

video_id = "video_abc123def456ghi789"
url = f"https://api.example.com/v1/videos/{video_id}"
headers = {
    "Authorization": "Bearer YOUR_API_KEY"
}

# 轮询查询状态
while True:
    response = requests.get(url, headers=headers)
    result = response.json()
    
    print(f"Status: {result['status']}")
    if result['status'] == 'completed':
        print(f"Video URL: {result['video_url']}")
        break
    elif result['status'] == 'failed':
        print(f"Error: {result.get('error', 'Unknown error')}")
        break
    elif result['status'] == 'in_progress':
        print(f"Progress: {result.get('progress', 0)}%")
    
    time.sleep(10)  # 等待10秒后再次查询

JavaScript:

const videoId = 'video_abc123def456ghi789';

async function checkVideoStatus() {
  const response = await fetch(`https://api.example.com/v1/videos/${videoId}`, {
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY'
    }
  });
  
  const result = await response.json();
  console.log('Status:', result.status);
  
  if (result.status === 'completed') {
    console.log('Video URL:', result.video_url);
    return result;
  } else if (result.status === 'failed') {
    console.error('Error:', result.error);
    throw new Error(result.error);
  } else if (result.status === 'in_progress') {
    console.log('Progress:', result.progress + '%');
    // 10秒后再次查询
    await new Promise(resolve => setTimeout(resolve, 10000));
    return checkVideoStatus();
  }
}

checkVideoStatus();

✅ 响应示例

状态1:排队中(queued)

{
  "id": "video_abc123def456ghi789",
  "object": "video",
  "created_at": 1234567890,
  "status": "queued",
  "model": "sora-2",
  "prompt": "A serene lake at sunset with mountains in the background",
  "progress": 0,
  "seconds": "15",
  "size": "1280x720"
}

状态2:生成中(in_progress)

{
  "id": "video_abc123def456ghi789",
  "object": "video",
  "created_at": 1234567890,
  "status": "in_progress",
  "model": "sora-2",
  "prompt": "A serene lake at sunset with mountains in the background",
  "progress": 45,
  "seconds": "15",
  "size": "1280x720"
}

状态3:已完成(completed)

{
  "id": "video_abc123def456ghi789",
  "object": "video",
  "created_at": 1234567890,
  "status": "completed",
  "model": "sora-2",
  "prompt": "A serene lake at sunset with mountains in the background",
  "progress": 100,
  "seconds": "15",
  "size": "1280x720",
  "video_url": "https://example.com/videos/generated-video.mp4",
  "thumbnail_url": "https://example.com/videos/thumbnail.jpg"
}

状态4:失败(failed)

{
  "id": "video_abc123def456ghi789",
  "object": "video",
  "created_at": 1234567890,
  "status": "failed",
  "model": "sora-2",
  "prompt": "A serene lake at sunset with mountains in the background",
  "progress": 0,
  "error": {
    "code": "generation_failed",
    "message": "Video generation failed due to content policy violation"
  }
}

2.3 视频Remix接口

POST
/v1/videos/{video_id}/remix

📝 接口说明

基于已有视频进行二次创作,可以改变视频的风格、场景或内容,同时保持原视频的基本结构和动作。

💡 提示:Remix功能适合对已生成的视频进行风格转换、场景替换等创意改编。

📋 请求参数

参数名 类型 必需 说明
video_id string 原视频ID(路径参数)
prompt string Remix提示词,描述如何改编视频

💻 请求示例

cURL:

curl -X POST "https://api.example.com/v1/videos/video_abc123def456ghi789/remix" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Transform the scene into a cyberpunk style with neon lights"
  }'

Python:

import requests

video_id = "video_abc123def456ghi789"
url = f"https://api.example.com/v1/videos/{video_id}/remix"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "prompt": "Transform the scene into a cyberpunk style with neon lights"
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(f"Remix Video ID: {result['id']}")
print(f"Original Video ID: {result['remix_source_id']}")

JavaScript:

const videoId = 'video_abc123def456ghi789';

const response = await fetch(`https://api.example.com/v1/videos/${videoId}/remix`, {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    prompt: 'Transform the scene into a cyberpunk style with neon lights'
  })
});

const result = await response.json();
console.log('Remix Video ID:', result.id);
console.log('Original Video ID:', result.remix_source_id);

✅ 响应示例

{
  "id": "video_xyz789abc456def123",
  "object": "video",
  "created_at": 1234567890,
  "status": "queued",
  "model": "sora-2",
  "prompt": "Transform the scene into a cyberpunk style with neon lights",
  "remix_source_id": "video_abc123def456ghi789",
  "progress": 0,
  "seconds": "15",
  "size": "1280x720"
}

📝 完整示例代码

Python 示例

import requests
import os

# 配置
API_KEY = os.getenv("API_KEY")
BASE_URL = "https://api.example.com"

# 图片生成示例
def generate_image(prompt):
    url = f"{BASE_URL}/v1/images/generations"
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "dall-e-3",
        "prompt": prompt,
        "n": 1,
        "size": "1024x1024"
    }
    
    response = requests.post(url, headers=headers, json=data)
    return response.json()

# 视频生成示例
def generate_video(prompt):
    url = f"{BASE_URL}/v1/videos"
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "sora-1.0-turbo",
        "prompt": prompt,
        "size": "1280x720"
    }
    
    response = requests.post(url, headers=headers, json=data)
    return response.json()

# 使用示例
if __name__ == "__main__":
    # 生成图片
    image_result = generate_image("一只可爱的猫咪")
    print("图片生成结果:", image_result)
    
    # 生成视频
    video_result = generate_video("海浪拍打沙滩")
    print("视频生成结果:", video_result)

JavaScript 示例

// 配置
const API_KEY = process.env.API_KEY;
const BASE_URL = "https://api.example.com";

// 图片生成函数
async function generateImage(prompt) {
    const response = await fetch(`${BASE_URL}/v1/images/generations`, {
        method: 'POST',
        headers: {
            'Authorization': `Bearer ${API_KEY}`,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            model: 'dall-e-3',
            prompt: prompt,
            n: 1,
            size: '1024x1024'
        })
    });
    
    return await response.json();
}

// 视频生成函数
async function generateVideo(prompt) {
    const response = await fetch(`${BASE_URL}/v1/videos`, {
        method: 'POST',
        headers: {
            'Authorization': `Bearer ${API_KEY}`,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            model: 'sora-1.0-turbo',
            prompt: prompt,
            size: '1280x720'
        })
    });
    
    return await response.json();
}

// 使用示例
(async () => {
    // 生成图片
    const imageResult = await generateImage('一只可爱的猫咪');
    console.log('图片生成结果:', imageResult);
    
    // 生成视频
    const videoResult = await generateVideo('海浪拍打沙滩');
    console.log('视频生成结果:', videoResult);
})();
已复制到剪贴板