本文验证日期为 2026-08-17,对应接口为 POST https://api.sublyx.org/v1/images/edits/async,以及提交后使用的 GET https://api.sublyx.org/v1/images/tasks/:task_id。排错时先保存 HTTP 状态、响应 JSON 中的错误摘要和请求时间,不要只看客户端抛出的“请求失败”。
400 多半是请求格式或参数问题,401 是鉴权问题,429 是限流问题。只有在确认请求没有创建任务后才重试提交;如果已经拿到 task_id,应该轮询任务而不是再次创建。
先确认请求基线
图片编辑接口接收 multipart 表单,而不是 JSON。最小请求如下:model 和 prompt 是文本字段,image 使用 @ 上传实际文件。不要手动设置 multipart boundary,也不要把图片路径当作字符串传给服务端。
curl https://api.sublyx.org/v1/images/edits/async \
-H "Authorization: Bearer $SUBLYX_API_KEY" \
-F "model=grok-imagine-edit" \
-F "prompt=Make the sky warmer while keeping the building unchanged" \
-F "image=@building.jpg"
400:请求不符合接口要求
先检查三项:model 是否为 grok-imagine-edit,prompt 是否非空,image 是否确实上传。常见原因包括误用 -d 发送 JSON、漏掉 image、把 image=@file 写成 image=file、文件路径错误,以及上传的文件类型或大小不符合要求。
400 也可能来自业务字段或图片内容校验。保留服务端返回的错误字段,逐项缩小变量:先用一张能正常打开的 PNG/JPG/WEBP 和最短 prompt 验证,再逐步加入复杂要求。参数的完整传法可参考 Grok 图片编辑参数详解。
401:API Key 没有通过鉴权
确认请求头是 Authorization: Bearer $SUBLYX_API_KEY,环境变量没有为空、带多余引号或被换行截断,并且请求发往 api.sublyx.org。不要把控制台登录密码、其他服务的 Key 或带有错误前缀的 Token 当作 Sublyx API Key。
Key 必须保存在服务端环境变量或密钥管理系统中。不要把它硬编码到前端、提交到 Git 仓库、写入 URL 查询参数或打印到日志。可先查看 Sublyx 接入文档,确认当前账户的鉴权配置和权限。
429:请求过于频繁
429 表示当前请求受到限流,不能通过无限快速重试解决。对提交接口使用指数退避加抖动,例如等待 2、4、8 秒,并设置最大重试次数;若响应提供 Retry-After,优先遵循它。并发队列应设置上限,轮询请求也要有固定间隔,避免每 100 毫秒查询一次。
const delay = Math.min(30000, 2000 * 2 ** attempt) + Math.random() * 500;
await new Promise((resolve) => setTimeout(resolve, delay));
429 后不要盲目重新提交同一个编辑任务。提交请求可能已经在服务端排队,只是响应在网络中丢失。先检查是否已有 task_id,并查询:
curl "https://api.sublyx.org/v1/images/tasks/$TASK_ID" \
-H "Authorization: Bearer $SUBLYX_API_KEY"
任务查询也要分类处理
拿到任务 ID 后轮询 GET /v1/images/tasks/:task_id。completed 时读取结果,failed 或 cancelled 时停止;短暂的网络错误可以按退避策略重试查询,但不要因此重新创建任务。为每个任务设置总超时,并保留任务 ID 以便人工核对。
重复提交与幂等风险
客户端超时只说明客户端没有及时收到响应,不证明服务端没有创建任务。把业务请求 ID、输入图片指纹和提交时间保存下来;同一业务请求在超时后先查本地记录和已有任务,再决定是否重新提交。这样可以避免用户连续点击、网关重试和 worker 重启共同制造重复编辑。
接口范围和验证边界
本文只把上述图片编辑异步提交和图片任务查询作为已验证范围。不要根据网上零散示例把视频 URL、视频返回字段或视频轮询方式当成稳定公共 API;如需其他媒体能力,应以 模型列表和当前文档为准。错误码的具体文案、可用模型和账户策略也可能变化。
Sublyx Field Notes