错误
所有公开失败都使用真实 HTTP 错误和一个扁平 body:
json
{
"error": "insufficient_scope",
"message": "This credential does not carry the required scope.",
"request_id": "server-issued-id",
"required": ["club.compliance.read"]
}error、message、request_id 始终存在。可选字段只有 required、数字 code 和 details(仅含 field/code,不含提交值)。程序只按 error 分支,不要解析 message。request id 由服务端签发;调用方提供的 id 不作为身份依据。
| 状态 | error |
|---|---|
| 400 | invalid_request |
| 401 | timestamp_out_of_window、signature_verification_failed、replay_detected、credential_revoked、credential_disabled、credential_expired |
| 403 | source_ip_not_allowed、insufficient_scope |
| 404 | not_found(workspace 类型错误和外部资源也如此) |
| 409 | idempotency_key_in_progress、idempotency_key_reused、idempotency_outcome_unknown |
| 413 | payload_too_large(body 上限 100kb) |
| 429 | rate_limit_exceeded |
| 500 | internal_error |
只映射明确批准的内部 INVALID_PARAMS,以及已做 workspace 围栏的安全 NOT_FOUND。其他内部、Prisma 或未知失败一律成为 internal_error,默认失败关闭,避免泄漏。
处理幂等 409 前请先读幂等。