Skip to main content
AIHubMix 原生图片协议使用 /ai/v1/images 系列端点。生成接口默认同步,传入布尔值 async: true 后在后台生成,并使用同一套任务状态、Webhook 和错误结构。
使用异步图片、任务查询或 Webhook 前,需要为当前账户开启异步任务功能。未开启时, 异步任务创建请求返回 403 async_not_enabled。

快速开始

下面使用 qwen-image-2.0 异步生成一张图片。
任务进入 completed 后,逐项读取 output[].content_url。该地址对应 GET /ai/v1/images/{id}/content/{result_id},客户端不需要自行拼接 result_id。

接口概览

Base URL:https://aihubmix.com 认证方式:

查询模型 Schema

模型目录可以筛选已经提供请求 Schema 的文生图模型:
取得 model_id 后,查询该模型实际支持的端点:
同一模型可能同时返回 AIHubMix 原生与兼容端点。应按 path 选择原生图片接口,再读取 对应的 request.schema:
不要依赖 endpoints 数组位置。完整响应字段和失败情况参阅 模型 Schema 接口。

创建图片

同步生成

省略 async 或设置为 false 时,请求等待生成完成后返回任务对象:
同步请求也会保存任务记录。创建响应丢失时,可以通过图片列表找回任务。

异步生成

async 必须是布尔值 true,不能写成字符串。异步请求立即返回任务对象,生成在后台继续。 webhook_url 和 webhook_events_filter 只能与 async: true 一起使用。

标准字段

标准字段集合不表示所有模型支持全部字段。字段、枚举和取值范围以该模型 /ai/v1/images/generations 端点的 request.schema 为准。

图片任务对象

同步生成完成后,或异步任务进入结束态后,接口返回以下结构:
output 项包含顺序 index、固定值 type: "file"、可选的 b64_json 和 content_url。多图请求会按 index 返回多个结果。

状态说明

客户端可以每 15 秒查询一次,直到状态变为 completed、failed 或 cancelled。 15 秒是客户端轮询建议,不是服务端协议限制。

查询图片任务

查询详情

图片详情接口会返回任务最新状态。异步图片轮询必须使用该接口,不要使用统一任务详情代替。

查询列表

创建响应丢失时,可以通过图片列表找回任务 ID:
列表返回查询时的任务快照,不会主动刷新活动任务状态。

统一任务接口

/ai/v1/tasks 提供图片、视频和 LLM 任务的统一只读视图。可以只查询图片任务:
统一任务列表支持 object、status、model、after、limit 和 order。统一任务详情:
统一任务中的图片结果会额外提供 result_id 和 content_type:
多结果统一任务通过 /ai/v1/tasks/{id}/content/{result_id} 下载。未指定结果 ID 时返回 400 result_id_required。
媒体详情接口可能在查询时更新活动任务状态,统一任务接口只返回当前快照。因此轮询使用 /ai/v1/images/{id};统一筛选和读取结果元数据时使用 /ai/v1/tasks。 任务及内容按创建任务时的 Bearer Token 隔离。

下载图片结果

任务进入 completed 后,优先直接使用媒体任务对象返回的结果字段:
  • output[].b64_json 非空:直接进行 Base64 解码。
  • output[].content_url 非空:携带创建任务时的 Bearer Token 请求该地址。
图片媒体下载路径是 /ai/v1/images/{id}/content/{result_id}。媒体任务对象不单独公开 result_id,客户端不需要自行解析或拼接,逐项使用 output[].content_url 即可。
结果可能过期,也可能存在下载次数限制。过期返回 410 artifact_expired;超过下载 次数限制返回 429 too_many_downloads。客户端应在任务完成后及时保存结果。

Webhook

Webhook 仅用于 async: true 的图片请求:
webhook_url 最长 512 字符,不能指向本机、私网或其他受限地址。省略事件过滤器时, 平台推送 completed、failed 和 cancelled;显式传入时,数组不能为空、不能重复, 并且必须与 webhook_url 一起使用。

回调请求

event_id 用于去重;data.error 在失败时可能出现;data.results 只在结果已存档时出现, 下载仍需 Bearer Token。

重试与去重

平台采用至少一次投递,同一事件可能重复送达:
  • HTTP 2xx 表示接收成功。
  • HTTP 5xx、网络错误或超时会触发重试。
  • HTTP 3xx 和 4xx 不会重试。
  • 最多投递 6 次,重试间隔依次为 1、4、16、64、256 秒。
接收端应保存 event_id,重复收到相同事件时直接返回 2xx。任务级 Webhook 本身不 携带独立签名密钥;需要签名验证时,请配置账户级 Webhook,并保留详情查询作为结果确认方式。

错误响应与错误码

本节适用于 /ai/v1/images/* 和图片任务。视频错误见 视频接口。
  • 当前请求失败:HTTP 非 2xx,表示本次创建、查询或下载请求失败,见 HTTP 请求失败。
  • 任务执行失败:查询返回 HTTP 200,但任务的 status=failed,原因记录在任务内的 error,见 任务执行失败。
  • 列表单条结果读取失败:列表返回 HTTP 200,但某条任务带有 output_error,见 列表单条结果读取失败。
下表 message 列列出英文返回文案,说明列解释含义及处理方式。参数校验错误列出通用文案,实际响应可能进一步指出具体字段和约束。客户端应使用 code 判断错误类型,不应依赖完整 message 匹配。

提交 HTTP 5xx 错误反馈

请求返回 HTTP 5xx 时,请提交反馈并附上 error.tid。

HTTP 请求失败

下表中的 HTTP 状态用于当前请求直接失败的情况。已创建任务的执行失败见下方“任务执行失败”表。

请求参数与媒体输入

大小限制
  • 媒体大小:图片任务超限返回 image_too_large,具体上限见错误信息或 error.details.max_bytes。
  • 整个请求大小:request_too_large 表示 HTTP 请求体超过 32 MiB,包括文本、参数和内联媒体编码。只传 URL 时,链接本身计入请求体,链接指向的文件仍需满足模型的媒体限制。
  • 实际大小:error.details.actual_bytes 仅在完整大小已确认时提供。通过 URL 读取媒体时,若达到读取上限后停止,可能不返回该字段。
支持格式 以所选模型为准。先查看 error.details.allowed_mime_types 或错误信息中的格式列表;未提供列表时,查阅该模型的 Schema。 文案中的占位符
  • {media_kind}:实际媒体类型。类型已确认时,invalid_media_data 和 media_url_unreachable 的文案也会使用 image 或 video。
  • {max_bytes}:字节上限。图片上限未知时,返回 The image is too large. Reduce the image size and try again.
  • {allowed_formats}:允许的格式列表。格式错误文案可能追加 Use one of: {allowed_formats}.

生成请求与返回结果

账户与权限

服务可用性与限流

provider_unavailable 表示已明确识别的模型推理厂商故障。仅凭普通 429 或 4xx 无法确认账户额度、内容审核或参数问题。

任务查询与结果下载

任务执行失败

任务创建成功后,生成失败通过 status=failed 和任务内的 error 表达。查询成功仍返回 HTTP 200。
媒体输入错误也可能出现在失败 Task 中,错误码含义与上方媒体输入表一致;此时查询成功的 HTTP 状态仍为 200。 媒体大小错误的 message 结尾使用 submit a new task.,提示缩小媒体后提交新任务。 output_blocked 表示明确拦截且未返回可用图片,本次不收取生成费用。output_policy_violation 按现有内容审核收费规则处理。历史费用请以计费记录为准。

列表单条结果读取失败

图片、视频任务列表中的个别行可能附带 output_error:
该字段表示本次无法读取该行的结果。列表仍返回 HTTP 200,该行 output=[],原 id、status、error 和分页保持不变,其他可正常读取的任务不受影响。即使 status=completed,也应检查 output_error,再判断结果是否可读取。 请提供 output_error.tid 联系支持;该字段未带 tid 时,可提供本次响应头中的请求 ID。此错误不改变任务状态或费用,也不触发 Webhook。 图片、视频列表保留已取得的 expires_at。统一 /ai/v1/tasks 列表的读取失败行可能返回 expires_at=null,结果仍受原保留期限制。 上述处理仅适用于单行结果无法读取且没有可用回退的情况。统一 tasks 接口整批查询失败仍返回 HTTP 错误,详情读取同类故障仍返回 HTTP 500。 相关文档:图片接口 · 视频接口 · 异步任务

完整示例

以下示例完成异步创建、轮询和多图片保存。

常见问题

图片任务应该查询 /ai/v1/tasks/{id} 还是图片详情接口? 轮询使用 /ai/v1/images/{id};统一筛选任务或读取 result_id、content_type 时使用 /ai/v1/tasks。 创建响应丢失后如何找回任务? 请求 GET /ai/v1/images?limit=20&order=desc,再用返回的任务 ID 查询图片详情。 Webhook 没收到怎么办? 确认回调地址可以公开访问并及时返回 2xx,然后使用图片详情接口确认最终状态。 更多跨媒体背景参阅 异步任务、 Webhook 说明 和 完整错误码。