Os endpoints desta página expõem aos revisores de conformidade as transcrições das sessões que seus usuários executam em aplicativos e agentes Claude (hoje, Cowork e Claude Code) das suas organizações Claude Enterprise. Cada sessão é uma única conversa com Claude; sua transcrição é a sequência de prompts do usuário, respostas do assistente e chamadas e resultados de ferramentas nessa conversa. Os endpoints oferecem suporte a exportações de "eDiscovery" (descoberta eletrônica) e à aplicação de "data loss prevention" (prevenção contra perda de dados), ou DLP.
A Compliance API agrupa as sessões em duas famílias de endpoints de acordo com onde elas são executadas: endpoints de sessões locais para sessões nas máquinas dos usuários, e endpoints de sessões remotas para sessões executadas na nuvem em ambientes gerenciados pela Anthropic. Ambas as famílias são somente leitura, e nenhuma delas está disponível para chaves da Admin API (sk-ant-admin01-...): chamadas autenticadas com uma chave da Admin API retornam 403 Forbidden.
A tabela a seguir mapeia cada produto, e onde ele é executado, para a família de endpoints que retorna suas sessões e o valor de product_surface que as identifica nas respostas. Produtos são adicionados a esta tabela à medida que a cobertura se expande.
| Produto e onde é executado | Família de endpoints | product_surface |
|---|---|---|
| Cowork no Claude Desktop, executado na máquina do usuário | Endpoints de sessões locais (/v1/compliance/apps/sessions/local) | cowork |
| Claude Code no terminal, no Claude Desktop ou em uma extensão de IDE, executado na máquina do usuário | Endpoints de sessões locais | claude_code |
| Sessões do Cowork iniciadas no claude.ai web ou mobile, executadas na nuvem em ambientes gerenciados pela Anthropic | Endpoints de sessões remotas (/v1/compliance/apps/sessions/remote) | cowork_remote |
A captura de sessões locais está vinculada à habilitação da Compliance API para sua organização e se aplica enquanto os usuários estão conectados com sua conta Claude Enterprise. Os endpoints de sessões não retornam o seguinte:
A tabela a seguir resume como as sessões locais e as sessões remotas diferem.
| Sessões locais (nas máquinas dos usuários) | Sessões remotas (na nuvem) | |
|---|---|---|
| Endpoints | Endpoints de listagem, recuperação e mensagens em /v1/compliance/apps/sessions/local | Endpoints de listagem e mensagens em /v1/compliance/apps/sessions/remote |
| Prefixo de ID | clls_ | cse_ |
| Filtros de listagem | Apenas intervalo de created_at | Organização, usuário e intervalo de created_at |
| Campos de ciclo de vida | Nenhum: sem status nem updated_at | status, updated_at |
| Retenção | 6 anos por padrão, ou o período de retenção de conversas personalizado da sua organização quando um período finito estiver definido | 6 anos |
| Limites de taxa | Apenas o limite compartilhado da Compliance API | Limite compartilhado da Compliance API mais um segundo orçamento de requisições |
| Exclusão por meio da API | Não | Não |
As sessões locais são executadas nas máquinas dos usuários enquanto eles estão conectados com sua conta Claude Enterprise: hoje, Cowork no Claude Desktop, e Claude Code no terminal, no Claude Desktop ou em uma extensão de IDE.
A Compliance API expõe as sessões locais por meio de três endpoints: GET /v1/compliance/apps/sessions/local lista metadados de sessões, GET /v1/compliance/apps/sessions/local/{session_id} recupera os metadados de uma sessão, e GET /v1/compliance/apps/sessions/local/{session_id}/messages retorna a transcrição de uma sessão. Todos os três exigem o escopo read:compliance_user_data e contam apenas para o "rate limit" (limite de taxa) compartilhado da Compliance API; eles não estão sujeitos ao segundo orçamento de requisições que se aplica aos endpoints de sessões remotas. Consulte 429 Too Many Requests. Se as sessões locais não estiverem disponíveis para sua organização pai, todos os três endpoints retornam 404 com a mensagem Local sessions are not available. (consulte Sessão local não encontrada); enquanto as listagens de sessões ou o conteúdo capturado estiverem temporariamente indisponíveis, eles retornam 503 (consulte Sessões locais temporariamente indisponíveis).
Para sessões locais, a Anthropic registra cada conversa no lado do servidor à medida que suas requisições chegam à Claude API; nada é instalado no dispositivo, e nada é coletado além das requisições que o cliente já envia à Claude API. As transcrições de sessões locais mostram o que foi pedido ao Claude e o que ele retornou, não o que aconteceu no dispositivo. A atividade de arquivos e de rede é visível apenas por meio das chamadas de ferramentas e dos resultados de ferramentas na transcrição, portanto a atividade que nunca chega à API (por exemplo, arquivos locais que a sessão nunca enviou) não é capturada.
Em organizações que usam chaves de criptografia gerenciadas pelo cliente, as sessões locais são listadas e recuperáveis normalmente, mas o conteúdo da transcrição não é retornado atualmente; cada mensagem retorna com seu conteúdo marcado como indisponível (consulte Recuperar a transcrição de uma sessão local para saber como essas mensagens são marcadas).
O endpoint de listagem retorna metadados de sessões, sem conteúdo de transcrição, para cada organização vinculada que sua chave pode ler. Diferentemente da lista de sessões remotas, ele não tem filtros de organização ou de usuário: delimite os resultados no tempo com os parâmetros created_at.gte e created_at.lt. Ambos aceitam timestamps RFC 3339 com um deslocamento UTC obrigatório e, quando ambos são fornecidos, created_at.lt deve ser estritamente posterior a created_at.gte, ou a requisição retorna 400 Bad Request. Novas sessões e mensagens aparecem nos resultados após um curto atraso de processamento, normalmente em minutos; uma sessão ausente imediatamente após seu início não significa necessariamente que não foi capturada. A requisição a seguir lista as sessões criadas desde uma determinada data.
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/apps/sessions/local" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
--data-urlencode "created_at.gte=2026-07-01T00:00:00Z" \
--data-urlencode "limit=100"{
"data": [
{
"type": "compliance_local_session",
"id": "clls_01HxKpLmNoPqRsTuVwXyZaBc",
"organization_uuid": "9a1e0000-0000-0000-0000-000000000000",
"workspace_id": "wrkspc_01SvYKoWVRVHoEbwESNvzYdR",
"user": {
"id": "user_01GpKpLmNoPqRsTuVwXyZaBc",
"email_address": "engineer@example.com"
},
"product_surface": "cowork",
"created_at": "2026-07-09T14:02:11Z"
},
{
"type": "compliance_local_session",
"id": "clls_01HyLqMnOpQrStUvWxYzAbCd",
"organization_uuid": "9a1e0000-0000-0000-0000-000000000000",
"workspace_id": null,
"user": {
"id": "user_01HqRsTuVwXyZaBcDeFgHiJk",
"email_address": null
},
"product_surface": "claude_code",
"created_at": "2026-07-08T09:15:43Z"
}
],
"next_page": "page_AAEfQx7mPdLkq9Rt2VwHbZk"
}Os resultados são ordenados em ordem cronológica inversa (mais recentes primeiro) por created_at, com empates resolvidos em uma ordem fixa no lado do servidor, e limitados a limit resultados por resposta (padrão 100, máximo 500). O endpoint pagina apenas para frente com tokens page e next_page (consulte Paginar resultados): passe o valor next_page da resposta de volta como o parâmetro de consulta page na próxima requisição, e pare quando next_page for null. A resposta não tem campo has_more. Conclua um percurso de listagem dentro de 24 horas após iniciá-lo; um cursor de listagem mais antigo ainda é aceito, mas é reavaliado em relação ao limite de retenção atual, portanto sessões cuja atividade retida mais antiga está prestes a sair do período de retenção podem ser ignoradas.
Em cada objeto de sessão, user.id está sempre definido e sobrevive à exclusão da conta; user.email_address é null quando a conta do usuário foi excluída ou o usuário não é mais membro de uma organização que sua chave pode ler. workspace_id é null quando a sessão não estava associada a um workspace. Uma sessão local corresponde a um ID de sessão do cliente: iniciar uma nova conversa no cliente, ou limpar seu contexto, inicia um novo registro de sessão. Trate os valores de id como strings opacas; o formato pode mudar sem aviso prévio.
As sessões locais não têm status nem updated_at: uma sessão local não tem ciclo de vida no lado do servidor, e sua visibilidade é regida pela retenção. Uma sessão local é capturada como a série de chamadas à Claude API (chamadas de inferência) que o cliente faz durante a sessão, e a retenção se aplica a cada chamada capturada individualmente. created_at é o timestamp da chamada retida mais antiga da sessão (UTC). À medida que chamadas mais antigas ultrapassam o período de retenção, created_at avança de acordo e, uma vez que todas as chamadas de uma sessão tenham expirado, a sessão não é mais retornada. Como created_at pode mudar entre execuções, deduplique por id ao percorrer novamente a lista ao longo do tempo. O created_at de uma sessão não avança à medida que a sessão continua, e não há updated_at, portanto uma sessão que ganha mensagens depois que você a exporta pela primeira vez não reaparece em uma janela de created_at posterior. Para manter as transcrições atualizadas, liste novamente, em cada execução, uma janela retroativa pelo menos tão longa quanto suas sessões de maior duração e busque novamente as transcrições das sessões que ela retornar, deduplicando as mensagens por id.
A lista é construída a partir de metadados de atividade de sessões, portanto pode incluir sessões cujo conteúdo de transcrição não foi capturado, por exemplo sessões executadas antes do início da captura para sua organização (tão antigas quanto seu período de retenção permitir); a transcrição de uma sessão assim retorna cada mensagem com seu conteúdo marcado como indisponível (consulte Recuperar a transcrição de uma sessão local).
O conteúdo capturado de sessões locais é armazenado por 6 anos a partir da captura por padrão. Se a organização que executou a sessão tiver definido um período de retenção de conversas personalizado finito em claude.ai > Configurações da organização > Dados e privacidade, esse período se aplica em vez do padrão, seja ele mais curto ou mais longo; quando a organização tem mais de um período de retenção personalizado configurado, o mais curto se aplica. Uma alteração nessa configuração entra em vigor de duas maneiras diferentes: os endpoints param de retornar atividade mais antiga que o período atual da organização assim que a configuração muda, enquanto cada mensagem capturada é armazenada pelo período que estava em vigor quando foi capturada, portanto aumentar o período posteriormente não restaura conteúdo que já expirou.
Para buscar diretamente os metadados de uma sessão, passe seu ID para GET /v1/compliance/apps/sessions/local/{session_id}. A resposta é o mesmo objeto de sessão que o endpoint de listagem retorna, sem envelope e sem conteúdo de transcrição. Um ID de sessão malformado retorna 400 Bad Request. Um único 404 Not Found cobre quatro casos que a resposta não distingue: a sessão não está em uma organização que sua chave pode ler (incluindo sessões sob outra organização pai), ela não existe, a retenção zero de dados está em vigor para ela, ou todas as chamadas nela ultrapassaram a retenção.
product_surface (string ou null) identifica o produto que criou a sessão: cowork para sessões do Cowork executadas na máquina do usuário no Claude Desktop, e claude_code para sessões do Claude Code. Novos valores aparecem à medida que a cobertura se expande.
O endpoint de mensagens retorna a transcrição da sessão, reconstruída a partir das chamadas capturadas à Claude API: prompts do usuário, texto do assistente, chamadas de ferramentas e as partes de texto dos resultados de ferramentas, todos retornados como foram enviados, exceto pelo truncamento por tamanho. Nada mascara URLs, credenciais ou dados pessoais nesse conteúdo, portanto trate as transcrições como sensíveis. A transcrição omite ou substitui o seguinte:
[system prompt content not shown] o substitui (normalmente uma vez por sessão; uma sessão sem conteúdo capturado não tem marcador).text com o texto [<block type> content not shown] (por exemplo, [image content not shown]) com truncated definido como true. Itens não textuais dentro de um resultado de ferramenta são substituídos por uma entrada [N non-text item(s) not shown], e o truncated do bloco de resultado de ferramenta é true.text são omitidos, e o bloco afetado tem truncated definido como true.Arquivos de instruções de projeto, como CLAUDE.md, aparecem como conteúdo comum com role de usuário. O conteúdo de skills aparece quando o cliente o envia como conteúdo de mensagem e não é distinguido de outros textos do usuário. Para um resumo de cobertura e uma comparação com o logging OpenTelemetry para Cowork e Claude Code, consulte as Perguntas frequentes da Compliance API.
session_id="clls_01HxKpLmNoPqRsTuVwXyZaBc"
curl --fail-with-body -sS \
"https://api.anthropic.com/v1/compliance/apps/sessions/local/$session_id/messages" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY"{
"session": {
"type": "compliance_local_session",
"id": "clls_01HxKpLmNoPqRsTuVwXyZaBc",
"organization_uuid": "9a1e0000-0000-0000-0000-000000000000",
"workspace_id": "wrkspc_01SvYKoWVRVHoEbwESNvzYdR",
"user": {
"id": "user_01GpKpLmNoPqRsTuVwXyZaBc",
"email_address": null
},
"product_surface": "cowork",
"created_at": "2026-07-09T14:02:11Z"
},
"data": [
{
"type": "compliance_local_session_message",
"id": "clsm_01J4KpLmNoPqRsTuVwXyZaBa",
"role": "user",
"created_at": "2026-07-09T14:02:11Z",
"provenance": {
"type": "synthetic_marker"
},
"content": [
{
"type": "text",
"text": "[system prompt content not shown]",
"truncated": true
}
]
},
{
"type": "compliance_local_session_message",
"id": "clsm_01J4KpLmNoPqRsTuVwXyZaBc",
"role": "user",
"created_at": "2026-07-09T14:02:11Z",
"provenance": null,
"content": [
{
"type": "text",
"text": "Fix the failing test in tests/auth_test.py",
"truncated": false
}
]
},
{
"type": "compliance_local_session_message",
"id": "clsm_01J4KpLmNoPqRsTuVwXyZaBd",
"role": "assistant",
"created_at": "2026-07-09T14:02:11Z",
"provenance": null,
"content": [
{
"type": "text",
"text": "I'll read the test file first.",
"truncated": false
},
{
"type": "tool_use",
"id": "toolu_01AbCdEfGhIjKlMnOpQrSt",
"name": "Read",
"input": "{\"file_path\":\"tests/auth_test.py\"}",
"truncated": false
}
]
},
{
"type": "compliance_local_session_message",
"id": "clsm_01J4KpLmNoPqRsTuVwXyZaBe",
"role": "user",
"created_at": "2026-07-09T14:02:38Z",
"provenance": null,
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01AbCdEfGhIjKlMnOpQrSt",
"name": "Read",
"is_error": false,
"content": [
{
"type": "text",
"text": "def test_login_expiry():\n ..."
}
],
"truncated": false
}
]
},
{
"type": "compliance_local_session_message",
"id": "clsm_01J4KpLmNoPqRsTuVwXyZaBf",
"role": "assistant",
"created_at": "2026-07-09T14:02:38Z",
"provenance": null,
"content": [
{
"type": "text",
"text": "The test was asserting on a stale expiry timestamp. I've updated it.",
"truncated": false
}
]
}
],
"next_page": null
}A resposta incorpora um envelope session ao lado do array data paginado. O primeiro registro neste exemplo é o marcador que substitui o prompt do sistema da requisição; seu provenance é descrito mais adiante nesta seção. Neste endpoint, user.email_address é sempre null: o endpoint de mensagens não resolve endereços de e-mail, portanto um null aqui não significa que a conta do usuário foi excluída. Para atribuir uma sessão a um endereço de e-mail, cruze user.id com o endpoint de listagem ou com o endpoint de recuperação (GET /v1/compliance/apps/sessions/local/{session_id}).
As mensagens são retornadas da mais antiga para a mais recente por padrão; passe order=desc para inverter. A paginação usa o mesmo esquema page/next_page do endpoint de listagem, com um limit padrão de 100 e máximo de 1.000. Uma página pode terminar antes quando a resposta atinge seu limite de tamanho, portanto uma página com menos de limit mensagens não significa que você chegou ao fim; continue paginando até que next_page seja null. Os cursores de página estão vinculados à sessão e à ordem de classificação sob as quais foram emitidos, e os cursores de um percurso expiram 24 horas após sua primeira página: um cursor expirado retorna 400 Bad Request informando que você deve reiniciar sem o parâmetro page, e o percurso reiniciado reflete o limite de retenção atual. Um cursor emitido para uma sessão ou order diferente também retorna 400, como cursor inválido.
Cada mensagem tem um role (user ou assistant) e um array content de blocos text, tool_use e tool_result. Um bloco text tem text e truncated. Um bloco tool_use tem id, name, input e truncated, onde input é uma string codificada em JSON em vez de um objeto. Um bloco tool_result tem tool_use_id, name, is_error, um array content de entradas text, e truncated. Chamadas e resultados de ferramentas MCP, e a maioria das chamadas e resultados de ferramentas de servidor, são normalizados nesses mesmos formatos tool_use e tool_result; qualquer outro tipo de bloco aparece como um placeholder [<block type> content not shown]. O id de uma mensagem é estável enquanto o turno estiver retido. Toda mensagem reconstruída a partir da mesma chamada de inferência tem o timestamp dessa chamada, portanto mensagens consecutivas frequentemente compartilham um valor de created_at; preserve a ordem retornada em vez de reordenar por timestamp.
Cada mensagem também tem um campo provenance que descreve como seu conteúdo foi capturado. provenance é null para conteúdo verificado capturado pela Claude API, que é o caso comum. Caso contrário, é um objeto cujo type marca a exceção:
content_unavailable significa que o conteúdo não pode ser retornado. O array content está vazio, e provenance.reason indica o motivo. not_captured significa que nenhum conteúdo está disponível para o turno; isso não prova que nenhum registro foi armazenado, porque conteúdo retido por uma política de acesso no lado do armazenamento é reportado com o mesmo motivo (por exemplo, em organizações que usam chaves de criptografia gerenciadas pelo cliente), e turnos individuais dentro de uma sessão de outra forma capturada podem estar indisponíveis por outros motivos de tratamento de dados e ter o mesmo motivo. cmek_key_revoked é reservado para conteúdo criptografado sob a chave gerenciada pelo cliente da sua organização quando essa chave está indisponível (por exemplo, revogada); ele não é retornado atualmente, portanto trate-o para compatibilidade futura. retention_elapsed significa que o conteúdo ultrapassou a retenção. oversize significa que uma única mensagem excedeu o limite de tamanho por mensagem; a mensagem ainda é retornada, com um array content vazio.client_asserted marca mensagens do assistente que o cliente forneceu como histórico de conversa e que não puderam ser correspondidas a uma resposta capturada; sua autoria não é verificada.synthetic_marker marca registros gerados pelo próprio endpoint, como o marcador que substitui o prompt do sistema. Quando o cliente reescreve ou compacta seu histórico de conversa no meio da sessão (por exemplo, após a compactação de contexto), a transcrição insere uma mensagem marcadora nesse ponto e continua com o novo conteúdo que o cliente enviou; quando sua organização tem um período de retenção finito, o próprio histórico reescrito é retido (um segundo marcador indica isso) e apenas o turno mais recente do usuário e o que se segue são mostrados.Mensagens marcadoras e afirmadas pelo cliente começam com um bloco text explicativo entre colchetes sinalizado com truncated: true, por exemplo [system prompt content not shown]. Trate esses registros como presentes, mas indisponíveis ou não verificados, em vez de ausentes, e tolere tipos e motivos de provenance não reconhecidos.
Dois parâmetros limitam quantos bytes de cada bloco de ferramenta são retornados: tool_use_input_max_bytes e tool_result_max_bytes, ambos com padrão de 10.000 bytes. Passe -1 para o máximo do servidor (cerca de 1 MiB por string); 0 retorna 400 Bad Request, e valores acima do máximo são limitados a ele. Uma string cortada por qualquer um dos limites é cortada em um limite de caractere e recebe um sufixo em banda (por exemplo, …[truncated; pass tool_result_max_bytes=-1 for the server max]), e seu bloco tem "truncated": true. Um input de tool_use truncado, portanto, não é mais JSON válido, então analise entradas de ferramentas apenas de blocos não truncados (ou aumente o limite e busque novamente). Blocos do tipo text são sempre limitados ao mesmo máximo do servidor de cerca de 1 MiB; nenhum parâmetro o aumenta, e um bloco text no limite também tem "truncated": true.
O conteúdo da transcrição respeita o período de retenção descrito em Sessões nas máquinas dos usuários. Quando o início de uma sessão ultrapassou esse período, a transcrição começa com um único placeholder content_unavailable com reason igual a retention_elapsed, e as mensagens retidas vêm em seguida. Quando todas as chamadas de uma sessão expiraram, o endpoint de mensagens retorna 404 Not Found, assim como faz para sessões em organizações que sua chave não pode ler, sessões que não existem e sessões para as quais a retenção zero de dados está em vigor. Um ID de sessão malformado retorna 400 Bad Request.
As sessões do Cowork iniciadas no claude.ai web ou mobile são executadas na nuvem em ambientes gerenciados pela Anthropic. A Compliance API expõe essas sessões remotas por meio de dois endpoints: GET /v1/compliance/apps/sessions/remote lista metadados de sessões, e GET /v1/compliance/apps/sessions/remote/{session_id}/messages retorna a transcrição de uma sessão. Ambos exigem o escopo read:compliance_user_data, e ambos contam para o limite de taxa compartilhado da Compliance API mais um segundo orçamento de requisições específico desses endpoints; consulte 429 Too Many Requests.
O endpoint de listagem tem como padrão o escopo de toda a organização: omita organization_ids[] para incluir todas as organizações claude.ai que sua chave pode ler, ou passe até 500 valores para restringir o escopo. Para restringir a lista a usuários específicos, passe de 1 a 10 valores user_ids[] (obtenha os IDs em Listar usuários da organização); o filtro corresponde ao usuário proprietário da sessão, portanto sessões de propriedade de agentes são excluídas sempre que user_ids[] estiver definido. Delimite os resultados no tempo com parâmetros de intervalo de created_at (gte, gt, lt, lte, no formato RFC 3339). Não há filtro de updated_at. A requisição a seguir lista as sessões criadas desde uma determinada data.
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/apps/sessions/remote" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
--data-urlencode "created_at.gte=2026-06-01T00:00:00Z" \
--data-urlencode "limit=100"{
"data": [
{
"id": "cse_01WpQrStUvXyZaBcDeFgHjK6",
"organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
"user": {
"id": "user_01XyDMpzjS89pFZXqSFUBDr6",
"email_address": "user@example.com"
},
"agent_id": null,
"started_by_user": null,
"status": "active",
"created_at": "2026-07-01T17:04:05Z",
"updated_at": "2026-07-01T18:00:41Z",
"product_surface": "cowork_remote",
"claude_project_id": "claude_proj_01KGp4eZNug9ri4kE35RSppq"
},
{
"id": "cse_01TkNpRsUvWxYzAbCdEfGhJ4",
"organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
"user": null,
"agent_id": "cagt_01MnPqRsTuVwXyZaBcDeFgH8",
"started_by_user": {
"id": "user_01XyDMpzjS89pFZXqSFUBDr6",
"email_address": "user@example.com"
},
"status": "archived",
"created_at": "2026-06-28T09:15:22Z",
"updated_at": "2026-06-28T09:47:10Z",
"product_surface": "cowork_remote",
"claude_project_id": null
}
],
"next_page": "page_AAEfMk93cXpYdGxrZXk"
}Os resultados são ordenados em ordem cronológica inversa (mais recentes primeiro) por created_at e limitados a limit resultados por resposta (padrão 100, máximo 500). O endpoint pagina com tokens page e next_page (consulte Paginar resultados): passe o valor next_page da resposta de volta como o parâmetro de consulta page na próxima requisição, e pare quando next_page for null.
Uma sessão é de propriedade de um usuário ou de um agente, nunca de ambos. Para sessões de propriedade de usuários, user tem o ID e o endereço de e-mail do proprietário (email_address é null quando o usuário não é mais membro de uma organização que sua chave pode ler) e agent_id é null. Para sessões de propriedade de agentes (por exemplo, tarefas agendadas), user é null, agent_id tem o ID do agente (prefixo cagt_), e started_by_user identifica o humano que iniciou a execução, por exemplo ao iniciar uma tarefa agendada; em sessões de propriedade de usuários, started_by_user é null.
claude_project_id é o ID do projeto do claude.ai ao qual a sessão pertence (prefixo claude_proj_), ou null quando a sessão não está em um projeto.
status é um de pending, active, paused, archived ou failed. Uma sessão está pending enquanto está sendo provisionada; uma sessão pending ainda não tem transcrição, e o endpoint de mensagens retorna 404 para ela até que o provisionamento seja concluído. Sessões que foram excluídas nunca são retornadas.
product_surface (string ou null) identifica o produto que criou a sessão. O endpoint atualmente retorna apenas sessões com product_surface igual a cowork_remote: sessões do Cowork iniciadas no claude.ai web ou mobile.
O endpoint de mensagens retorna a transcrição da sessão: prompts do usuário, respostas do assistente e chamadas e resultados de ferramentas. Blocos de pensamento e imagens não são incluídos. Para um resumo de cobertura e uma comparação com o logging OpenTelemetry do Cowork, consulte as Perguntas frequentes da Compliance API.
session_id="cse_01WpQrStUvXyZaBcDeFgHjK6"
curl --fail-with-body -sS \
"https://api.anthropic.com/v1/compliance/apps/sessions/remote/$session_id/messages" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY"{
"session": {
"id": "cse_01WpQrStUvXyZaBcDeFgHjK6",
"organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
"user": {
"id": "user_01XyDMpzjS89pFZXqSFUBDr6",
"email_address": null
},
"agent_id": null,
"started_by_user": null,
"status": "active",
"created_at": "2026-07-01T17:04:05Z",
"updated_at": "2026-07-01T18:00:41Z",
"product_surface": "cowork_remote",
"claude_project_id": null
},
"data": [
{
"id": "csev_01HjKmNpQrStUvWxYzAbCdE2",
"role": "user",
"created_at": "2026-07-01T17:04:05Z",
"content": [
{
"type": "text",
"text": "Summarize the customer feedback in the attached spreadsheet.",
"truncated": false
}
],
"sent_by_user_id": null,
"content_unavailable": false
},
{
"id": "csev_01BcDeFgHjKmNpQrStUvWxY4",
"role": "assistant",
"created_at": "2026-07-01T17:04:06Z",
"content": [
{
"type": "text",
"text": "I'll start by reading the spreadsheet...",
"truncated": false
}
],
"sent_by_user_id": null,
"content_unavailable": false
}
],
"next_page": null
}A resposta incorpora um envelope session ao lado do array data paginado. Neste endpoint, o envelope sempre tem user.email_address, started_by_user e claude_project_id definidos como null; obtenha esses valores no endpoint de listagem.
As mensagens são retornadas da mais antiga para a mais recente por padrão; passe order=desc para inverter. A paginação usa o mesmo esquema page/next_page do endpoint de listagem, com um limit padrão de 100 e máximo de 1.000. Uma página pode terminar antes quando a resposta atinge seu limite de tamanho, portanto uma página com menos de limit mensagens não significa que você chegou ao fim; continue paginando até que next_page seja null.
Cada mensagem tem um role (user ou assistant) e um array content de blocos text, tool_use e tool_result. Os valores de created_at das mensagens são timestamps de commit: mensagens consecutivas podem compartilhar um timestamp ou se inverter ligeiramente, portanto preserve a ordem retornada em vez de reordenar por created_at. Em sessões de propriedade de agentes, sent_by_user_id registra o usuário que enviou uma determinada mensagem de usuário quando ela é atribuível; caso contrário, é null, inclusive em todas as mensagens do assistente. Quando o conteúdo de uma mensagem não pode ser retornado de forma alguma (por exemplo, excede os limites de tamanho), a mensagem tem content_unavailable definido como true.
Dois parâmetros limitam quantos bytes de cada bloco de ferramenta são retornados: tool_use_input_max_bytes e tool_result_max_bytes, ambos com padrão de 10.000 bytes. Passe -1 para o máximo do servidor (cerca de 1 MiB por string); 0 retorna 400 Bad Request. Um bloco cortado por qualquer um dos limites tem "truncated": true, e uma entrada de tool_use truncada não é mais JSON válido, então analise entradas de ferramentas apenas de blocos não truncados (ou aumente o limite e busque novamente).
O endpoint de mensagens retorna 404 Not Found para sessões pending, sessões que não existem ou foram excluídas, e sessões em organizações que sua chave não pode ler.
Os endpoints de sessões são somente leitura; sessões locais e remotas não podem ser excluídas por meio da Compliance API. As transcrições de sessões locais são retidas por 6 anos por padrão, ou pelo período de retenção de conversas personalizado da sua organização quando um período finito estiver definido, conforme descrito em Sessões nas máquinas dos usuários. As transcrições de sessões remotas são retidas por 6 anos. Para saber como esses períodos se relacionam com os outros acordos de retenção da Anthropic, consulte API e retenção de dados.
Acesse conteúdo de chats, anexos de arquivos e projetos do claude.ai com a mesma Compliance Access Key.
Um resumo de cobertura para transcrições de sessões e uma comparação com o logging OpenTelemetry.
Payloads de erro literais e a correção para cada um.
Caminhos de endpoints, parâmetros e esquemas de resposta da Compliance API.
Was this page helpful?