要启用 Compliance API,请参阅设置 Compliance API。
本页列出了每个已记录的 Compliance API 端点返回的响应消息、原因和修复方法。
Compliance API 以标准的 Anthropic 错误格式返回错误:一个非 2xx 状态码、一个 request-id 响应标头,以及一个包含 error 对象(含 type 和 message)的 JSON 正文。在向支持团队上报时,请附上 request-id 标头的值。
{
"error": {
"type": "authentication_error",
"message": "The API key provided is invalid or has been revoked."
}
}请基于 error.type 进行匹配,而不是消息字符串。消息足够稳定,可以复制到运维手册中,但随着时间推移可能会被重新措辞;type 值是 API 契约的一部分。
下表让您一目了然地知道是否应该重试。后面的每个部分都展示了逐字的错误正文和修复方法。
| 状态 | 是否重试? | 时机 |
|---|---|---|
| 400 Bad Request | 否 | 修复请求后重新发送。 |
| 401 Unauthorized | 否 | 修复或轮换密钥,然后重新发送。 |
| 403 Forbidden | 否 | 添加缺失的作用域或使用正确的密钥类型,然后重新发送。 |
| 404 Not Found | 否 | 资源已被删除或从未存在;将其从您的队列中移除。 |
| 409 Conflict | 否 | 请求与资源的当前状态冲突;解决冲突(例如分离子资源),然后重试。 |
| 429 Too Many Requests | 是,在 retry-after 之后 | 等待 retry-after 中的秒数,然后重试;不要推进您的游标。 |
| 500 Internal Server Error | 取决于 x-should-retry | 重试前检查 x-should-retry 响应标头。 |
| 502, 503, 504, 529 | 是,使用退避策略 | 瞬时性错误;使用指数退避重试。 |
请求在语法上有效,但包含了服务器拒绝的参数。修复该参数后重试。
类型: invalid_request_error
The `created_at.gte` parameter contains an invalid timestamp format. Timestamps must be provided in RFC 3339 format e.g., "2024-03-01T00:00:00Z". Got "2024-01-01".原因: 某个 created_at.* 或 updated_at.* 值(.gte、.gt、.lte、.lt)无法被解析为日期时间。消息会指出失败的参数名称,并回显所发送的值。
修复: 发送包含时间和时区的完整 RFC 3339 时间戳,例如 2024-03-01T00:00:00Z 或 2024-03-01T00:00:00+00:00。
类型: invalid_request_error
The limit parameter must be between 1 and 1000, inclusive. Got 1500.原因: limit 查询参数超出了可接受的范围。消息中指出的边界反映了所调用的特定端点的最大值。
修复: 发送在端点可接受范围内的 limit。每个列表端点都有自己的 limit 范围;请参阅相应的 Compliance API 参考页面上的参数约束。
类型: invalid_request_error
Invalid `after_id`. No activity found for `after_id` "activity_invalid123"原因: after_id 或 before_id 游标无法被解码为不透明游标,也无法被解析为活动 ID。
修复: 将分页游标视为不透明字符串。始终复制上一页返回的 first_id 或 last_id 值;当 has_more 为 false 时停止。不要从对象 ID 构造游标。
目录和项目端点(组织、用户、角色、角色权限、群组、群组成员、项目和项目附件)使用不透明的 page 令牌而非 after_id 和 before_id 进行分页。同样的建议适用:原样传递上一个响应中的 next_page 值,并在 has_more 为 false 时停止。格式错误的 page 令牌会返回与格式错误的 after_id 或 before_id 相同的 400 invalid_request_error。
x-api-key 标头缺失或与任何已知密钥都不匹配。作用域错误的有效密钥会返回 403 Forbidden。
类型: authentication_error
The API key provided is invalid or has been revoked.原因: x-api-key 中的密钥不存在、已被删除或已被禁用。缺失或为空的 x-api-key 标头会返回相同的正文,因此请同时检查您的密钥存储和密钥的吊销状态。
修复: 确认密钥值,检查它是否未在 claude.ai(Compliance Access Key)或 Claude Console(Admin API 密钥)中被删除,并确认它已启用。请参阅设置 Compliance API。
x-api-key 中的密钥有效,但不具备端点所需的作用域。逐字消息会列出密钥所携带的作用域(Got:)和端点所需的作用域(Needed:),因此您无需重新检查 Claude Console 或 claude.ai 即可确认密钥携带的内容。Compliance Access Key 的作用域在创建后不可变,因此每个作用域不足的修复方法都会引导您创建新密钥,而不是编辑现有密钥。
类型: permission_error
Missing required scopes. Got: ['read:compliance_user_data'] Needed: ['read:compliance_activities']原因: 使用了不具备 read:compliance_activities 的密钥来调用 GET /v1/compliance/activities。导致此错误有两种常见途径:
sk-ant-api01-...)时未包含 read:compliance_activities 作用域。sk-ant-admin01-...)是在组织启用 Compliance API 之前创建的。在启用之前创建的密钥不携带该作用域;请参阅设置 Compliance API。修复: Compliance Access Key 的作用域在创建后不可变。创建一个包含 read:compliance_activities 的新密钥,或使用 Claude Console Admin API 密钥。请参阅您需要哪种密钥?了解 Admin API 密钥携带此作用域的条件。
类型: permission_error
Missing required scopes. Got: ['read:compliance_user_data'] Needed: ['read:compliance_org_data']原因: 使用了不具备 read:compliance_org_data 的密钥来调用组织、角色、群组或有效设置端点。导致此错误有两种常见途径:
sk-ant-api01-...)时未包含 read:compliance_org_data 作用域。sk-ant-admin01-...)。Admin API 密钥仅携带 read:compliance_activities,无法读取组织元数据。修复: 创建一个新的 Compliance Access Key,并选中 read:compliance_org_data。Admin API 密钥无法读取组织元数据;必须使用 Compliance Access Key。
类型: permission_error
Missing required scopes. Got: ['read:compliance_org_settings'] Needed: ['read:compliance_org_data']原因: read:compliance_org_settings 作用域已于 2026 年 6 月 30 日停用。GET /v1/compliance/organizations/{organization_id}/settings 现在需要 read:compliance_org_data,与其他组织端点使用相同的作用域,而已停用的作用域不再授权任何操作。仅携带 read:compliance_org_settings 的 Compliance Access Key 在每次调用设置端点时都会返回此错误,即使该密钥在停用之前可以正常工作。创建密钥时已无法再选择或授予该已停用的作用域。
修复: Compliance Access Key 的作用域在创建后不可变。创建一个新的 Compliance Access Key,选中 read:compliance_org_data,更新您的集成以使用它,然后删除旧密钥。已经携带 read:compliance_org_data 的密钥不受此次停用的影响。
类型: permission_error
Missing required scopes. Got: ['read:compliance_activities'] Needed: ['read:compliance_user_data']原因: 使用了不具备 read:compliance_user_data 的密钥来调用聊天、消息、文件、项目、组织用户、或群组成员端点。导致此错误有两种常见途径:
sk-ant-api01-...)时未包含 read:compliance_user_data 作用域。sk-ant-admin01-...)。Admin API 密钥仅携带 read:compliance_activities,且无法被授予 read:compliance_user_data,因此它们无法调用聊天、文件、项目、项目附件、用户、或群组成员端点。修复: 使用在 claude.ai 中创建并选中了 read:compliance_user_data 的 Compliance Access Key。如果该请求确实只需要 Activity Feed,请改为将 Admin API 密钥指向 GET /v1/compliance/activities。
类型: permission_error
Missing required scopes. Got: ['read:compliance_user_data'] Needed: ['delete:compliance_user_data']原因: 使用了不具备 delete:compliance_user_data 的 Compliance Access Key 来调用聊天、文件或项目上的 DELETE 端点。
修复: 创建一个新的 Compliance Access Key,并选中 delete:compliance_user_data。删除作用域与 read:compliance_user_data 是分开的,这样只读审计密钥就无法删除内容。
端点已解析,但资源 ID 不存在或已被删除。Compliance API 的删除是即时且永久的,因此对先前已知 ID 返回 404 通常意味着内容已通过 Compliance API 删除调用被硬删除,或已被保留策略移除。每个修复方法中引用的活动类型字符串(例如 claude_chat_created)是您可以传递给 Activity Feed activity_types[] 过滤器的值;请参阅查询合规活动了解所有支持的值。
类型: not_found_error
Chat claude_chat_01H5CWunD7RpVJ5bHa8RCkja not found.原因: 路径中的聊天 ID 与可通过 Compliance API 读取的聊天不匹配。该聊天可能已通过先前的 Compliance API 调用被硬删除,或已被您组织的保留策略移除,或者它可能属于调用密钥无法读取的组织。用户在 claude.ai 中软删除的聊天不会返回 404;它们仍然可读,且 deleted_at 已填充。
修复: 对照最近的 claude_chat_created 或 claude_chat_viewed 活动确认聊天 ID。如果活动是最近的且读取仍然失败,则该聊天已被硬删除(通过此 API 或因保留策略到期),或属于您密钥作用域之外的组织。
类型: not_found_error
No file found with provided id, or it has already been deleted.原因: 文件 ID 不存在或已被删除。此错误适用于聊天附加文件(claude_file_...)和项目文件。
修复: 对照最近的 claude_file_uploaded 或 claude_file_deleted 活动进行核对。如果文件已被删除,则二进制内容已不存在;活动记录在 6 年保留窗口内仍保留在 feed 中。
类型: not_found_error
No project is found with the provided id.原因: 项目 ID 不存在或已被删除。
修复: 对照最近的 claude_project_created 或 claude_project_deleted 活动进行核对。即使项目本身已不存在,Activity Feed 仍会继续公开该项目的生命周期事件。
类型: not_found_error
No project document found with provided id, or it has already been deleted.原因: 项目文档 ID 不存在或已被删除。此错误适用于文本项目文档(claude_proj_doc_...),不适用于项目文件。
修复: 使用 GET /v1/compliance/apps/projects/{project_id}/attachments 列出当前附件。如果文档缺失,则它已被删除;如果您只需要元数据,可通过 claude_project_document_uploaded 活动记录来检索。
类型: not_found_error
The "ce86b5f3-7c16-48b3-a9f3-e1d2c4b8a0f1" organization does not exist or the requester is not authorized to access it.组织、角色和群组端点以标准错误格式返回 404 not_found_error。组织消息会指出 org_uuid;角色和群组消息是通用的(Role not found.、Group not found.)。当路径 ID(org_uuid、role_id 或 group_id)不存在或不再属于调用密钥可读取的树时,会发生这种情况。
原因: 路径中的 ID 与可通过 Compliance API 读取的记录不匹配。角色和群组可以被删除,组织可以从父级树中解除链接。
修复: 对照相应的列表端点验证 ID,并对照 Activity Feed 中最近的组织、角色或群组活动进行核对。
类型: not_found_error
organization `91012d09-e48b-438e-a489-1bebfd8fa6f9` not found in this organization's hierarchy原因: GET /v1/compliance/organizations/{organization_id}/settings 在三种情况下返回此 404,这三种情况有意共享相同的正文,以便响应不会泄露某个组织是否存在:organization_id 不是您的父组织所链接的组织之一、该值不是有效的 UUID,或者设置端点尚未为您的父组织启用。
修复: 对照列出组织验证 ID。如果已知有效的组织 ID 仍然返回 404,则设置端点尚未为您的父组织启用;请联系您的 Anthropic 代表。
请求格式正确且已获授权,但与资源的当前状态冲突。
类型: conflict_error
The "claude_proj_01KGp4eZNug9ri4kE35RSppq" project cannot be deleted as it has chats attached to it. Delete or detach all chats, and try deleting the project again.原因: 对仍有聊天附加的项目调用了 DELETE /v1/compliance/apps/projects/{project_id}。
修复: 使用 GET /v1/compliance/apps/chats?user_ids[]={user_id}&project_ids[]={project_id} 列出项目的聊天(project_ids[] 过滤器至少需要一个 user_ids[] 值;通过列出组织用户枚举 ID),使用 DELETE /v1/compliance/apps/chats/{claude_chat_id} 删除每一个聊天,然后重试项目删除。
对 Compliance API 的请求限制为每个父组织每分钟 600 个请求。该限制是父组织下所有密钥(Compliance Access Key 和所有已链接组织的 Admin API 密钥)以及所有 /v1/compliance/* 端点共享的单一预算。如果您的集成需要更高的限制,请联系您的 Anthropic 代表。
一旦您的 API 密钥通过身份验证,每个 Compliance API 响应都会包含标准的速率限制响应标头,以便您的客户端可以主动限流,而不是等待 429:
anthropic-ratelimit-requests-limit 是您的父组织的每分钟请求预算。anthropic-ratelimit-requests-remaining 是当前窗口中剩余的预算。anthropic-ratelimit-requests-reset 是窗口重置并恢复完整预算时的 RFC 3339 时间戳。429 响应还带有一个 retry-after 标头,其中包含发送下一个请求之前需要等待的秒数。此值可能在 anthropic-ratelimit-requests-reset 之外包含一个小的安全余量;请遵循 retry-after。
HTTP/1.1 429 Too Many Requests
date: Tue, 21 Apr 2026 14:38:02 GMT
retry-after: 25
anthropic-ratelimit-requests-limit: 600
anthropic-ratelimit-requests-remaining: 0
anthropic-ratelimit-requests-reset: 2026-04-21T14:38:25Z{
"error": {
"type": "rate_limit_error",
"message": "Compliance API rate limit of 600 requests per minute per parent organization has been exceeded. Retry after the time indicated by the retry-after header. Quote the request-id response header when contacting Anthropic support."
}
}原因: 您的父组织在 1 分钟窗口内,跨其所有密钥和已链接组织,向 /v1/compliance/* 发送了超过 600 个请求。
修复: 等待 retry-after 标头中的秒数,然后重试。如果该标头不存在(例如被中间层剥离),则回退到指数退避(从 1 秒开始,翻倍至最多 60 秒)。在收到 429 时不要推进您的分页游标:失败的请求没有返回任何数据,因此上一个成功页面的游标仍然是正确的。
身份验证失败的请求(缺失或无法识别的密钥,或使用 Claude API 密钥而非 Compliance Access Key 或 Admin API 密钥)会在速率限制器之前被拒绝,不会消耗配额。缺少端点所需作用域的有效密钥会在返回 403 之前消耗一个配额单位。
如果您按计划轮询 Activity Feed,请将您的总请求速率(跨所有密钥、已链接组织和并发工作进程)预算控制在父组织限制以下。关注 anthropic-ratelimit-requests-remaining,以便在达到限制之前减速。请参阅设计您的合规集成,了解如何在窗口轮询和游标驱动的摄取之间进行选择。
当故障是确定性的时,来自 Compliance API 的 500 会带有 x-should-retry: false 响应标头。Anthropic SDK 会自动遵循此标头。如果您使用对每个 5xx 都重试的通用 HTTP 重试库,请在 x-should-retry 为 false 时抑制重试;重试此错误在每次尝试中都会以相同方式失败。
没有 x-should-retry: false 标头的 500 是瞬时性的:使用指数退避重试(从 1 秒开始,翻倍至最多 60 秒)。这同样适用于 502、503、504 和 529 响应。请参阅错误了解平台范围的重试语义。
对于服务范围的事件,请查看 status.anthropic.com。
Was this page helpful?