使用指南
错误码与排查
HTTP 状态、错误码含义、模型与素材常见错误、限流和排查步骤
错误码与排查
排查时先记录:HTTP 状态码、平台返回的请求标识、模型 ID、任务 ID、素材 ID 和原始错误码。
不要记录 API Key、真人会话 Token 或完整素材下载地址;提交给平台支持前请先脱敏。
HTTP 状态含义
| 状态 | 含义 | 处理 |
|---|---|---|
200 | 请求成功(异步任务的中间状态也是 200) | 读取响应体里的状态字段 |
400 | 参数错误、请求体格式错误、缺少 model | 按 error.message 或 msg 修正请求 |
401 | API keys 缺失、错误或已失效 | 检查 Authorization 与 Key 状态 |
403 | 无权限(例如访问其他账号的素材) | 确认资源归属当前账号 |
404 | 资源不存在、不属于当前账号,或方法不匹配 | 核对 ID;若路径正确,再确认 HTTP 方法 |
429 | 请求过于频繁 | 退避后重试,不要并发重试 |
500 | 平台内部错误 | 记录请求标识后重试;持续失败请联系支持 |
502 | 素材处理失败或依赖服务异常 | 稍后重试;持续失败请联系支持 |
404 有三种成因,不要一律当成「ID 写错了」
这是排查时最容易误判的一点:
| 情况 | 实测表现 |
|---|---|
| 资源不存在 / 不属于当前账号 | GET /api/v1/materials/assets/<不存在> → 404 |
对只支持 POST 的路径发了 GET | GET /v1/chat/completions → 404;GET /v1/images/generations → 404 |
| 路径拼写错误 | 404 |
拿到 404 时,先确认路径与方法是否匹配,再怀疑 ID。
查不到视频任务返回 400,不是 404
这一处与其他接口不一致,需要特别注意:
| 请求 | 实测状态 | 响应体 |
|---|---|---|
GET /v1/video/generations/<不存在> | 400 | {"code":"task_not_exist","message":"task_not_exist","data":null} |
GET /v1/videos/<不存在> | 400 | 同上 |
GET /api/v1/materials/assets/<不存在> | 404 | {"code":404,"data":null,"msg":"素材不存在或无权访问"} |
视频任务查询用 400 + 顶层 {code, message, data} 结构返回,
既不是 404,也不是下面说的 error 对象结构。
错误响应有三种结构
1. 模型 / 图片 / 视频生成接口 —— error 对象
失败时返回 HTTP 非 2xx,并带一个 error 对象:
{
"error": {
"code": "invalid_parameter",
"message": "请求参数不符合所选模型要求",
"type": "invalid_request_error",
"param": "size"
}
}| 字段 | 说明 |
|---|---|
code | 错误码,可能为空字符串(见下) |
message | 可读原因,通常含 request id |
type | 错误类型标识。鉴权失败、模型不存在、请求体非法实测均为 new_api_error |
param | 仅在参数类错误时出现,指出是哪个字段 |
code可能是空字符串。 实测:鉴权失败与请求体 JSON 无法解析时code都是""。 不要用code是否为空来判断「是不是错误」,应以 HTTP 状态码为准,并优先读message。
type不是稳定分类字段。 需要分类时请读code,不要依赖type的取值。
2. 素材库接口 —— 顶层 code
返回 HTTP 非 2xx,code 与 HTTP 状态一致:
{ "code": 404, "data": null, "msg": "素材不存在或无权访问" }3. 视频任务查询 —— 顶层 code 字符串
{ "code": "task_not_exist", "message": "task_not_exist", "data": null }注意这里的 code 是字符串 task_not_exist,不是数字。
request id:排查问题的关键标识
平台把 request id 直接写在 error.message 里,不需要去 header 里找:
"message": "Invalid token (request id: 202609221135501066578648268d9d6uXuM5QgH)"一行命令取出:
curl -s "$LOCOPAL_BASE_URL/v1/models" \
-H "Authorization: Bearer sk-invalid" \
| grep -oE 'request id: [A-Za-z0-9]+'提交工单时附上这个 request id,可以大幅缩短定位时间。
鉴权失败
API keys 缺失、错误或已失效时,所有接口都返回 HTTP 401 和:
{
"error": {
"code": "",
"message": "Invalid token (request id: ...)",
"type": "new_api_error"
}
}注意 code 为空字符串——这正是上面提醒「不要依赖 code」的原因。
模型与生成错误
| 错误码 / 提示 | 原因 | 处理 |
|---|---|---|
Model name not specified | 请求体缺少 model 字段 | 补上来自 /v1/models 的模型 ID |
model_not_found | 模型 ID 不存在,或当前 Key / 分组没有该模型 | 重新查询 /v1/models 并使用返回的 id |
No available channel | 当前分组没有可用渠道 | 换同类模型或联系平台支持 |
invalid_parameter | 参数组合不被当前模型支持 | 按 param 字段调整尺寸、比例、时长等 |
unknown_parameter | 当前模型 / 渠道不认识请求字段(例如图片接口的 response_format) | 按 param 删除不支持的字段,使用模型默认行为 |
InvalidParameter / upstream_error | 上游模型拒绝参数(例如图片最小像素数不满足) | 读取 message 调整尺寸或参数 |
credit_balance_exhausted / insufficient_quota | 当前上游渠道没有可用余额 | 换同类模型 / 渠道,或联系平台支持补充渠道余额 |
ResourceDownloadFailed | 参考图片 / 视频地址无法直接下载 | 使用可公开访问的 HTTPS 地址,或改用素材库 asset:// |
task_not_exist | 查询的任务 ID 不存在或不属于当前账号 | 核对任务 ID 与创建任务时的账号 |
video_generation_failed | 视频任务已经受理,但提交上游、素材处理、审核或生成阶段最终失败 | 读取同一响应中的 error.message;保留任务 ID,修正素材或参数后由用户主动重新提交 |
| 当前模型不支持真人素材库 | 真人素材被提交到没有该能力的模型 | 换用支持真人素材库的模型,不要改用普通图片 URL 绕过 |
insufficient_user_quota | 账户余额或当前 API Key 额度不足以覆盖本次预估消耗 | 按错误里的「本次预计需要 / 当前可用」充值或调整参数后重试;此时不会创建任务 |
缺少提示词:请在 prompt 或 content 的 text 元素中提供文本描述 | 视频任务没有文本描述 | 补上 prompt 或 content 中的 text 元素 |
content[0].role 不支持 ... | 参考素材角色不在允许列表 | 改用 reference_image、first_frame、last_frame、reference_video、reference_audio |
素材库中找不到素材 ... | asset:// 素材不存在或不属于当前账号 | 先提交素材并等待状态为可用,或核对账号 |
task_concurrency_exceeded | 当前账号或平台同时在处理的生成任务已达并发上限(HTTP 429) | 按提示里的「当前 N 个 / 上限 M」等待已有任务完成后再提交;不要连续重试 |
素材库错误
| HTTP | 提示 | 原因 | 处理 |
|---|---|---|---|
400 | 请求体必须是 JSON 对象 | 请求体不是合法 JSON | 修正请求体 |
400 | type 只能是 virtual 或 real | type 取值错误 | 修正 type |
400 | 素材分组名称不能为空 / 不能超过 64 个字符 | 名称缺失或过长 | 修正名称 |
400 | 素材分组说明不能超过 300 个字符 | 说明过长 | 缩短说明 |
400 | 缺少 group_id | 提交素材时未提供分组 | 补上 group_id |
400 | image_url 必须是可公开下载的 http(s) 地址… | 地址不是 http(s) 或不完整 | 改用公网 http(s) 地址,或改用 data_url |
400 | image_url 与 data_url 只能提交一个 | 同时提交或都未提交 | 只保留一个字段 |
400 | data_url 必须是 data:image/...;base64,... 格式 / 图片数据无效或超过 20MB | 上传数据格式错误或过大 | 修正数据或改用 image_url |
404 | 素材不存在或无权访问 | 素材 ID 错误、已删除或不属于当前账号 | 使用提交素材时返回的 asset_id |
404 | 素材分组不存在或无权访问 / 素材分组不存在或不属于当前账号 | 分组 ID 错误或不属于当前账号 | 使用本人账号下的分组 ID |
404 | 素材分组不存在或不是虚拟素材分组 | 向 real 分组提交图片 | 图片只能提交到 virtual 分组 |
429 | 请求过于频繁 | 轮询过快或并发过高 | 按提示退避重试 |
500 / 502 / 503 | 素材服务暂不可用 | 素材服务异常或能力未开通 | 保留请求信息后重试;持续失败请联系支持 |
素材审核未完成不是错误:查询返回 200,status 为 Processing,继续轮询同一个素材 ID 即可。
推理模型输出为空也不是 HTTP 错误:如果返回 200、finish_reason 为 length,且 usage.completion_tokens_details.reasoning_tokens 已占满输出上限,应提高输出额度或改用非推理模型。
真人授权错误
| 提示 | 原因 | 处理 |
|---|---|---|
| 授权会话不存在或无权访问 | 会话过期、已使用或属于其他用户 | 由当前用户重新创建二维码 |
| 授权尚未完成 | 用户还没完成手机端采集 | 保留二维码,完成后再解析 |
| 该真人素材已绑定其他用户 | 同一真人分组不能跨账号复用 | 使用原绑定账号,或由本人重新授权 |
| 素材服务暂不可用 | 授权通道当前不可用 | 记录请求时间后联系平台支持;不要用普通图片上传替代真人采集 |
限流与重试
429表示请求过于频繁,按提示退避重试,不要并发重试;- 素材状态建议 5~10 秒查询一次,视频任务建议 5~15 秒一次;
- 只对
429和短暂的5xx重试;400/401/403/404直接修正请求; - 重试前先按任务 ID / 素材 ID 查询,避免重复创建和重复计费。
快速自检
Authorization是否为Bearer <API Key>,Key 是否仍在启用状态;- 请求域名是否为控制台当前指定的地址(默认
https://locopalai.com,海外模型可能为https://us-api.locopalai.com); model是否来自/v1/models的data[].id;- 素材
status是否已经是Active; - 参考图片 / 视频地址是否是公网可直接访问的
http(s)地址,且不依赖 Cookie 或 Referer; - 同一个任务 / 素材是否重复提交过。
提交支持时请附上
- 请求时间与接口路径;
- HTTP 状态码与完整响应体(API Key 打码);
- 平台返回的请求标识、任务 ID 或素材 ID;
- 涉及的模型 ID 与参数;
- 可复现的最小请求示例。
