错误模型

适用范围

/api/v1/open/ 下所有开放平台 API 接口都遵循同一套错误结构。

标准错误结构

{
  "code": "VALIDATION_FAILED",
  "message": "invalid request payload",
  "request_id": "req-123"
}
  • code — 稳定的错误码(字符串或数字,详见下表)
  • message — 面向调用方的简短错误说明
  • request_id — 平台为本次请求生成的追踪 ID,故障排查时附上

业务错误码

codeHTTP说明
INVALID_REQUEST_BODY400JSON 请求体无法解析
VALIDATION_FAILED400请求字段缺失、类型非法、非 JSON 对象或超出范围
IDEMPOTENCY_CONFLICT409idempotency_key 与之前请求体不一致(同 key 不同 body)
COMMAND_NOT_FOUND404command_id 不存在
DEVICE_REQUEST_NOT_FOUND404request_id 不存在
UNSUPPORTED_VENDOR400001 命令受理中厂商未注册
UNSUPPORTED_COMMAND400001 命令受理中命令类型不受支持或不在可信能力范围内
OBJECT_POLICY_DENIED403对象预签名请求不满足租户资源策略
OBJECT_SIGNING_FAILED500对象存储预签名失败
CALLBACK_NOT_FOUND404callback endpoint 或 subscription 不存在
NATS_PRINCIPAL_CONFLICT409NATS principal 已存在冲突
NATS_SUBJECT_POLICY_INVALID400NATS subject 未按租户前缀授权或策略非法
INTERNAL_ERROR500平台内部错误,附 request_id 后联系技术支持

鉴权与访问控制错误码

鉴权失败也返回上面的标准结构。
codeHTTP说明
UNAUTHORIZED401未认证:缺少 API ID、timestamp、nonce、signature,或凭据不可用
SIGNATURE_INVALID401签名无效:签名值不匹配,可能是 API Key 错、canonical 串拼接错、或请求体被代理改写
TIMESTAMP_EXPIRED401时间戳过期:X-Api-Timestamp 超出平台允许的偏差窗口
NONCE_REPLAYED401nonce 在重放窗口内重复使用
FORBIDDEN403当前 API client 没有租户域内权限
TENANT_NOT_FOUND401无法解析有效租户,或租户已禁用/删除
TENANT_BINDING_INVALID403API client 与租户绑定关系无效

排查指引

  • INVALID_REQUEST_BODY / VALIDATION_FAILED / IDEMPOTENCY_CONFLICT — 修复请求后重试
  • *_NOT_FOUND — 检查 ID 拼写,确认资源属于当前 API client
  • FORBIDDEN — 与平台管理员确认当前 API Key 的租户域 scope 配置
  • INTERNAL_ERROR — 必上报 request_id,无法直接重试

示例

业务错误:
{
  "code": "UNSUPPORTED_VENDOR",
  "message": "vendor is not supported",
  "request_id": "req-unsupported"
}
鉴权错误:
{
  "code": "SIGNATURE_INVALID",
  "message": "invalid signature",
  "request_id": "req-signature"
}