Para habilitar a Compliance API, consulte Configurar a Compliance API.
Escopo necessário: read:compliance_activities na Compliance Access Key ou na chave da Admin API.
Uma integração de produção com a Compliance API faz três escolhas de design: como ela consome o Activity Feed, como sua saída se correlaciona com seu sistema de "security information and event management" (gerenciamento de informações e eventos de segurança), ou SIEM, e onde ficam as cópias de longo prazo de atividades e conteúdo. Essas escolhas são independentes dos endpoints em si; esta página ajuda você a avaliar as compensações.
Esta página pressupõe que você leu Consultar o Activity Feed, que define os parâmetros e o contrato de paginação referenciados ao longo do texto, e Recuperar e excluir chats, arquivos e projetos, que define os endpoints de conteúdo e a semântica de deleted_at referenciados em Planeje a retenção de conteúdo.
O Activity Feed suporta dois padrões de consumo: "window polling" (sondagem por janela) periódico delimitado por created_at.gte e created_at.lt, e leituras incrementais orientadas por cursor que persistem um cursor de uma resposta e o passam na próxima requisição. Ambos retornam objetos Activity idênticos; a diferença é o estado que seu cliente persiste entre as chamadas.
Ambos os padrões compartilham estas restrições:
limit máximo para cada página é 5.000./v1/compliance/*; consulte 429 Too Many Requests para os cabeçalhos de resposta e o contrato de nova tentativa.| Padrão | Escolha quando |
|---|---|
| Window polling | Seu pipeline roda em um cronograma fixo, você prefere workers sem estado e pode tolerar reprocessar ou sobrepor janelas |
| Leituras incrementais orientadas por cursor | Você quer a menor "latency" (latência) entre uma atividade ocorrer e seu pipeline ingeri-la, quer evitar reler páginas que já esgotou e tem um local durável para persistir um cursor entre execuções |
Defina created_at.lt pelo menos 1 minuto no passado para que toda atividade na janela já esteja consultável. Use created_at.gte para o limite inferior e created_at.lt para o limite superior para que janelas consecutivas se encaixem sem lacunas ou sobreposição; reutilize o valor lt da janela anterior como o valor gte da próxima janela.
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"Quando a resposta tem has_more: true, a janela contém mais de uma página de atividades. Pagine dentro da janela passando o last_id da resposta como after_id na próxima requisição (parando quando has_more for false), ou escolha uma janela de tempo menor. Consulte Paginar resultados para o contrato completo.
Mesmo com encaixe limpo, uma atividade que é indexada depois que sua janela foi fechada nunca aparece em uma janela posterior. Desduplique pelo id da atividade e amplie cada nova janela para que ela se sobreponha à anterior por alguns minutos, ou execute uma passagem periódica de reconciliação que reconsulte uma janela mais antiga.
Um limite created_at.lt muito próximo do presente descarta silenciosa e permanentemente atividades indexadas tardiamente: uma vez que created_at.gte avança além delas, nenhuma janela posterior pode recuperá-las. Trate o valor de 1 minuto de consultabilidade como o atraso de indexação documentado, não como uma recomendação flexível.
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"Pagine até que has_more seja false, então persista o first_id da resposta final e passe-o inalterado como before_id na próxima execução para recuperar atividades mais recentes que o cursor salvo. Para percorrer na direção oposta em um backfill, persista last_id e passe-o como after_id em vez disso. Para a referência completa de cursor versus token de página e a semântica de novas tentativas, consulte Paginar resultados.
Um loop de catch-up de produção busca atividades registradas desde sua última sondagem conduzindo a iteração a partir de has_more e 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)Os cursores sobrevivem à rotação de chaves; consulte Gerenciar e rotacionar chaves.
Cada página é adjacente ao cursor que você passa: o loop caminha para frente em direção ao presente, uma página por vez. Não trate uma única resposta como atualizada enquanto has_more for true. Persista o cursor somente depois que has_more for false; as páginas não buscadas são as mais recentes entre o first_id desta resposta e o presente, e elas permanecem não lidas até que você termine o loop ou execute novamente.
Cada Activity carrega campos que você pode cruzar com eventos já presentes em seu SIEM (Splunk, Datadog, Microsoft Sentinel, Cribl ou similar):
| Campo da Compliance API | Alvo de junção |
|---|---|
actor.user_id | O identificador de usuário estável do seu provedor de identidade |
actor.email_address | E-mail do diretório quando um ID estável não está disponível |
actor.ip_address | Logs de rede, VPN e endpoint |
created_at | Correlação por janela de tempo entre qualquer fonte |
actor.user_id e actor.email_address estão presentes quando actor.type é user_actor; verifique o discriminador antes de lê-los. user_id é um identificador estável e opaco da conta do usuário: ele é consistente em todos os endpoints da Compliance API e payloads de atividade, e não muda quando o e-mail ou o nome de exibição do usuário muda. Use user_id, não email_address, como a chave de junção primária.
Chamadas à própria Compliance API emitem atividades compliance_api_accessed. Ingira-as junto com outros tipos de atividade para que seu SIEM registre quem consultou dados de compliance e quando. Passe activity_types[]=compliance_api_accessed para delimitar a consulta e, em seguida, no seu cliente, leia actor.api_key_id de cada atividade cujo actor.type seja api_actor para atribuir o acesso a uma Compliance Access Key ou chave da Admin API específica.
Três horizontes de retenção governam o que você pode recuperar posteriormente:
| Dados | Retidos por | Controlado por |
|---|---|---|
| Registros do Activity Feed | 6 anos | Anthropic |
| Conteúdo de chats, arquivos e projetos | A política de retenção do claude.ai da sua organização | Sua organização |
| Conteúdo excluído permanentemente (hard-delete) pela Compliance API | Não retido; a exclusão é imediata e permanente | Quem chama o endpoint DELETE |
Para saber como o restante da Claude Platform lida com retenção, consulte API e retenção de dados.
Decida entre exportar e arquivar ou recuperar sob demanda via API da seguinte forma:
deleted_at preenchido, mas exclusões pela Compliance API não.Em todos os outros casos, confie na recuperação direta via API e evite manter uma cópia paralela.
Trate o Activity Feed como at-least-once (pelo menos uma vez): uma travessia corretamente paginada retorna cada atividade pelo menos uma vez, mas uma nova tentativa após uma falha parcial pode reentregar atividades que você já armazenou. Desduplique pelo campo id da atividade.
Os endpoints de listagem não retornam um campo total_count nem um checksum. Para atestar que uma execução de exportação está completa, registre:
last_id terminal.request-id da página final.Os endpoints de conteúdo (chats, arquivos, projetos e anexos de projetos) servem apenas dados do claude.ai; o Activity Feed expõe eventos administrativos e de recursos em toda a organização. A Compliance API não inclui:
Consulte o FAQ da Compliance API para saber mais sobre o que a Compliance API captura e não captura.
Para a cadeia de custódia, armazene os registros exportados com metadados de proveniência: endpoint de origem, parâmetros de consulta, timestamp da execução e um hash de conteúdo de cada registro.
Parâmetros de filtro, paginação e o esquema do objeto Activity.
Os endpoints de conteúdo e de hard-delete.
Was this page helpful?