要启用 Compliance API,请参阅设置 Compliance API。
所需范围: Compliance Access Key 或 Admin API 密钥上的 read:compliance_activities。
一个生产级的 Compliance API 集成需要做出三个设计选择:如何消费 Activity Feed、其输出如何与您的"security information and event management"(安全信息和事件管理),即 SIEM 系统关联,以及活动和内容的长期副本存放在何处。这些选择与端点本身无关;本页帮助您评估其中的权衡。
本页假设您已阅读查询 Activity Feed(其中定义了全文引用的参数和分页约定)以及检索和删除聊天、文件和项目(其中定义了规划内容保留中引用的内容端点和 deleted_at 语义)。
Activity Feed 支持两种消费模式:由 created_at.gte 和 created_at.lt 界定的周期性窗口轮询,以及游标驱动的增量读取(从一个响应中持久化游标并在下一个请求中传递它)。两者返回相同的 Activity 对象;区别在于您的客户端在调用之间持久化的状态。
两种模式都受以下约束:
limit 为 5,000。/v1/compliance/* 端点共享;请参阅 429 Too Many Requests 了解响应标头和重试约定。| 模式 | 适用场景 |
|---|---|
| 窗口轮询 | 您的管道按固定计划运行,您偏好无状态工作进程,并且可以容忍重放或重叠的窗口 |
| 游标驱动的增量读取 | 您希望在活动发生与管道摄取之间实现最低延迟,希望避免重新读取已经读完的页面,并且有一个可在运行之间持久化游标的持久存储位置 |
将 created_at.lt 设置为至少 1 分钟之前,以便窗口中的每个活动都已可查询。使用 created_at.gte 作为下界,created_at.lt 作为上界,使连续的窗口无缝且不重叠地拼接;将上一个窗口的 lt 值重用为下一个窗口的 gte 值。
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/activities" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
--data-urlencode "created_at.gte=2026-04-20T07:00:00Z" \
--data-urlencode "created_at.lt=2026-04-20T08:00:00Z" \
--data-urlencode "limit=5000"当响应中 has_more: true 时,该窗口包含多于一页的活动。您可以通过在下一个请求中将响应的 last_id 作为 after_id 传递来在窗口内分页(当 has_more 为 false 时停止),或者选择更小的时间窗口。请参阅分页结果了解完整约定。
即使窗口拼接得很干净,在其窗口关闭后才被索引的活动也永远不会出现在后续窗口中。请基于活动 id 去重,并且要么将每个新窗口扩大几分钟使其与前一个窗口重叠,要么运行定期的对账流程重新查询较旧的窗口。
created_at.lt 边界过于接近当前时间会静默且永久地丢弃延迟索引的活动:一旦 created_at.gte 越过它们,后续窗口就无法再恢复它们。请将 1 分钟的可查询性数字视为文档化的索引延迟,而不是软性建议。
first_id="activity_01XyDMpzjS89pFZXqSFUBDr6" # first_id from a previous response
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/activities" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
--data-urlencode "limit=5000" \
--data-urlencode "before_id=$first_id"逐页读取直到 has_more 为 false,然后持久化最终响应中的 first_id,并在下次运行时将其原样作为 before_id 传递,以检索比已保存游标更新的活动。要反向遍历以进行回填,请持久化 last_id 并将其作为 after_id 传递。有关完整的游标与页面令牌参考以及重试语义,请参阅分页结果。
生产级的追赶循环通过基于 has_more 和 first_id 驱动迭代,来获取自上次轮询以来记录的活动:
cursor = stored_cursor
loop:
page = GET /v1/compliance/activities?before_id={cursor}&limit=5000
store(page.data)
if page.first_id is not null:
cursor = page.first_id
if not page.has_more: break
persist(cursor)游标在密钥轮换后仍然有效;请参阅管理和轮换密钥。
每一页都与您传递的游标相邻:循环朝着当前时间逐页向前推进。当 has_more 为 true 时,不要将单个响应视为已追赶完成。仅在 has_more 为 false 后才持久化游标;未获取的页面是介于此响应的 first_id 与当前时间之间的较新页面,在您完成循环或再次运行之前,它们将保持未读状态。
每个 Activity 都携带可与您的 SIEM(Splunk、Datadog、Microsoft Sentinel、Cribl 或类似系统)中已有事件进行关联的字段:
| Compliance API 字段 | 关联目标 |
|---|---|
actor.user_id | 您的身份提供商的稳定用户标识符 |
actor.email_address | 当稳定 ID 不可用时使用的目录电子邮件 |
actor.ip_address | 网络、VPN 和端点日志 |
created_at | 跨任何来源的时间窗口关联 |
当 actor.type 为 user_actor 时,actor.user_id 和 actor.email_address 才会存在;在读取它们之前请检查判别字段。user_id 是用户账户的稳定、不透明标识符:它在所有 Compliance API 端点和活动负载中保持一致,并且不会因用户的电子邮件或显示名称更改而改变。请使用 user_id 而非 email_address 作为主要关联键。
对 Compliance API 本身的调用会产生 compliance_api_accessed 活动。请将这些活动与其他活动类型一起摄取,以便您的 SIEM 记录谁在何时查询了合规数据。传递 activity_types[]=compliance_api_accessed 来限定查询范围,然后在您的客户端中,从每个 actor.type 为 api_actor 的活动中读取 actor.api_key_id,以将访问归因于特定的 Compliance Access Key 或 Admin API 密钥。
三个保留期限决定了您之后可以检索的内容:
| 数据 | 保留期限 | 控制方 |
|---|---|---|
| Activity Feed 记录 | 6 年 | Anthropic |
| 聊天、文件和项目内容 | 您组织的 claude.ai 保留策略 | 您的组织 |
| 通过 Compliance API 硬删除的内容 | 不保留;删除是即时且永久的 | DELETE 端点的调用方 |
有关 Claude Platform 其余部分如何处理保留,请参阅 API 和数据保留。
请按如下方式在"导出并归档"与"按需 API 检索"之间做出决定:
deleted_at 会被填充,但 Compliance API 的删除则不然。在所有其他情况下,请依赖直接的 API 检索,避免维护并行副本。
请将 Activity Feed 视为**至少一次(at-least-once)**交付:正确分页的遍历会至少返回每个活动一次,但部分失败后的重试可能会重新交付您已存储的活动。请基于活动的 id 字段去重。
列表端点不返回 total_count 字段或校验和。要证明某次导出运行是完整的,请记录:
last_id。request-id。内容端点(聊天、文件、项目和项目附件)仅提供 claude.ai 数据;Activity Feed 呈现整个组织范围内的管理和资源事件。Compliance API 不包括:
有关 Compliance API 捕获和不捕获哪些内容的更多信息,请参阅 Compliance API 常见问题。
为了保证监管链(chain of custody),请将导出的记录与来源元数据一起存储:源端点、查询参数、运行时间戳以及每条记录的内容哈希。
Was this page helpful?