开发者文档
API 接入文档
本平台提供以 API Key 鉴权的 HTTP 接口,可调用对话、图片、视频与音频能力。 生成类接口统一采用「创建任务 → 轮询任务」的异步协议;对话接口同步返回或流式返回。
1. 接入前准备
1)登录站点,在控制台「API 密钥」页创建一把密钥。密钥形如 sk-live-...,明文只在创建时显示一次,请立即保存到安全位置;平台只保存其哈希,丢失后只能删除重建。
2)OpenAI 协议的 Base URL 为 https://cresily.cn/v1; Anthropic SDK 的 Base URL 使用 https://cresily.cn,由 SDK 自动追加 /v1/messages。
3)每次请求携带鉴权头,二选一:
Authorization: Bearer sk-live-xxxxxxxx # 或 x-api-key: sk-live-xxxxxxxx
POST 请求还需 Content-Type: application/json; charset=utf-8。密钥是账号级凭证:不要写进前端页面、公开仓库或日志;泄露后请到控制台立即删除。
Agent 工具接入
| 客户端 / 协议 | 接入方式 | Base URL |
|---|---|---|
| Codex | wire_api = responses,HTTP SSE | https://cresily.cn/v1 |
| DSH / WorkBuddy / OpenAI SDK | openai-completions 或 openai-responses | https://cresily.cn/v1 |
| DSH / Anthropic SDK | anthropic-messages | https://cresily.cn |
先从 /v1/models?kind=chat 选择模型。Agent 执行工具需要所选模型的 chat_limits.supportsTools 为 true,输入与输出预算也应按该模型配置。DSH 请添加「自定义模型 API」,选择对应协议,模型输入类型先选「文本」。
控制台「API 密钥 → 接入配置」可选择并复制 OpenAI 兼容、Codex、Anthropic SDK 或 Continue 配置。配置仅包含密钥占位符;完整密钥需使用创建时保存的值。
| 其他软件 | 配置方式 | 验收范围 |
|---|---|---|
| Cline | 选择 OpenAI Compatible,填写平台 Base URL、密钥与模型 ID;上下文和工具能力按所选模型设置。 | 按其官方配置方式接入,尚未驱动桌面应用验收。 |
| Continue | provider: openai,apiBase 填平台地址;可设置 useResponsesApi: false 使用 Chat Completions。 | 提供可复制配置;文本与工具协议已通过原生 SDK 验收。 |
| Open WebUI | 在 Connections 中添加 OpenAI 兼容连接,填写平台地址和密钥;模型列表可自动获取,也可手动填模型 ID。 | 模型列表与聊天协议已通过原生 SDK 验收;产品界面另行验收。 |
| 其他支持自定义接口的软件 | 按软件提供的协议选择相应地址,使用同一平台密钥和模型 ID。 | 第三方软件的版本、模式和功能限制仍以该产品为准。 |
Codex 的配置示例:将模型 ID 替换为目录中的值,并在运行环境中设置 PLATFORM_API_KEY 为平台密钥。
model = "目录中的模型ID" model_provider = "platform" web_search = "disabled" [model_providers.platform] name = "平台 API" base_url = "https://cresily.cn/v1" env_key = "PLATFORM_API_KEY" wire_api = "responses" supports_websockets = false requires_openai_auth = false [model_providers.platform.capabilities] remote_compaction = "unsupported"
Responses 接口为 POST /v1/responses:支持 instructions、完整 input 历史、函数工具、命名空间、additional_tools 与自定义文本工具。流式返回 response.created、文本与工具参数分片,以及 response.completed;达到输出上限返回 response.incomplete,失败返回 response.failed。
Messages 接口为 POST /v1/messages:支持 system、文本内容块、tool_use、tool_result、max_tokens 与 HTTP SSE。接受 x-api-key、anthropic-version;错误使用 Messages 格式返回。两种接口均使用平台模型 ID 和平台密钥。
store=false。目前不支持服务端会话存储、previous_response_id、WebSocket、服务端压缩、托管搜索/代码执行、图片/文件输入及加密推理历史。客户端本地 Shell、MCP 等可通过函数工具执行。自定义工具的格式要求会转换成工具说明与字符串参数,不承诺模型原生 CFG 约束。模型对推理强度和输出格式的支持仍以实际能力为准。2. 端点总览
| 方法 | 路径 | 协议 | 说明 |
|---|---|---|---|
| POST | /v1/responses | JSON / SSE | Responses 协议,供 Codex 与选择该协议的 Agent 调用。 |
| POST | /v1/messages | JSON / SSE | Messages 协议,支持文本与客户端工具。 |
| GET | /v1/models | JSON | 可用模型列表。支持 ?kind=chat|image|video|audio 过滤;?expand=parameters 附带每个模型的参数 schema(推荐作为字段取值来源)。 列表里的 id 和展示名称 name 都可以直接作为请求体的 model。 |
| GET | /v1/models/{id} | JSON | 单个模型详情,包含参数 schema;路径参数也接受展示名称。 |
| POST | /v1/chat/completions | JSON / SSE | 对话补全,OpenAI 兼容子集;stream: true 时以 SSE 返回。 |
| POST | /v1/images/generations | 202 + task | 图片生成(异步任务)。 |
| POST | /v1/videos/generations | 202 + task | 视频生成(异步任务)。 |
| POST | /v1/audio/generations | 202 + task | 音频生成(异步任务)。 |
| GET | /v1/tasks/{id} | JSON | 查询任务状态与结果(完成后 3 天内可查询,见第 4 节「产物保留与过期」)。 |
| POST | /v1/tasks/{id}/cancel | JSON | 取消任务(语义见第 7 节)。 |
| GET | /v1/media/{id} | 二进制 | 下载生成结果。结果 URL 已自带签名,直接 GET 即可,不需要再带鉴权头。 |
| GET | /v1/me | JSON | 查询当前 Key 的信息、今日用量与账户余额。 |
所有端点支持跨域调用(OPTIONS 返回 204),以 API Key 鉴权、不依赖 Cookie。 模型可用范围、参数取值、是否支持某个可选字段,全部以 /v1/models?expand=parameters 下发的参数说明为准。
请求体只接受 JSON,大小上限:对话 ≤ 8 MiB,图片 / 视频 ≤ 2MB,音频 ≤ 1MB,超出返回 413 request_too_large; 不接受文件上传与 base64 图片(参考素材请先放到公网 HTTPS 地址再传 URL)。
3. 模型与参数
调用任何接口前,先用模型列表确认可用的模型与它支持的参数。列表只包含 平台已开放的模型(未开放的不会出现),并且已经按 Key 的模型白名单过滤:Key 限定了模型时,列表里只会有这些模型, 调用白名单之外的模型返回 403 model_not_allowed。
3.1 模型列表
| 方法 / 路径 | 参数 | 说明 |
|---|---|---|
GET /v1/models | kind | 只看某一类:chat / image / video / audio;非法值返回 400 invalid_parameter。 |
GET /v1/models | expand=parameters | 同时返回每个模型的参数说明(含类型、取值范围、默认值、必填项),推荐接入时用它构造请求。 |
GET /v1/models | include_deprecated | 兼容参数;已下架/停用的模型不会出现在列表里,因此该项当前不影响返回。 |
GET /v1/models/{id} | kind(可选) | 单个模型详情,始终包含参数说明;路径里的 {id} 也接受展示名称。 跨分类同名时用 ?kind= 消歧。 |
列表响应形如 { "object": "list", "schema_version": "...", "data": [ ... ] }; 详情响应就是单个模型对象。未开放或不存在 → 404 model_not_found。
3.2 模型对象字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 模型 ID,可直接作为请求体的 model。 |
owned_by | string | 兼容 OpenAI 客户端字段,恒为 platform(所有模型都归本平台)。 |
created | integer | 兼容 OpenAI 客户端字段:平台侧该模型当前配置的时间(Unix 秒), 供按时间排序/缓存的客户端使用;个别新模型可能没有该字段。 |
name | string | 展示名称(与控制台模型列表显示一致),同样可以直接作为 model,两者等价。 |
kind | string | chat / image / video / audio, 决定该模型用哪个端点调用。 |
capability_version | integer | 模型能力版本号:平台调整该模型的参数/档位时会变化,客户端可据此让自己的参数缓存失效。 |
pricing | object | currency(固定 credits)、unit(计价单位,如 per_image / per_second / per_1m_tokens)、from(最低价,积分)。 |
deprecated | boolean | 已下架模型不会出现在列表里;当前返回的模型该值均为 false。 |
parameters | object | 参数说明(仅 expand=parameters 或单模型详情返回),见 3.4。 |
constraints / defaults | array / object | 组合约束与各参数默认值;可能缺失。action=reject 表示冲突会被拒绝,then 是可主动选择的替代组合,不会自动改写请求。 |
mode_parameters | object | 视频模型按 mode 提供的参数说明,包含当前模式可用的素材字段与必填限制。控制台模型抽屉的 API 示例随模型与模式变化。 |
3.3 用展示名称调用
name 与 id 都可以写进请求体的 model,平台会解析到同一个模型 (大小写不敏感;前后空格会被忽略)。如果两个模型的展示名称相同,请求会返回 400 invalid_parameter 并提示改用 id——不会替调用方猜用哪个模型。
3.4 参数说明(parameters)
每个参数是一个描述符对象,用 type 区分类型,并按类型附带约束:
| 类型 | 可用字段 | 说明 |
|---|---|---|
string | maxLength、enum、required、default | 文本参数,超过 maxLength 返回 400。 |
integer | minimum、maximum、enum、default、required | 整数参数;有 enum 时只能取其中值。 |
number | minimum、maximum、exclusiveMinimum、default | 浮点参数;exclusiveMinimum 表示开区间下限(如 top_p 必须 > 0)。 |
boolean | default | 开关。 |
enum | values、default、required | 枚举,取值必须是 values 之一。 |
media | slot、formats、maxBytesPerFile、maxPixelsPerFile、minEdgePx、minShortEdgePx、aspectRatioRange | 单个媒体 URL 的槽位与限制(只接受公网 HTTPS)。 |
media_array | media 的全部字段 + minItems、maxItems、maxDurationSec、maxTotalDurationSec、linkedBudget | 媒体列表的数量/时长/与其它参数的联动预算。 |
array | items | 结构性数组(对话的 messages):items 描述每一项里的字段。 |
object | properties | 对象参数(如 response_format);properties 描述对象字段。json_schema 格式还需提供包含 name 与 schema 的 json_schema 对象。 |
媒体槽位(slot)取值:reference_image、first_frame、last_frame、reference_video、reference_audio; 它是「这张素材用在哪个位置」,请求字段仍以 5.2–5.4 的字段名为准。
400 unsupported_parameter,不会被悄悄忽略。4. 生成类接口的异步任务协议
图片、视频、音频三个生成端点使用同一套协议:创建成功返回 HTTP 202 与一个任务对象, 响应头 Location 指向任务查询地址;客户端按 status 轮询, 终态后从 output.urls[].url 下载结果。
POST /v1/images/generations
→ HTTP/1.1 202 Accepted
Location: /v1/tasks/task_xxxxxxxx
X-Request-Id: req_xxxxxxxx
{
"id": "task_xxxxxxxx",
"object": "task",
"kind": "image",
"model": "your-model-id",
"status": "queued",
"created_at": 1761300000,
"expires_at": 1761386400,
"usage": { "credits_reserved": 12.5, "credits_charged": null, "settled": false }
}status 的取值:queued(排队中)、in_progress(生成中)、completed(成功)、failed(失败)、canceled(已取消)。只有后三个是终态,前两个需要继续轮询。
轮询建议:起始间隔 2 秒,逐次退避到 10 秒;响应带 Retry-After(秒)时优先按它等待。 任务记录在完成后 3 天内可查询,expires_at 是查询截止时间(Unix 秒),超时后查询返回 404 task_not_found。
任务对象字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 任务 ID,以 task_ 开头。查询与取消只接受本 Key 自己的任务 ID,其它一律 404。 |
object | string | 固定为 task。 |
kind | string | image / video / audio。 |
model | string | 创建时使用的模型 ID。 |
status | string | 任务状态,见上。 |
progress | integer | 0–100,可能缺失。 |
created_at / started_at / completed_at | integer | Unix 秒;未发生的时间点缺失。 |
expires_at | integer | 任务查询截止时间(Unix 秒):任务完成时刻 + 3 天;超过后查询返回 404 task_not_found。 |
media_expires_at | integer | 成品保留截止时间(Unix 秒):任务完成时刻 + 3 天。到期后平台删除成品文件,任务查询不再返回 output,旧签名地址访问返回 404(见本节「产物保留与过期」)。 |
output.urls[] | array | 结果列表,每项含 url、index、mime_type(可能缺失)、expires_at(可能缺失)。按 index 排序。 |
usage | object | credits_reserved(本次请求预估消耗的积分,完成前先冻结)、credits_charged(结算后实扣,未结算为 null)、settled(是否已结算)。 |
error | object | 失败时出现:{ type, code, message, retryable }; 不含账号敏感信息,可直接展示给终端用户。 |
partial | boolean | 部分交付:失败但已产出部分结果,或成功但结果只给到临时直链(可能过期,请尽快转存)。 |
结果 URL 与下载
成功任务的 output.urls[].url 是平台签名地址,有效期 24 小时;在任务查询期内重新查询 /v1/tasks/{id} 会重新签发。 下载时直接 GET 该地址即可(签名即凭证),不要把签名地址当作长期存储地址。 成品本身只保留 3 天(见下一小节),请及时转存。
产物保留与过期(3 天)
通过 API 生成并交付的成品文件(图片 / 视频 / 音频)只保留 3 天: 任务对象里的 media_expires_at 就是成品保留截止时间(Unix 秒),等于任务完成时刻 + 3 天。 任务查询截止时间 expires_at 与它一致(同为完成时刻 + 3 天)。
| 时间点 | 平台行为 | 调用方该怎么做 |
|---|---|---|
| 任务完成后立即 | status 为 completed,output.urls[].url 可下载(签名地址 24 小时有效)。 | 收到完成通知/轮询到 completed 后立刻下载,转存到自己的存储。 |
| 完成后 3 天内(保留期内) | 重新查询 GET /v1/tasks/{id} 会重新签发下载地址(每次 24 小时有效), 任务查询可用。 | 链接过期就重新查询任务拿新链接;不要自己拼接或长期保存旧地址。 |
完成满 3 天(到达 media_expires_at) | 平台删除成品文件:此后再查询任务时不再返回 output(任务的状态、金额、时间以任务记录为准);直接访问旧签名地址返回 404(已过期)。 | 过期无法补下载;未转存的成品会丢失,请务必在保留期内转存。 |
超过 expires_at | 任务查询本身返回 404 task_not_found。 | 把任务 ID 与成品保存到自己的系统,平台不再提供查询。 |
说明:以上保留策略只针对通过 API 生成的成品;你在站内(控制台、创作页面等)直接生成的内容 不在此清理范围,按站内既有规则保留。
幂等:Idempotency-Key
生成类接口建议带 Idempotency-Key 请求头(8–200 字符,可用字符A-Z a-z 0-9 . _ : -)。同一把 Key、同一请求体、同一个幂等键重复提交时, 服务端不会新建任务,而是返回首次创建的任务,并带响应头 Idempotency-Replayed: true;同一幂等键配不同请求体则返回 409 idempotency_conflict。
不带该头时每次请求都是新任务(会重复计费)。幂等键建议使用业务订单号等稳定值, 不要每次重试都换一个新值。对话接口不支持幂等重放,请勿对 /v1/chat/completions 依赖该头。
5. 请求字段
所有 POST 请求都必填 model:可以用 /v1/models 返回的 id,也可以直接用列表里的展示名称(name),两者等价。 字段名校验是严格模式:未定义的字段返回 400 unknown_parameter;模型不支持的可选字段返回 400 unsupported_parameter;取值越界或互相冲突返回 400 invalid_parameter。服务端不会静默忽略或自动修正参数。
下文提到的「模型 schema / 参数说明」指 /v1/models?expand=parameters(或单模型详情)返回的 parameters:里面出现了的字段才代表该模型当前支持,取值域也以它为准。
5.1 对话 /v1/chat/completions
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
messages | array | 是 | 消息角色支持 system / developer / user / assistant / tool。content 支持字符串或纯文本部件数组;助手发出工具调用时可为 null。 单条字符数、消息条数与 Token 预算按该模型的对话能力约束校验,不继承全局生成档位。 |
stream | boolean | 否 | 默认 false。为 true 时以 SSE 返回(data: 行 + 终局 data: [DONE])。 |
max_tokens | integer | 否 | 默认值与上限按模型配置;未配置时默认 2048、最大输出 131072。实际生成预算与报价一致。 |
max_completion_tokens | integer | 否 | max_tokens 的别名(新版 OpenAI SDK 用法),取值规则相同。 两者同时传入且取值不同会返回 400——请只传其中一个。 |
temperature | number | 否 | 取值 0–2,非法值返回 400。 |
top_p | number | 否 | 取值 (0, 1],非法值返回 400。 |
user | string | 否 | 兼容 OpenAI 客户端的终端用户标识(≤128 字符)。平台接收该字段但不使用它 (不参与路由、计费与请求转发);传入合法值不影响结果。 |
兼容 WorkBuddy 消息中的 agent、conversationRequestId、rootRequestId(string),以及 startsNewUserRequest、isMeta、isAdditionalData、isCompactInternal、isSummary、isSubAgent(boolean)。 平台校验类型后移除这些客户端标记,不转发给模型,不计入输入 Token 估算;其他未支持的消息字段仍返回 400。
支持 stop(非空字符串或最多四项的非空字符串数组)、reasoning_effort、verbosity 与 response_format(text / json_object / json_schema);需所选模型支持,实际转发给模型。 已知可选参数的 null 按未指定处理。兼容 n=1、store=false;metadata、prompt_cache_key、safety_identifier 校验后只作兼容接收,不提供存储、缓存命中或额外风控保证。Responses 的推理摘要与 include 为兼容提示,不保证返回推理摘要或加密内容。
聊天接口还支持 seed(安全整数)、presence_penalty 与 frequency_penalty(-2 到 2),所选模型需支持。兼容接收 logprobs=false、top_logprobs=0、空 logit_bias、service_tier=auto/default 与缓存保留提示;不承诺日志概率、优先调度或缓存保留。历史消息的空 tool_calls、空 refusal/audio 及 annotations 注释会被归一化。
工具调用支持 tools(函数定义)、tool_choice(auto / none / required 或指定函数)与 parallel_tool_calls。 工具调用返回在 tool_calls 中(流式响应位于 delta.tool_calls),正常完成时 finish_reason 为 tool_calls。 调用方执行工具后,以 role: tool 与对应的 tool_call_id 提交结果。所选模型需支持该能力。
模型详情的 chat_limits 提供独立的上下文窗口、最大输入、最大输出、默认输出预算及消息限制。 上下文窗口包含输入与输出预算;输入 Token 为估算,最终以模型实际分词结果为准。工具定义、参数、结果与结构化输出定义均计入输入估算与报价。 未配置字符上限时不额外限制单条消息;请求体仍受 8 MiB 传输保护。
响应为非流式时是标准 chat.completion 对象;流式时是 OpenAI 兼容 SSE 分片。usage 中 prompt_tokens / completion_tokens / total_tokens 对应本次实际用量,终局分片会带上 usage(个别模型不回报用量时会省略该字段,平台不会编造 token 数)。
本期不支持的参数(传入返回 400, 不会被悄悄忽略):多结果 n>1、旧式 functions、function_call、logprobs=true、top_logprobs>0、非空 logit_bias、优先服务级别、store=true、modalities、audio、prediction。
temperature / top_p / max_tokens 是「按模型提供」的可选参数: 模型详情(/v1/models/{id})的 parameters 里没有出现,就说明该模型当前不支持它; 显式传会返回 400 unsupported_parameter,不会被悄悄忽略。5.2 图片 /v1/images/generations
| 字段 | 类型 / 取值 | 必填 | 说明 |
|---|---|---|---|
prompt | string | 视模型 | 提示词,上限 16000 字符(纯图像处理类模型可省略)。 |
negative_prompt | string | 否 | 反向提示词,上限 8000 字符。 |
n | integer | 否 | 生成张数,默认 1;上限 8,且必须是模型 schema 中允许的张数档位。 |
size | string,如 1024x1024 | 否 | 输出尺寸,必须是该模型 schema 列出的尺寸;与 aspect_ratio 互斥,同时传返回 400。 |
aspect_ratio | enum | 否 | 1:1、16:9、9:16、4:3、3:4、3:2、2:3、auto(auto = 不指定)。与 size 互斥,同时传返回 400。 模型参数说明里列出该字段时直接按比例生成;没列出时,服务端会按模型支持的尺寸档位换算成 等比例的 width/height 再提交,没有等比例档位则返回 400 (不会静默出一张比例不对的图)。 |
resolution | enum | 否 | 1K / 2K / 4K,大小写敏感;部分模型把清晰度作为计价维度, 此时该字段为必填(以 schema 的 required 为准)。 |
quality | enum | 否 | 质量档位,取值由模型 schema 下发;模型未配置时不支持。 |
image_urls | string[] | 否 | 参考图,只接受公网 HTTPS URL;数量与格式限制由模型 schema 下发。 |
seed | integer | 否 | 随机种子,仅模型声明支持时可用。 |
output_format | enum | 否 | png / jpeg / webp;仅在模型 schema 声明时可用。 |
background | enum | 否 | transparent / opaque;仅在模型 schema 声明时可用。 |
speed_mode | enum | 否 | relax / fast / turbo;仅部分模型支持,影响出图速度与价格, 其它模型传入返回 400。 |
style_prompt | string | 否 | 风格描述(上限 2000 字符):一段自由文本,与主提示词一起决定画风, 例如「赛博朋克霓虹风,高对比冷色调」。所有图片模型都支持。 |
user | string | 否 | 兼容 OpenAI 客户端的终端用户标识(≤128 字符);平台接收但不使用它。 |
n、size、aspect_ratio、resolution、quality、output_format、background、image_urls、seed 都是「按模型提供」的可选字段:模型参数说明里出现了,才代表当前可以使用;没有却显式传了 → 400 unsupported_parameter(不会被静默忽略)。5.3 视频 /v1/videos/generations
| 字段 | 类型 / 取值 | 必填 | 说明 |
|---|---|---|---|
prompt | string | 是 | 提示词,上限 16000 字符。 |
negative_prompt | string | 否 | 反向提示词。 |
mode | enum | 否 | text_to_video、first_frame、first_and_last_frame、image_reference、reference。省略时按传入的媒体字段推断; 显式传入优先。与媒体字段不匹配返回 400。 |
image_urls | string[] | 视模式 | 参考图,仅 image_reference / reference 模式可用;只接受公网 HTTPS URL。 |
first_frame_url | string | 视模式 | first_frame 模式必填;first_and_last_frame 模式下为第一帧。 |
last_frame_url | string | 视模式 | first_and_last_frame 模式下必填(尾帧)。 |
reference_video_urls | string[] | 否 | 仅 reference 模式;参考视频,只接受公网 HTTPS URL,单次最多 8 条(模型上限更低时以模型为准)。时长由服务端探测,不要自行传入时长字段(会 400)。 |
reference_audio_urls | string[] | 否 | 仅 reference 模式;参考音频,规则同参考视频。 |
duration | integer(秒) | 否 | 生成时长,必须是模型 schema 中允许的档位或区间内的值;越界返回 400。 |
resolution | enum | 否 | 如 480p / 720p / 1080p / 4k,取值以模型 schema 为准。 大小写不敏感(720P 等同 720p),服务端会按模型库存原文下发; 不在档位内返回 400(并列出该模型支持的值)。 |
aspect_ratio | enum | 否 | 同图片接口的比例枚举;仅在模型 schema 列出 aspect_ratio 时可用。 |
generate_audio | boolean | 否 | 是否生成配套音频;仅模型声明支持时可用。 |
seed | integer | 否 | 随机种子,仅模型声明支持时可用。 |
style_prompt | string | 否 | 风格描述(上限 2000 字符):一段自由文本,与主提示词一起决定画面风格。 所有视频模型都支持。 |
seconds | integer / string | 否 | duration 的别名(兼容部分客户端用 seconds 传时长的习惯), 接受数字或数字字符串(如 5 或字符串 "5");与 duration 同时传入会返回 400,请只传其中一个。 |
user | string | 否 | 兼容 OpenAI 客户端的终端用户标识(≤128 字符);平台接收但不使用它。 |
n(生成条数)本期不开放:每次请求生成 1 条视频,传入 n 返回 400。
duration、resolution、aspect_ratio、generate_audio、seed 与参考媒体字段同样是「按模型提供」: 模型参数说明里没有就表示当前不支持,显式传会返回 400 unsupported_parameter, 绝不会收下之后丢弃。视频模式与媒体字段的互斥关系
| mode | 可用媒体字段 | 要求 | 传其它媒体字段 |
|---|---|---|---|
text_to_video | 无 | — | 任何媒体字段都会被拒绝(400)。 |
first_frame | first_frame_url | 首帧必填 | 其它媒体字段 400。 |
first_and_last_frame | first_frame_url + last_frame_url | 两者都必填 | 其它媒体字段 400。 |
image_reference | image_urls | 至少 1 张参考图 | 首尾帧与参考视频/音频 400。 |
reference | image_urls / reference_video_urls / reference_audio_urls | 至少一类非空 | 首尾帧 400。 |
参考媒体只接受公网 HTTPS 地址;内网地址、http://、data: 本地路径一律 400 invalid_media。参考视频/音频的时长由服务端自行探测(用于计费与时长预算), 探测失败同样返回 invalid_media。
5.4 音频 /v1/audio/generations
| 字段 | 类型 / 取值 | 必填 | 说明 |
|---|---|---|---|
input | string | 是 | 要合成的文本,上限 16000 字符。 |
voice | string | 否 | 音色标识,上限 100 字符;可用值以模型 schema 为准。 |
speed | number | 否 | 语速倍率,取值 0.25–4。 |
response_format | enum | 否 | mp3(默认)/ wav / ogg;只能取模型允许的格式,其它值返回 400。 |
duration | number(秒) | 否 | 仅当模型 schema 声明该参数时可用,且必须命中模型允许的档位。 |
user | string | 否 | 兼容 OpenAI 客户端的终端用户标识(≤128 字符);平台接收但不使用它。 |
音频接口只认 input 作为文本字段;prompt、text、format、n、stream 等其它写法返回 400。voice / response_format / speed / duration 都是「模型声明才可用」的可选字段。
5.5 特殊模型:先读 schema,再决定传什么
端点和协议对所有模型一致,但可传字段不保证一致。同一个请求体在 A 模型能跑通、在 B 模型返回 400,是最常见的失败原因。 判断依据只有一处:/v1/models/{id}?expand=parameters 里该模型的parameters。下面四类差异最需要提前处理:
| 在 schema 里怎么识别 | 行为差异 | 下游怎么传 |
|---|---|---|
n 只有 1 一档,且出现 speed_mode(MJ 型多图模型) | 一次请求固定交付 4 张(output.urls 里 4 条地址),并按 4 张计费; 没有 resolution / size / quality 维度;speed_mode 同时影响速度与价格(默认 relax)。 | n 传 1(传 2 返回 400);画幅只用 aspect_ratio; 预算按 4 张算;提示词里不要再写 --ar 等内联参数 (画幅改用字段,版本类参数平台会忽略)。 |
某个字段带 required: true(按清晰度 / 时长 / 音色等分档计价的模型) | 不传不会走默认档:返回 400 invalid_parameter,error.param 直接指向缺的字段。 | 按 schema 显式传(例:resolution 选一个允许档位), 不要指望平台替你选价档。 |
image_urls 的 minItems ≥ 1 (图片编辑 / 必须以图生图的模型) | 不带参考图返回 400 invalid_media(param 为 image_urls),不会建任务、不扣费。 | 至少传 1 条公网 HTTPS 图片地址,张数不超过 maxItems。 |
mode 只列出部分取值(仅图生视频的模型) | 传了模型没有的模式(例如对该模型用 text_to_video)返回 400; 首帧模式缺少 first_frame_url 同样 400。 | 从 mode 枚举里选,并按该模式补对应媒体字段。 |
param,因此「按 schema 拼参数」等于「不会拿到半截结果」。6. 响应头与错误码
响应头
| 响应头 | 出现场景 | 含义 |
|---|---|---|
X-Request-Id | 所有响应 | 请求 ID,与错误对象里的 request_id 一致;联系技术支持时请提供该值。 客户端可自带 8–128 字符的该头用于链路追踪,服务端会原样回显。 |
X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset | 设置过每分钟请求上限的 Key | 分别是每分钟上限、剩余次数、重置时间(Unix 秒)。Key 未设 RPM 上限时不下发这三个头。 |
Retry-After | 429 / 503 | 建议等待的秒数,请按它退避后重试,不要立即重打。 |
Location | 202 创建任务 | 任务查询地址,形如 /v1/tasks/{id}。 |
Idempotency-Replayed | 幂等重放 | 值为 true 表示返回的是此前创建的任务,未重复扣费。 |
Cache-Control | 所有 JSON 响应 | 固定 no-store,请勿缓存接口响应。 |
错误对象
所有失败响应都是同一形态的 JSON(message 为稳定英文,可直接展示):
{
"error": {
"type": "invalid_request_error",
"code": "invalid_media",
"message": "image_urls[1] is not a public HTTPS URL.",
"param": "image_urls[1]",
"request_id": "req_xxxxxxxx",
"retryable": false
}
}错误码
| HTTP | code | 语义与处理建议 |
|---|---|---|
| 400 | invalid_request_error | 请求体不是合法 JSON、缺必填字段或类型错误。修正后重试。 |
| 400 | unknown_parameter | 传了未定义的字段(严格模式)。param 指出字段名。 |
| 400 | unsupported_parameter | 该模型不支持这个字段(如未声明支持的 seed)。 |
| 400 | invalid_parameter | 取值越界或字段互斥(如 size 与 aspect_ratio 同传)。 |
| 400 | invalid_media | 参考媒体不是公网 HTTPS、格式/数量不合规或探测失败。 |
| 400 | mixed_media_not_allowed | 模型不允许该类媒体组合(例如给音频必须同时给画面)。 |
| 401 | invalid_api_key / api_key_disabled / api_key_expired / api_key_revoked | 密钥不存在、已禁用、已过期或已删除。到控制台检查 Key 状态;泄露的 Key 请直接删除。 |
| 402 | insufficient_quota | 账户可用积分不足以支付本次请求。充值后重试;这不是限流,也不代表 Key 有问题。 |
| 403 | model_not_allowed | Key 的模型白名单不包含该模型。到控制台调整白名单或换 Key。 |
| 403 | ip_not_allowed / user_banned / generation_restricted | IP 策略或账号风控拦截。属于账号级限制,重试无效,请联系平台。 |
| 403 | content_blocked | 提示词或参考素材触发内容审核。修改内容后再试。 |
| 404 | model_not_found | 模型不存在或已下架(永久语义)。不要重试,请从 /v1/models 重新选取。 |
| 404 | task_not_found | 任务不存在、已超过 3 天查询期,或不属于当前 Key。用创建时拿到的 task_ ID 查询。 |
| 409 | idempotency_conflict | 同一 Idempotency-Key 被用于不同请求体。换一个新幂等键,或使用原请求体。 |
| 409 | billing_error | 计价/预留的临时平台态(报价过期、并发冲突等)。可自动重试一次;持续失败请联系平台。 |
| 413 | request_too_large | 请求体过大:常规 JSON 上限 2MB,音频端点上限 1MB。请精简提示词或减少媒体 URL 数量。 |
| 429 | rate_limit_exceeded | 超过每分钟请求数上限。按 Retry-After 等待;如需更高频率请调高 Key 的 RPM。 |
| 429 | daily_quota_exceeded | 该 Key 今日已用满每日积分上限(见第 8 节)。到控制台调整上限,或次日再试。 |
| 429 | concurrency_limit / queue_full | 并发或队列已满。按 Retry-After 退避重试。 |
| 500 | api_error | 未分类平台错误。可重试;持续出现请附 X-Request-Id 反馈。 |
| 503 | model_unavailable | 模型被临时停用(不同于下架的 404)。带 Retry-After, 请退避重试,不要永久缓存为「模型不存在」。 |
| 503 | overloaded / billing_unavailable | 服务繁忙或账务服务暂不可用。按 Retry-After 重试。 |
| 503 | maintenance | 平台维护中。按 Retry-After 等待恢复。 |
| 504 | upstream_timeout | 对话接口处理超时(仅同步语义)。可重试,或改用流式降低超时概率。 |
7. 任务取消语义
调用 POST /v1/tasks/{id}/cancel 取消任务。是否全额退积分取决于任务是否已经开始执行:
| 取消时的任务状态 | 费用 | 说明 |
|---|---|---|
| 排队中 / 尚未开始执行 | 全额退回预留积分 | 平台尚未开始处理,冻结的积分全部释放。 |
| 已经开始执行 | 按该任务报价足额扣费 | 取消不能减少已开始任务的价格(不是按已完成比例计费);是否已开始由服务端判定。 |
| 已是终态(completed / failed / canceled) | 不再产生任何费用变动 | 不报错,返回任务当前状态与 usage(已结算的 credits_charged 如实给出)。 |
取消成功后返回任务对象;取消成功不等于一定全额退款,请以响应里的 status 与 usage 为准(settled: true 时 credits_charged 为最终扣费)。
8. 日额度与用量查询
每把 Key 可在控制台设置每日积分上限(单位:积分;0 = 不限额,默认不限额)。上限按 Asia/Shanghai 自然日累计当天已冻结的积分; 超过上限的生成请求返回 429 daily_quota_exceeded,冻结的积分会被释放、任务不会开始执行。
口径说明:日用量按「请求创建时冻结的积分」累计,失败/取消退回的积分不会回冲当日累计。 因此该限额偏保守(可能提前拦截,不会漏拦)。
用 GET /v1/me 查询 Key 信息、今日用量与账户余额:
{
"object": "api_key",
"id": "key_xxxxxxxx",
"name": "生产环境",
"prefix": "sk-live-xxxx",
"status": "active",
"created_at": 1792900000,
"expires_at": null,
"rpm_limit": 60,
"daily_credit_limit": 100,
"model_ids": [],
"usage": {
"today": { "date": "2026-10-25", "credits": 3.23, "requests": 5 },
"balance_credits": 931.5461,
"currency": "credits"
}
}字段说明:daily_credit_limit 为 0 表示不限额;model_ids 为空数组表示可调用全部已开放模型;expires_at 为 null 表示永久有效;金额单位均为积分(最多 4 位小数), 时间戳为 Unix 秒。balance_credits 在暂时读不到余额时为 null(不要据此认定 Key 失效)。
9. 调用示例
9.1 对话(非流式)
curl -sS -X POST "https://cresily.cn/v1/chat/completions" \
-H "Authorization: Bearer sk-live-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "your-model-id",
"messages": [
{ "role": "system", "content": "你是一个简洁的助手。" },
{ "role": "user", "content": "用一句话介绍你自己。" }
],
"stream": false,
"max_tokens": 512
}'需要流式输出时,把 stream 改为 true 并按 SSE 读取 data: 行,直到收到 data: [DONE]。
9.2 图片生成(创建 + 轮询)
# 1) 创建任务:202 + task。Idempotency-Key 建议用业务订单号,防重试时重复扣费
curl -sS -X POST "https://cresily.cn/v1/images/generations" \
-H "Authorization: Bearer sk-live-xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-A-1024-1" \
-d '{
"model": "your-model-id",
"prompt": "海边日落,电影感",
"aspect_ratio": "16:9",
"resolution": "2K",
"n": 1
}'
# 2) 轮询任务(把 task_xxx 换成上一步返回的 id)
curl -sS "https://cresily.cn/v1/tasks/task_xxxxxxxx" \
-H "Authorization: Bearer sk-live-xxxxxxxx"
# 3) status 为 completed 后,从 output.urls[0].url 直接下载(签名地址 24 小时有效)
# 成品只保留 3 天(media_expires_at),请立即转存;需要取消时:POST /v1/tasks/task_xxxxxxxx/cancel用同一把 Key、同一请求体、同一 Idempotency-Key 重复执行第 1 步是安全的: 会返回同一个任务并带 Idempotency-Replayed: true,不会重复扣费。
9.3 视频生成(创建 + 轮询)
# 1) 创建任务(文生视频):202 + task
curl -sS -X POST "https://cresily.cn/v1/videos/generations" \
-H "Authorization: Bearer sk-live-xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-B-1" \
-d '{
"model": "your-model-id",
"prompt": "海边日落,镜头缓慢推进,电影感",
"mode": "text_to_video",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}'
# 2) 轮询任务(轮询节奏与图片一致)
curl -sS "https://cresily.cn/v1/tasks/task_xxxxxxxx" \
-H "Authorization: Bearer sk-live-xxxxxxxx"
# 3) status 为 completed 后,从 output.urls[0].url 下载(签名地址 24 小时有效)
# 成品只保留 3 天,请立即转存做图生视频时把 mode 换成 first_frame 并传首帧first_frame_url(公网 HTTPS URL);首尾帧用 first_and_last_frame 再补 last_frame_url。mode 省略时由传入的媒体字段推断。duration、resolution、generate_audio 等均为按模型提供的可选字段, 模型参数说明里没有就表示当前不支持(传入返回 400,不会静默丢弃)。
9.4 音频生成(创建 + 轮询)
# 1) 创建任务:202 + task(文本字段固定是 input)
curl -sS -X POST "https://cresily.cn/v1/audio/generations" \
-H "Authorization: Bearer sk-live-xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-C-1" \
-d '{
"model": "your-model-id",
"input": "欢迎使用本平台的语音合成接口。",
"voice": "your-voice-id",
"response_format": "mp3",
"speed": 1.0
}'
# 2) 轮询任务(与图片/视频同一套协议)
curl -sS "https://cresily.cn/v1/tasks/task_xxxxxxxx" \
-H "Authorization: Bearer sk-live-xxxxxxxx"
# 3) completed 后从 output.urls[0].url 下载音频文件音频接口只认 input 作为文本字段(prompt、text 等写法返回 400);voice、response_format、speed、duration 都是按模型提供的可选字段,取值以模型参数说明为准。
9.5 特殊模型的写法(MJ 型 / 图片编辑型 / 仅图生视频型)
下面三段是按能力签名给的, 不是按某个具体模型名给的:先看 /v1/models/{id}?expand=parameters里有没有 speed_mode、字段是否标 required、image_urls 的 minItems 是几,再挑对应写法。
# ① MJ 型(schema 里有 speed_mode):n 只能 1,一次交付 4 张、按 4 张计费
curl -sS -X POST "https://cresily.cn/v1/images/generations" \
-H "Authorization: Bearer sk-live-xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-D-1" \
-d '{
"model": "your-model-id",
"prompt": "海边日落,电影感,细节丰富",
"aspect_ratio": "3:2",
"negative_prompt": "低清, 变形",
"speed_mode": "relax"
}'
# ② 图片编辑型(schema 里 image_urls 的 minItems ≥ 1):不带参考图直接 400
curl -sS -X POST "https://cresily.cn/v1/images/generations" \
-H "Authorization: Bearer sk-live-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "your-model-id",
"prompt": "把背景换成雪山,人物与服装保持不变",
"image_urls": ["https://your-cdn.example.com/source.png"],
"aspect_ratio": "1:1"
}'
# ③ 仅图生视频型(schema 里 mode 没有 text_to_video):必须给首帧
curl -sS -X POST "https://cresily.cn/v1/videos/generations" \
-H "Authorization: Bearer sk-live-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "your-model-id",
"prompt": "镜头缓慢推进,光线渐暗",
"mode": "first_frame",
"first_frame_url": "https://your-cdn.example.com/first.png",
"duration": 5
}'三段的轮询与下载完全相同(GET /v1/tasks/{id} → output.urls[].url)。MJ 型要特别注意两点:n 不能大于 1;虽然 n 是 1,返回的是 4 条地址、按 4 张计费—— 客户端按 output.urls.length 展示即可,不要按 n 截断。 另外这类模型没有 resolution 维度,传了会返回 400。
10. 跨分类统一接入(一个客户端接四类模型)
如果你的接入方需要「同一套代码请求本站点不同分类下的不同模型」,请按下面的边界来设计:传输层与任务协议是统一的,请求体不是统一的。 统一的部分可以写成一份公共代码;差异部分只有三处——端点、主输入字段、分类专属字段。
10.1 完全统一、无需分支的部分
| 能力 | 统一口径 |
|---|---|
| Base URL | https://cresily.cn/v1,四类模型同一个前缀。 |
| 鉴权 | Authorization: Bearer sk-live-…(或 x-api-key),全部端点一致。 |
| 模型选择 | 所有生成类请求体的 model 都是 /v1/models 返回的逻辑模型 ID, 与分类无关;模型属于哪个分类由列表里的 kind 决定。 |
| 错误对象 | 所有端点错误体结构一致(error.code / error.message /error.param),错误码表见第 6 节。 |
| 异步任务 | 图片 / 视频 / 音频三类生成共用同一套协议:202 + Location →GET /v1/tasks/{id} 轮询 → output.urls[].url 下载; 取消是 POST /v1/tasks/{id}/cancel。轮询与取消代码可以完全复用。 |
| 幂等 | Idempotency-Key 对三类生成统一生效(作用域是「每把 Key」); 对话端点不参与幂等。 |
| 参数字段来源 | 一律以 /v1/models?expand=parameters 的返回为准: 该模型 parameters 里出现的字段就是可以传的字段。 |
10.2 必须按分类分支的三处
| kind | 端点 | 主输入字段 | 分类专属字段(示例) | 交付方式 |
|---|---|---|---|---|
chat | /v1/chat/completions | messages | stream、max_tokens、temperature、top_p | 同步 JSON 或 SSE |
image | /v1/images/generations | prompt | n、size、aspect_ratio、resolution、quality、output_format、background、image_urls | 202 异步任务 |
video | /v1/videos/generations | prompt | mode、duration、resolution、aspect_ratio、first_frame_url、last_frame_url、reference_video_urls、reference_audio_urls、generate_audio | 202 异步任务 |
audio | /v1/audio/generations | input | voice、speed、response_format、duration | 202 异步任务 |
每个端点只接受自己分类的字段:把
messages 发给图片端点、或把voice 发给视频端点,会返回 400 unsupported_parameter(明确报错,不会静默忽略)。同理,可选字段(aspect_ratio、seed、negative_prompt、duration、resolution、quality、output_format、background、generate_audio、voice、response_format、temperature、top_p、max_tokens)只有在模型 参数说明里出现时才允许传——这保证「传了就一定生效」,而不是收下之后被丢弃。每个模型的参数说明给出的都是该模型当前确定可用的参数(我们只在参数确实会生效时才列出它),因此你按参数说明构造请求,不会遇到「请求通过、结果不符」。
10.3 推荐写法(按 kind 分支 + 参数说明驱动)
// 1) 拉一次模型清单,按 kind 建索引(缓存即可,字段是只增不删的)
const { data } = await get("/v1/models?expand=parameters");
const model = data.find((m) => m.id === modelId); // model.kind: chat|image|video|audio
// 2) 只按 kind 选端点与主输入字段
const endpoint =
model.kind === "chat" ? "/v1/chat/completions"
: model.kind === "image" ? "/v1/images/generations"
: model.kind === "video" ? "/v1/videos/generations"
: "/v1/audio/generations";
// 3) 业务参数按 schema 过滤:schema 里没有的字段不要发(发了就是 400)
const body = { model: model.id };
for (const [key, value] of Object.entries(businessParams)) {
if (key in model.parameters) body[key] = value;
}
if (model.kind === "chat") body.messages = messages; // 主输入字段
else if (model.kind === "audio") body.input = text;
else body.prompt = text;
// 4) 交付:chat 直接拿响应;其余三类统一走「202 → 轮询 → 下载」
const res = await post(endpoint, body);
const task = res.status === 202 ? await pollTask(res.headers.get("Location")) : null;
const urls = task ? task.output.urls.map((u) => u.url) : [res.json.choices[0].message.content];这样写出来的客户端,切换模型只需要改 modelId 与业务参数; 切换分类只影响「端点 + 主输入字段」两个变量,轮询、下载、取消、错误处理、重试与幂等全部复用。
11. 对接建议与常见问题
这一节集中说明接入时最容易踩的坑。按下面的建议实现,可以避免「请求成功、结果却和预期不符」, 也能让重试、轮询与资金处理更稳。
11.1 用参数说明驱动界面与校验
模型清单(/v1/models?expand=parameters)是唯一权威来源:先按 kind 决定用哪个端点, 再按该模型的 parameters 渲染表单并做前端校验。枚举参数只能从 values 里取值; 数值参数只能取 minimum / maximum 之间的值(有 exclusiveMinimum 时下限是开区间); 标了 required 的字段必须传。列表里的 capability_version 变化时,刷新本地参数缓存即可。
不要硬编码参数清单:不同模型支持的字段不同,同一模型也可能随平台调整而变化。参数说明里没有出现的字段, 传了会返回 400 unsupported_parameter,不会被悄悄忽略。
11.2 媒体素材:只传公网 HTTPS
参考图、首帧、尾帧、参考视频、参考音频都只接受公网可访问的 HTTPS 地址;不支持文件上传,也不接受 base64 或本站内路径。数量、格式、单文件大小、像素、时长等限制以参数说明为准 (如 minItems / maxItems / formats / maxBytesPerFile / maxDurationSec),不满足返回 400 invalid_media。视频 / 音频参考素材的时长由平台自行探测,不要自行传入时长字段(传了会返回 400)。
11.3 幂等:让重试变成安全操作
生成类请求建议带 Idempotency-Key(8–200 字符,取业务订单号等稳定值)。 超时或失败重试时复用同一个键:同一把 Key、同一请求体、同一个键会返回同一个任务,并带 Idempotency-Replayed: true,不会重复扣费;同一键配不同请求体会返回 409 idempotency_conflict。如果要重新发起一个真正的新任务,换一个新键。 对话接口不支持幂等重放,不要对它做自动重放。
11.4 轮询与失败重试
生成类是异步的:创建得到任务后按 2 秒起步、逐步退避到 10 秒轮询;响应带 Retry-After 时按它等待。到终态(completed / failed / canceled)后停止轮询,不要并发高频刷新(有每分钟请求上限)。
| 情况 | 建议做法 |
|---|---|
400 invalid_request_error / unknown_parameter / unsupported_parameter / invalid_parameter / invalid_media | 请求本身有问题:按错误里的 param 修正后再试,原样重试不会成功。 |
401 invalid_api_key 等 | 检查/更换 Key;不要自动重试。 |
402 insufficient_quota | 账户可用积分不足:充值后再试。这不是限流,重试也不会成功。 |
403 model_not_allowed / content_blocked | 调整 Key 的模型白名单;或修改提示词/素材内容后重新发起。 |
409 idempotency_conflict | 换一个新的幂等键,或改用最初那次的请求体。 |
409 billing_error | 可自动重试一次(建议复用同一幂等键);持续失败请联系平台。 |
| 429 | 按 Retry-After 退避:限流等一会儿再试;日额度用满需调整上限或次日再试(见第 8 节)。 |
| 5xx | 退避后重试;重试生成请求时带上同一 Idempotency-Key,避免重复扣费。 |
任务 status = failed | 看 error.code 与 error.retryable:可重试时用新的幂等键重新创建(同一键会拿回原来那个失败任务),并限制重试次数。 |
404 task_not_found | 任务不存在、不属于该 Key 或已过 3 天保留期;不要重试,凭任务 ID 联系平台排查。 |
11.5 Key、额度与账户
三种「不能用」要区分对待:Key 的模型白名单不含该模型 → 403 model_not_allowed; 每分钟请求数超限 → 429 rate_limit_exceeded;Key 的每日积分上限用尽 → 429 daily_quota_exceeded(每日上限为 0 表示不限额,可在控制台调整); 账户可用积分不足 → 402 insufficient_quota(充值后再试)。 Key 信息、今日用量与余额可用 GET /v1/me 查询;控制台的「任务中心」还能查看每笔 API 任务的金额与状态,方便对账。
11.6 成品请及时转存
签名下载地址 24 小时有效,成品本身只保留 3 天(见第 4 节「产物保留与过期」)。 不要把签名地址存进数据库当长期链接:收到 completed 后立即下载并转存到自己的对象存储; 链接过期时可在保留期内重新查询任务换新链接;超过保留期无法补下载。
11.7 常见问题
| 问题 | 原因与处理 |
|---|---|
任务显示 completed,但 output 没了? | 成品已过 3 天保留期(对照 media_expires_at),或任务实际是 failed /canceled(看 status 与 error)。 |
| 同一个参数在 A 模型能用,B 模型报 400? | 参数按模型提供:以 B 模型 parameters 里是否出现为准,没有就是不支持。 |
| 同一个展示名称有两个模型? | 展示名称重复时请求会返回 400 并要求用 id;生产环境建议始终用 id。 |
| 为什么图片比例和我传的不一样? | 模型参数说明里没有 aspect_ratio 时,平台会换算到该模型支持的等比例尺寸; 没有等比例尺寸会返回 400。按模型支持的画幅或改用 size。 |