GPT Image 2
根据文本和最多 16 张参考图生成或编辑图片,支持 1K、2K、4K 或精确像素尺寸。
- 异步:创建调用会立即返回任务 ID;任务成功后才能拿到图片。
- 每个任务生成一张图片。需要多张图片时,请创建多个任务。
- 文生图,或编辑、合成最多 16 张以公网 HTTPS 链接给出的参考图。
- 用
resolution和aspect_ratio选择画幅,或用一个精确的size,例如1536x1024。两者不能同时使用。 - 按尺寸档位(1K、2K 或 4K)对每张图片计价;失败的任务不收费。
在调试窗口里打开本模型,填入你的 BeatAPI API 密钥即可创建任务。调用是真实的,费用从你自己的余额中扣除。
模型 ID
这三个模型使用同一个接口和同一组字段。下方的取值直接来自网关契约。
接口与鉴权
POST https://api.beatapi.io/v1/images/tasks
Authorization
string
必需
你的 BeatAPI API 密钥,以 Bearer <BEATAPI_API_KEY> 形式发送。在控制台创建密钥。密钥只能保存在你的服务端,不要放进浏览器或移动端应用。
请求体使用 JSON,并设置 Content-Type: application/json。Idempotency-Key 为可选:每个逻辑请求发送一个唯一值(最长 255 个字符),仅在重试完全相同的请求体时复用。24 小时内,用相同的键和请求体重试会再次返回第一次的响应,并带上 Idempotent-Replayed: true;相同的键搭配不同的请求体则返回 409 idempotency_conflict。非 2xx 的响应不会被保存,因此 400 或 402 之后的重试会重新执行。
请求流程
等待任务完成
调用 GET /v1/tasks/{task_id},两次调用之间等待 data.poll_after_seconds 秒(图片 5 秒,视频 8 秒),直到 status 为 succeeded 或 failed。也可以为 task.succeeded 和 task.failed 注册 Webhook;仍需保留轮询作为兜底,因为因处理超时而终止的任务不会发送事件。
输入模式
请求参数
model
string
必需
要运行的模型。
取值:gpt-image-2
取值有误时
- 缺失:
"model" is required - 未知的模型 ID:
"model" gpt-image-9 is not catalogued - 把视频模型发到了这个接口:
"model" seedance-2.5 is served by POST /v1/videos/tasks, not this endpoint
prompt
string
必需
要画什么,或要修改参考图中的什么。用平实的语言效果最好:主体、风格、光线、构图,以及必须出现在图片中的文字。
长度:1–5000 个字符
- 长度按字符计算(一个中日韩文字算一个字符)。
- 传了
images时,请说明每张图的作用,例如 “Use the first image for the product and the second for the background”。
取值有误时
- 缺失:
"prompt" is required - 为空或超过长度上限:
"prompt" has an unsupported length - 不是字符串:
"prompt" must be a string
images
string[]
可选
要编辑或合成的参考图。传入该字段会把请求从文生图切换为图片编辑。
数量:1–16
每一项都必须是公网 https:// 链接。本地文件请先上传(POST /v1/files),再传入返回的 data.url。
- 每个链接必须通过公网 HTTPS 直接返回图片文件本身(PNG、JPEG 或 WebP),且不超过 50 MB。网关在创建任务之前会下载每个链接开头的若干字节,并根据这些字节识别类型,而不是根据文件名或
Content-Type。 - 指向网页、登录页、已过期的签名链接或有防盗链的主机的链接会被拒绝,因为它们返回的不是图片。
- 错误信息中的位置从 0 开始:
images[0]是第一个链接。
取值有误时
- 超过数量上限:
"images" accepts at most 16 items - 空数组:
"images" requires at least 1 item - 不是 https:// 链接:
"images[0]" must be a public HTTPS URL - 私有或不安全的地址:
"images[0]" must be a publicly reachable HTTPS image URL - 主机返回 4xx 错误:
"images[0]" could not be downloaded: the URL returned HTTP 404 - 链接返回的不是 PNG、JPEG 或 WebP:
"images[0]" is not a PNG, JPEG or WebP image: the URL returned text/html - 大于 50 MB:
"images[2]" is 63.4 MB; images must be 50 MB or smaller
示例
aspect_ratio
string
可选默认值: auto
图片的形状,以 宽:高 表示。与 resolution 一起传,或两者都不传而改传 size。
可选值:auto, 1:1, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 16:9, 9:16, 2:1, 1:2, 3:1, 1:3, 21:9, 9:21
默认值:auto
- 默认值是
auto,所以省略该字段的请求同样会生成正方形。 - 支持
2:1、1:2、3:1、1:3、21:9和9:21等全景比例。最宽或最高的画幅是 3:1。 - 不能与
size同时使用。
auto 不是“沿用参考图的形状”。无论是否传了 images,它都会在所选 resolution 下生成正方形画幅。要把编辑结果改成其他形状,请指定比例,或传 size。
取值有误时
- 取值不在列表中:
"aspect_ratio" must be one of: [auto 1:1 3:2 2:3 4:3 3:4 5:4 4:5 16:9 9:16 2:1 1:2 3:1 1:3 21:9 9:21] - 与
size一起传:"size" already fixes the output; do not send "aspect_ratio" with it
resolution
string
可选默认值: 1K
图片的尺寸档位。档位越高,图片越大、价格越高;具体像素尺寸取决于 aspect_ratio,由模型决定。
可选值:1K, 2K, 4K
默认值:1K
- K 必须大写:
2k会被拒绝。 - 本页不承诺某个档位对应的精确像素尺寸。如果需要精确画幅,请传
size。 - 不能与
size同时使用;size自带尺寸,并按其像素总数计价。
取值有误时
- 取值不在列表中:
"resolution" must be one of: [1K 2K 4K] - 与
size一起传:"size" already fixes the output; do not send "resolution" with it
size
string
可选
以像素表示的精确输出画幅,格式为 WIDTHxHEIGHT,例如 1536x1024。它会取代 resolution 和 aspect_ratio。
- 两条边都必须是 16 的倍数,且在 16 到 3840 px 之间。
- 像素总数必须在 655,360 到 8,294,400 之间,长边最多是短边的三倍。
- 分隔符可以是
x、X或×;两侧的空格会被忽略。 - 价格档位按像素总数确定:不超过 2,097,152 像素为 1K,不超过 5,898,240 为 2K,超过则为 4K。示例见下方的表格“
size如何计费”。 - 不要同时传
resolution或aspect_ratio,即使是默认值也不行。
size 按所传的值校验和计费,但本页不保证交付的图片恰好是这些像素。如果你的流程依赖精确尺寸,请读取已保存的文件。
取值有误时
- 不是字符串:
"size" must be a string - 不是 WIDTHxHEIGHT 形式(单独一个数字、
auto、逗号):"size" must be WIDTHxHEIGHT in pixels, for example 1536x1024 - 某条边不是 16 的倍数:
"size" width and height must be multiples of 16 - 某条边小于 16 或大于 3840:
"size" edges must be between 16 and 3840 pixels - 像素太少或太多:
"size" must have between 655,360 and 8,294,400 pixels; 512x512 has 262,144 - 宽或高超过 3:1:
"size" must not be wider or taller than 3:1 - 与
resolution一起传:"size" already fixes the output; do not send "resolution" with it - 与
aspect_ratio一起传:"size" already fixes the output; do not send "aspect_ratio" with it
示例
background
string
可选默认值: auto
图片是有填充背景,还是透明背景。
可选值:auto, opaque, transparent
默认值:auto
auto(默认值)由模型自行选择。opaque要求填充背景。transparent要求背景无颜色的图片。结果是带 alpha 通道的 PNG;请查看output.media[].mime_type。- 该字段不改变价格。
取值有误时
- 取值不在列表中:
"background" must be one of: [auto opaque transparent]
网关还会在创建任务之前检查以下组合:
size写为宽x高,替代resolution和aspect_ratio:两边均为 16 的倍数,各为 16–3840 像素;总像素为 655,360–8,294,400;最长边与最短边之比不超过 3:1。- 自定义尺寸按总像素计费:不超过 2,097,152 像素按 1K,不超过 5,898,240 像素按 2K,再高按 4K。
输入素材限制
网关会在创建任务之前读取每一项输入,超出这些限制的输入会被拒绝,并返回点名该输入的 400 bad_request。不扣费。
- 参考图:PNG、JPEG 或 WebP,按文件内容识别;每张不超过 50 MB(十进制 MB;仅在主机声明大小时检查);1 到 16 个链接。GIF、HEIC 和 SVG 会被拒绝。
- 不检查参考图本身的像素或宽高比限制。
- 如果主机未在时限内响应,创建任务时不会拒绝该链接。网关会在任务派发时再次获取;若仍无法获取,任务失败并退款。
- 有本地文件?先用
POST /v1/files上传,再传入返回的data.url。
选择画幅:resolution 和 aspect_ratio,或 size
指定图片大小和宽高有两种方式,二者互斥:
- 档位加比例。 传
resolution(1K、2K或4K),需要指定形状时再传aspect_ratio。两者都不传,则得到1K和auto,即正方形画幅。 - 精确尺寸。 只传
size,例如1536x1024。按其像素总数计费(见下表)。
把 size 与 resolution 或 aspect_ratio 一起传会被拒绝,错误为 "size" already fixes the output; do not send "resolution" with it(或 "aspect_ratio")。即使另一个字段取的是默认值,也会触发该检查。
该模型不接受的字段
图片接口认识一些其他图片模型或其他 API 使用的字段。在这里传入其中任何一个都会被拒绝,而不是被忽略,这样你不会为一个没有效果的设置付费:
quality、seed、output_format、enhance_prompt→field "quality" is not supported by model gpt-image-2(其中是你所传的字段和你调用的模型)。这些模型不能选择结果格式:请读取输出中的mime_type。- 其他任何未知字段,例如
n或moderation→unknown field: n。没有n这个字段:一个任务只生成一张图片。
size 如何计费
size 按其像素总数所在的档位计价。下面的示例严格遵循该规则:不超过 2,097,152 像素为 1K,不超过 5,898,240 为 2K,超过则为 4K。
请求示例
文生图
根据提示词生成一张 2K 横版图片,指定了档位和比例。
编辑一张图片
更换背景并保留商品。这里明确指定了形状,因为 auto 会生成正方形。
合成多张图片
在提示词中按位置指明每张参考图。
精确尺寸
1536x1024 的画幅。size 单独使用:不传 resolution,也不传 aspect_ratio。按 1K 计费。
透明背景
没有背景的贴纸风格主体。结果是带 alpha 通道的 PNG。
响应
创建任务(201)
任务对象。任务成功之前 output 为 null。标注“运行中”的字段会在任务结束后消失。
任务完成
GET /v1/tasks/{task_id} 返回 HTTP 200 和 status: "succeeded",结果在 data.output 中。
输出字段
任务失败
失败的任务在 GET /v1/tasks/{task_id} 上仍然是 HTTP 200:失败信息在响应体里。预扣金额会全额退回,因此不会扣费。
完整示例
创建任务,按服务端给出的轮询提示等待,然后打印结果链接。请在环境变量中设置 BEATAPI_API_KEY 并安装 requests。
计费
- 每个任务一张图片,按尺寸档位计价:你传的
resolution,或你的size所在的档位(见上表)。background不改变价格。 - 价格在创建任务时预扣,从你的余额中扣除;若密钥设有额度,也从密钥额度中扣除。在任务生成之前被拒绝的请求不收费。
- 成功的任务保留预扣金额。失败的任务全额退回。
当前牌价,与价格页一致。享有协商折扣的账户实付更低;任务的 data.usage 始终显示实际扣费金额。
常见错误
HTTP 错误速查
任务生成之前的错误会以非 2xx 响应返回,不扣费。请根据 error.code 或 error.retryable 判断处理方式;message 会指出问题所在。完整列表和重试策略见错误码。
身份验证
Send your API key as Authorization: Bearer <BEATAPI_API_KEY>.
请求头
请求体使用 JSON,并设置 Content-Type: application/json。Idempotency-Key 为可选:每个逻辑请求发送一个唯一值(最长 255 个字符),仅在重试完全相同的请求体时复用。24 小时内,用相同的键和请求体重试会再次返回第一次的响应,并带上 Idempotent-Replayed: true;相同的键搭配不同的请求体则返回 409 idempotency_conflict。非 2xx 的响应不会被保存,因此 400 或 402 之后的重试会重新执行。
请求
要运行的模型。
取值:gpt-image-2
取值有误时
- 缺失:
"model" is required - 未知的模型 ID:
"model" gpt-image-9 is not catalogued - 把视频模型发到了这个接口:
"model" seedance-2.5 is served by POST /v1/videos/tasks, not this endpoint
要画什么,或要修改参考图中的什么。用平实的语言效果最好:主体、风格、光线、构图,以及必须出现在图片中的文字。
长度:1–5000 个字符
- 长度按字符计算(一个中日韩文字算一个字符)。
- 传了
images时,请说明每张图的作用,例如 “Use the first image for the product and the second for the background”。
取值有误时
- 缺失:
"prompt" is required - 为空或超过长度上限:
"prompt" has an unsupported length - 不是字符串:
"prompt" must be a string
图片的形状,以 宽:高 表示。与 resolution 一起传,或两者都不传而改传 size。
可选值:auto, 1:1, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 16:9, 9:16, 2:1, 1:2, 3:1, 1:3, 21:9, 9:21
默认值:auto
- 默认值是
auto,所以省略该字段的请求同样会生成正方形。 - 支持
2:1、1:2、3:1、1:3、21:9和9:21等全景比例。最宽或最高的画幅是 3:1。 - 不能与
size同时使用。
说明:auto 不是“沿用参考图的形状”。无论是否传了 images,它都会在所选 resolution 下生成正方形画幅。要把编辑结果改成其他形状,请指定比例,或传 size。
取值有误时
- 取值不在列表中:
"aspect_ratio" must be one of: [auto 1:1 3:2 2:3 4:3 3:4 5:4 4:5 16:9 9:16 2:1 1:2 3:1 1:3 21:9 9:21] - 与
size一起传:"size" already fixes the output; do not send "aspect_ratio" with it
图片是有填充背景,还是透明背景。
可选值:auto, opaque, transparent
默认值:auto
auto(默认值)由模型自行选择。opaque要求填充背景。transparent要求背景无颜色的图片。结果是带 alpha 通道的 PNG;请查看output.media[].mime_type。- 该字段不改变价格。
取值有误时
- 取值不在列表中:
"background" must be one of: [auto opaque transparent]
要编辑或合成的参考图。传入该字段会把请求从文生图切换为图片编辑。
数量:1–16
每一项都必须是公网 https:// 链接。本地文件请先上传(POST /v1/files),再传入返回的 data.url。
- 每个链接必须通过公网 HTTPS 直接返回图片文件本身(PNG、JPEG 或 WebP),且不超过 50 MB。网关在创建任务之前会下载每个链接开头的若干字节,并根据这些字节识别类型,而不是根据文件名或
Content-Type。 - 指向网页、登录页、已过期的签名链接或有防盗链的主机的链接会被拒绝,因为它们返回的不是图片。
- 错误信息中的位置从 0 开始:
images[0]是第一个链接。
取值有误时
- 超过数量上限:
"images" accepts at most 16 items - 空数组:
"images" requires at least 1 item - 不是 https:// 链接:
"images[0]" must be a public HTTPS URL - 私有或不安全的地址:
"images[0]" must be a publicly reachable HTTPS image URL - 主机返回 4xx 错误:
"images[0]" could not be downloaded: the URL returned HTTP 404 - 链接返回的不是 PNG、JPEG 或 WebP:
"images[0]" is not a PNG, JPEG or WebP image: the URL returned text/html - 大于 50 MB:
"images[2]" is 63.4 MB; images must be 50 MB or smaller
示例
"images": [
"https://media.beatapi.io/samples/smart-bottle.png",
"https://media.beatapi.io/samples/neon-singer.png"
]
图片的尺寸档位。档位越高,图片越大、价格越高;具体像素尺寸取决于 aspect_ratio,由模型决定。
可选值:1K, 2K, 4K
默认值:1K
- K 必须大写:
2k会被拒绝。 - 本页不承诺某个档位对应的精确像素尺寸。如果需要精确画幅,请传
size。 - 不能与
size同时使用;size自带尺寸,并按其像素总数计价。
取值有误时
- 取值不在列表中:
"resolution" must be one of: [1K 2K 4K] - 与
size一起传:"size" already fixes the output; do not send "resolution" with it
以像素表示的精确输出画幅,格式为 WIDTHxHEIGHT,例如 1536x1024。它会取代 resolution 和 aspect_ratio。
- 两条边都必须是 16 的倍数,且在 16 到 3840 px 之间。
- 像素总数必须在 655,360 到 8,294,400 之间,长边最多是短边的三倍。
- 分隔符可以是
x、X或×;两侧的空格会被忽略。 - 价格档位按像素总数确定:不超过 2,097,152 像素为 1K,不超过 5,898,240 为 2K,超过则为 4K。示例见下方的表格“
size如何计费”。 - 不要同时传
resolution或aspect_ratio,即使是默认值也不行。
说明:size 按所传的值校验和计费,但本页不保证交付的图片恰好是这些像素。如果你的流程依赖精确尺寸,请读取已保存的文件。
取值有误时
- 不是字符串:
"size" must be a string - 不是 WIDTHxHEIGHT 形式(单独一个数字、
auto、逗号):"size" must be WIDTHxHEIGHT in pixels, for example 1536x1024 - 某条边不是 16 的倍数:
"size" width and height must be multiples of 16 - 某条边小于 16 或大于 3840:
"size" edges must be between 16 and 3840 pixels - 像素太少或太多:
"size" must have between 655,360 and 8,294,400 pixels; 512x512 has 262,144 - 宽或高超过 3:1:
"size" must not be wider or taller than 3:1 - 与
resolution一起传:"size" already fixes the output; do not send "resolution" with it - 与
aspect_ratio一起传:"size" already fixes the output; do not send "aspect_ratio" with it
示例
"size": "1536x1024"
响应
任务对象。任务成功之前 output 为 null。标注“运行中”的字段会在任务结束后消失。

