API 参考

文件上传策略

GET/v1/media/upload-policy
POST/v1/media/upload-policy

将图片、视频、音频和通用文件上传到文件存储,再把返回的公网地址传给模型接口。网关只签发绑定用户的短期上传凭证,文件内容不会经过 API 服务。

GET /v1/media/upload-policy
{
  "image_max_bytes": 52428800,
  "video_max_bytes": 209715200,
  "audio_max_bytes": 104857600,
  "file_max_bytes": 52428800
}

#创建上传凭证

  • kindstring必填

    "image"、"video"、"audio" 或 "file"。

  • content_typestring必填

    与 kind 匹配的具体 MIME 类型。file 接受非图片、视频、音频类型,例如 application/pdf 或 text/plain。

  • sizeinteger必填

    文件的精确字节数。使用同一个 API Key GET 此接口,可读取该用户生效的四类上传上限。

curl https://www.aisplice.store/v1/media/upload-policy \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "image",
    "content_type": "image/avif",
    "size": 1048576
  }'
policy.json
{
  "upload_url": "https://uploads.example.com/",
  "public_url": "https://media.example.com/media/user-upload/image/...",
  "fields": {
    "key": "media/user-upload/image/...",
    "policy": "...",
    "...": "Pass every returned field unchanged"
  },
  "expires_at": "2026-07-25T10:05:00Z"
}

#上传到文件存储

把返回的所有 fields 字段和文件通过一次 multipart POST 提交到 upload_url。凭证五分钟后过期,只能写入一个生成的文件路径,并且不能覆盖已有文件。

# Save the policy response as policy.json first.
upload_args=()
while IFS=$'\t' read -r key value; do
  upload_args+=(-F "$key=$value")
done < <(jq -r '.fields | to_entries[] | [.key, .value] | @tsv' policy.json)

# Keep the file field last for storage compatibility.
curl "$(jq -r .upload_url policy.json)" \
  "${upload_args[@]}" \
  -F "file=@reference.avif"

#使用公网地址

文件存储返回成功后,把 public_url 填入所选模型支持的媒体字段。上传接口接受某种格式,并不代表每个模型都能解码该格式;请以模型请求契约为准。

image-task.json
{
  "model": "gpt-image-2",
  "prompt": "Turn this reference into a watercolor",
  "images": ["https://media.example.com/media/user-upload/image/..."]
}

#相关错误码

该端点通过 error.type 而不是 error.code 表示失败原因,请结合状态码按下列取值判断。

  • 400 invalid_request_errorkind、content_type 和 size 必须共同描述一个上传文件。
  • 401 unauthorizedbearer token 无效或缺失。
  • 413 payload_too_large声明的文件大小超过后台配置的上传上限。
  • 415 unsupported_media_typecontent_type 与所选图片、视频、音频或通用文件分类不匹配。

完整错误码表 →

还是没解决?

把请求 ID 或报错信息发给我们,我们来查。