使用 REST API 创建图片和视频任务、查询模型能力并读取生成结果。公开接口版本固定为 v1。
快速开始
所有 /openapi/v1/* 接口使用 API Key 鉴权。请在请求头中发送 Bearer Token,不要从浏览器前端直接调用。
- Base URL
https://open-api.flux-art.ai- Authorization
Bearer fa_live_...
幂等要求:图片和视频生成必须携带 8–128 位 Idempotency-Key,可使用字母、数字、点、下划线、冒号和连字符。超时或 5xx 重试时复用原键。
curl -X POST 'https://open-api.flux-art.ai/openapi/v1/images/generations' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: image-order-20260714-0001' \
-d '{
"model": "gemini-2.5-flash-image",
"mode": "generate",
"prompt": "一张柔和日光下的产品照片",
"count": 1
}'
import os
import uuid
import requests
response = requests.post(
"https://open-api.flux-art.ai/openapi/v1/images/generations",
headers={
"Authorization": f"Bearer {os.environ['FLUX_ART_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"model": "gemini-2.5-flash-image",
"mode": "generate",
"prompt": "一张柔和日光下的产品照片",
"count": 1,
},
timeout=30,
)
response.raise_for_status()
print(response.json())
import { randomUUID } from "node:crypto";
const response = await fetch(
"https://open-api.flux-art.ai/openapi/v1/images/generations",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.FLUX_ART_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": randomUUID(),
},
body: JSON.stringify({
model: "gemini-2.5-flash-image",
mode: "generate",
prompt: "一张柔和日光下的产品照片",
count: 1,
}),
},
);
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
创建成功:返回 201 Created 且 data.status 为 queued,表示任务已经成功创建并进入队列,不是错误。保存 data.id,随后按 Location 或任务查询接口轮询结果。
模型列表
模型和参数能力会持续变化。客户端应先读取模型列表,不要写死完整模型集合。
GET/openapi/v1/models
返回图片、视频模型以及每个模型支持的尺寸、比例、时长和分辨率等能力。
curl 'https://open-api.flux-art.ai/openapi/v1/models' \
-H 'Authorization: Bearer YOUR_API_KEY'
import os
import requests
response = requests.get(
"https://open-api.flux-art.ai/openapi/v1/models",
headers={
"Authorization": f"Bearer {os.environ['FLUX_ART_API_KEY']}",
},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch(
"https://open-api.flux-art.ai/openapi/v1/models",
{
headers: {
Authorization: `Bearer ${process.env.FLUX_ART_API_KEY}`,
},
},
);
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
图片生成
一次请求创建一个图片任务,公开接口固定 count=1。
POST/openapi/v1/images/generations
常用请求字段
model- 必填,图片模型 ID。
mode- 必填:文生图使用 generate;提交
image_urls 进行编辑或参考图生成时使用 edit。 prompt- 必填,至少 3 个非空白字符。
count- 固定为 1。
image_urls- 编辑或参考图模式必填,必须为模型可访问的公网 HTTPS URL。
aspect_ratio- 可选,图片宽高比。
size / resolution- 可选,设置图片尺寸或分辨率。支持模型:
size 用于 GPT Image 2、Nano Banana、Seedream、Qwen Image 2.0、Wan Image、Kling Image;resolution 用于 Grok Imagine、Grok Imagine Pro。
curl -X POST 'https://open-api.flux-art.ai/openapi/v1/images/generations' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: image-edit-20260714-0001' \
-d '{
"model": "gemini-2.5-flash-image",
"mode": "edit",
"prompt": "保留主体,替换为摄影棚背景",
"count": 1,
"image_urls": ["https://cdn.example.com/input.jpg"],
"aspect_ratio": "16:9"
}'
import os
import uuid
import requests
response = requests.post(
"https://open-api.flux-art.ai/openapi/v1/images/generations",
headers={
"Authorization": f"Bearer {os.environ['FLUX_ART_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"model": "gemini-2.5-flash-image",
"mode": "edit",
"prompt": "保留主体,替换为摄影棚背景",
"count": 1,
"image_urls": ["https://cdn.example.com/input.jpg"],
"aspect_ratio": "16:9",
},
timeout=30,
)
response.raise_for_status()
print(response.json())
import { randomUUID } from "node:crypto";
const response = await fetch(
"https://open-api.flux-art.ai/openapi/v1/images/generations",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.FLUX_ART_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": randomUUID(),
},
body: JSON.stringify({
model: "gemini-2.5-flash-image",
mode: "edit",
prompt: "保留主体,替换为摄影棚背景",
count: 1,
image_urls: ["https://cdn.example.com/input.jpg"],
aspect_ratio: "16:9",
}),
},
);
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
视频生成
支持文字生成视频、图片生成视频,以及部分模型的视频编辑能力。
POST/openapi/v1/videos/generations
常用请求字段
model- 必填,视频模型 ID。
video_mode- 必填,例如 t2v、i2v_first、multimodal_ref 或 v2v_edit;必须命中模型支持的模式。
prompt- 必填,至少 3 个非空白字符。
image_urls- 可选,首帧、尾帧或参考图。
source_video_url- 可选,视频编辑或扩展的源视频。
duration- 可选,必须命中模型支持的时长。
resolution- 可选,例如
720p。 ratio / aspect_ratio- 可选,设置视频画面比例。支持模型:
ratio 用于 Seedance、HappyHorse;aspect_ratio 用于 Grok Video、Kling Video、HappyHorse。
curl -X POST 'https://open-api.flux-art.ai/openapi/v1/videos/generations' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: video-order-20260714-0001' \
-d '{
"model": "doubao-seedance-2-0-260128",
"video_mode": "t2v",
"prompt": "城市夜景中的缓慢推进镜头",
"duration": 10,
"resolution": "720p",
"ratio": "16:9"
}'
import os
import uuid
import requests
response = requests.post(
"https://open-api.flux-art.ai/openapi/v1/videos/generations",
headers={
"Authorization": f"Bearer {os.environ['FLUX_ART_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"model": "doubao-seedance-2-0-260128",
"video_mode": "t2v",
"prompt": "城市夜景中的缓慢推进镜头",
"duration": 10,
"resolution": "720p",
"ratio": "16:9",
},
timeout=30,
)
response.raise_for_status()
print(response.json())
import { randomUUID } from "node:crypto";
const response = await fetch(
"https://open-api.flux-art.ai/openapi/v1/videos/generations",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.FLUX_ART_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": randomUUID(),
},
body: JSON.stringify({
model: "doubao-seedance-2-0-260128",
video_mode: "t2v",
prompt: "城市夜景中的缓慢推进镜头",
duration: 10,
resolution: "720p",
ratio: "16:9",
}),
},
);
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
任务查询
创建新任务返回 201 Created;幂等重放返回原任务和 200 OK。响应头包含 Location 与 Idempotent-Replayed。
queued排队中processing生成中succeeded已完成failed失败canceled已取消
GET/openapi/v1/tasks/{task_id}
查询当前账户的一个 OpenAPI 任务。成功后从 output 读取图片或视频地址。
curl 'https://open-api.flux-art.ai/openapi/v1/tasks/TASK_ID' \
-H 'Authorization: Bearer YOUR_API_KEY'
import os
import requests
task_id = "TASK_ID"
response = requests.get(
f"https://open-api.flux-art.ai/openapi/v1/tasks/{task_id}",
headers={
"Authorization": f"Bearer {os.environ['FLUX_ART_API_KEY']}",
},
timeout=30,
)
response.raise_for_status()
print(response.json())
const taskId = "TASK_ID";
const response = await fetch(
`https://open-api.flux-art.ai/openapi/v1/tasks/${taskId}`,
{
headers: {
Authorization: `Bearer ${process.env.FLUX_ART_API_KEY}`,
},
},
);
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
GET/openapi/v1/tasks
使用游标分页查询任务列表,任务读取接口的账户级限流为每分钟 120 次。
limit- 每页数量。
cursor- 上一页返回的分页游标。
typeimage 或 video。statusqueued、processing、succeeded、failed 或 canceled。
错误处理
所有公开接口错误统一包含 error.code、message 和 request_id。联系支持时提供 request id 和 task id,不要提供完整 API Key。
- 400
invalid_request / invalid_media_url修正参数或素材地址,不要原样重试。
- 401
invalid_api_key检查密钥是否缺失、已重新生成或已撤销。
- 402
insufficient_points / membership_required充值点数或升级所需会员。
- 404
task_not_found核对任务 ID 和所属账户。
- 409
idempotency_key_reused不同请求更换幂等键;处理中则稍后重试。
- 422
validation_error根据 details 修正请求字段。
- 429
rate_limit / concurrent_limit遵循 Retry-After 或等待已有任务完成。
- 5xx
internal_error / service_unavailable退避重试,并继续使用原幂等键。
模型价格
OpenAPI 与网页端共用当前 Flux Art 账户的算力余额、会员权益和活动折扣。任务创建成功后从同一账户扣除算力;余额不足时返回 402,且不会创建任务。
参考价格与实际扣费下表展示当前配置折扣后的参考消耗。最终扣费由后端在提交时按模型、参数和当期计费规则实时计算,以任务响应 usage.points_charged 为准;失败退款可通过 usage.points_refunded 核对。
图片模型
图片任务按张计费;尺寸和质量会影响部分模型的消耗。
GPT Image 2
gpt-image-2当前计费比例 50%算力消耗明细| 配置 | 算力消耗 |
|---|
| low · 1K | 原价:40;折扣价:20。4020算力 / 张 |
| low · 2K | 原价:80;折扣价:40。8040算力 / 张 |
| low · 4K | 原价:120;折扣价:60。12060算力 / 张 |
| medium · 1K | 原价:80;折扣价:40。8040算力 / 张 |
| medium · 2K | 原价:120;折扣价:60。12060算力 / 张 |
| medium · 4K | 原价:160;折扣价:80。16080算力 / 张 |
| high · 1K | 原价:180;折扣价:90。18090算力 / 张 |
| high · 2K | 原价:360;折扣价:180。360180算力 / 张 |
| high · 4K | 原价:600;折扣价:300。600300算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 原价:100;折扣价:50。10050算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 512 | 原价:80;折扣价:40。8040算力 / 张 |
| 1K | 原价:160;折扣价:80。16080算力 / 张 |
| 2K | 原价:200;折扣价:100。200100算力 / 张 |
| 4K | 原价:320;折扣价:160。320160算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 原价:70;折扣价:35。7035算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 1K | 原价:240;折扣价:120。240120算力 / 张 |
| 2K | 原价:320;折扣价:160。320160算力 / 张 |
| 4K | 原价:400;折扣价:200。400200算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 100算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 250算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 1K | 120算力 / 张 |
| 2K | 240算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 250算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 200算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 150算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 120算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 120算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 160算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 150算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 150算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 150算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 150算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 120算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 100算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 每张图片 | 100算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 1K | 90算力 / 张 |
| 2K | 90算力 / 张 |
| 1K | 90算力 / 张 |
| 2K | 90算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 1K | 90算力 / 张 |
| 2K | 90算力 / 张 |
| 4K | 170算力 / 张 |
| 1K | 90算力 / 张 |
| 2K | 90算力 / 张 |
| 4K | 170算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 1K | 90算力 / 张 |
| 2K | 90算力 / 张 |
| 1K | 90算力 / 张 |
| 2K | 90算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 1K | 50算力 / 张 |
| 2K | 50算力 / 张 |
| 1K | 90算力 / 张 |
| 2K | 90算力 / 张 |
| 1K | 170算力 / 张 |
| 2K | 170算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 1K | 50算力 / 张 |
| 2K | 50算力 / 张 |
| 1K | 90算力 / 张 |
| 2K | 90算力 / 张 |
| 1K | 170算力 / 张 |
| 2K | 170算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 1K | 50算力 / 张 |
| 1K | 90算力 / 张 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 1K | 20算力 / 张 |
| 1K | 20算力 / 张 |
视频模型
视频任务按生成秒数计费。下表严格按模型配置和正式计费函数,展示各模型默认 5 秒任务的实际算力消耗;分辨率、音频和视频输入方式会影响最终消耗。
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · 480p · 5 秒 | 500算力 / 次 |
| 基础生成 · 720p · 5 秒 | 750算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · 720P · 5 秒 | 1,450算力 / 次 |
| 基础生成 · 1080P · 5 秒 | 2,250算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · 720P · 5 秒 | 1,750算力 / 次 |
| 基础生成 · 1080P · 5 秒 | 2,500算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · 480p · 5 秒 | 700算力 / 次 |
| 基础生成 · 720p · 5 秒 | 1,500算力 / 次 |
| 基础生成 · 1080p · 5 秒 | 3,750算力 / 次 |
| 基础生成 · 4k · 5 秒 | 7,500算力 / 次 |
| 含单个视频输入 · 480p · 5 秒 | 800算力 / 次 |
| 含单个视频输入 · 720p · 5 秒 | 1,650算力 / 次 |
| 含单个视频输入 · 1080p · 5 秒 | 4,050算力 / 次 |
| 含单个视频输入 · 4k · 5 秒 | 8,100算力 / 次 |
| 含多个视频输入 · 480p · 5 秒 | 1,700算力 / 次 |
| 含多个视频输入 · 720p · 5 秒 | 3,600算力 / 次 |
| 含多个视频输入 · 1080p · 5 秒 | 9,000算力 / 次 |
| 含多个视频输入 · 4k · 5 秒 | 18,000算力 / 次 |
单次视频任务的总消耗向上取整至 50 算力。
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · 480p · 5 秒 | 550算力 / 次 |
| 基础生成 · 720p · 5 秒 | 1,100算力 / 次 |
| 含单个视频输入 · 480p · 5 秒 | 3,000算力 / 次 |
| 含单个视频输入 · 720p · 5 秒 | 6,000算力 / 次 |
| 含多个视频输入 · 480p · 5 秒 | 6,600算力 / 次 |
| 含多个视频输入 · 720p · 5 秒 | 13,200算力 / 次 |
单次视频任务的总消耗向上取整至 50 算力。
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · 480p · 5 秒 | 550算力 / 次 |
| 基础生成 · 720p · 5 秒 | 1,200算力 / 次 |
| 含单个视频输入 · 480p · 5 秒 | 600算力 / 次 |
| 含单个视频输入 · 720p · 5 秒 | 1,300算力 / 次 |
| 含多个视频输入 · 480p · 5 秒 | 1,350算力 / 次 |
| 含多个视频输入 · 720p · 5 秒 | 2,850算力 / 次 |
单次视频任务的总消耗向上取整至 50 算力。
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · 480p · 5 秒 | 150算力 / 次 |
| 基础生成 · 720p · 5 秒 | 300算力 / 次 |
| 基础生成 · 1080p · 5 秒 | 600算力 / 次 |
| 生成音频 · 480p · 5 秒 | 250算力 / 次 |
| 生成音频 · 720p · 5 秒 | 550算力 / 次 |
| 生成音频 · 1080p · 5 秒 | 1,200算力 / 次 |
单次视频任务的总消耗向上取整至 50 算力。
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · 480p · 5 秒 | 250算力 / 次 |
| 基础生成 · 720p · 5 秒 | 500算力 / 次 |
| 基础生成 · 1080p · 5 秒 | 1,100算力 / 次 |
单次视频任务的总消耗向上取整至 50 算力。
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · 480p · 5 秒 | 100算力 / 次 |
| 基础生成 · 720p · 5 秒 | 150算力 / 次 |
| 基础生成 · 1080p · 5 秒 | 350算力 / 次 |
单次视频任务的总消耗向上取整至 50 算力。
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 3 秒 | 750算力 / 次 |
| 基础生成 · undefined · 3 秒 | 1,020算力 / 次 |
| 基础生成 · undefined · 3 秒 | 3,750算力 / 次 |
| 生成音频 · undefined · 3 秒 | 1,020算力 / 次 |
| 生成音频 · undefined · 3 秒 | 1,260算力 / 次 |
| 生成音频 · undefined · 3 秒 | 3,750算力 / 次 |
| 含单个视频输入 · undefined · 3 秒 | 1,140算力 / 次 |
| 含单个视频输入 · undefined · 3 秒 | 1,500算力 / 次 |
| 含单个视频输入 · undefined · 3 秒 | 3,750算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 5 秒 | 1,250算力 / 次 |
| 基础生成 · undefined · 5 秒 | 1,700算力 / 次 |
| 含单个视频输入 · undefined · 5 秒 | 1,900算力 / 次 |
| 含单个视频输入 · undefined · 5 秒 | 2,500算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 3 秒 | 750算力 / 次 |
| 基础生成 · undefined · 3 秒 | 1,020算力 / 次 |
| 基础生成 · undefined · 3 秒 | 3,750算力 / 次 |
| 生成音频 · undefined · 3 秒 | 1,140算力 / 次 |
| 生成音频 · undefined · 3 秒 | 1,500算力 / 次 |
| 生成音频 · undefined · 3 秒 | 3,750算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 5 秒 | 650算力 / 次 |
| 基础生成 · undefined · 5 秒 | 1,050算力 / 次 |
| 生成音频 · undefined · 5 秒 | 2,100算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 5 秒 | 650算力 / 次 |
| 基础生成 · undefined · 5 秒 | 1,050算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 5 秒 | 4,200算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 5 秒 | 850算力 / 次 |
| 基础生成 · undefined · 5 秒 | 1,500算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 5 秒 | 4,200算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 5 秒 | 850算力 / 次 |
| 基础生成 · undefined · 5 秒 | 1,500算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 5 秒 | 850算力 / 次 |
| 基础生成 · undefined · 5 秒 | 1,500算力 / 次 |
算力消耗明细| 配置 | 算力消耗 |
|---|
| 基础生成 · undefined · 5 秒 | 450算力 / 次 |
| 基础生成 · undefined · 5 秒 | 1,500算力 / 次 |