Claude Platform Docs
AdministraçãoAPI de Compliance

Recuperar transcrições de sessões

Liste as sessões que seus usuários executam em apps e agentes do Claude, como Claude Cowork e Claude Code, e recupere suas transcrições por meio da Compliance API.

Os endpoints desta página expõem aos revisores de conformidade as transcrições das sessões que seus usuários executam em apps e agentes do Claude (atualmente: Cowork, Claude Code, Claude Science, Claude for Microsoft 365 e Claude in Chrome) de suas organizações Claude Enterprise. Cada sessão é uma única conversa com o 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 o local onde 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 de Admin API (sk-ant-admin01-...): chamadas autenticadas com uma chave de Admin API retornam 403 Forbidden.

A tabela a seguir associa cada produto, e o local onde ele é executado, à família de endpoints que retorna suas sessões e ao 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 é executadoFamília de endpointsproduct_surface
Cowork no Claude Desktop, executado na máquina do usuárioEndpoints 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árioEndpoints de sessões locaisclaude_code
App desktop do Claude Science, executado na máquina do usuárioEndpoints de sessões locaisclaude_science
Claude for Microsoft 365 (os suplementos do Claude para Excel, PowerPoint, Word e Outlook), executado nos apps desktop ou web do Microsoft 365Endpoints de sessões locaisoffice_agents/excel, office_agents/powerpoint, office_agents/word ou office_agents/outlook (office_agents quando o app não é identificado)
Claude in Chrome (o chat integrado da extensão do navegador), executado na máquina do usuárioEndpoints de sessões locaisclaude_in_chrome
Sessões do Cowork iniciadas no claude.ai web ou mobile, executadas na nuvem em ambientes gerenciados pela AnthropicEndpoints 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ão não retornam o seguinte:

  • Sessões do Claude Code autenticadas com uma chave de API do Claude Console, ou executadas por meio de uma plataforma de nuvem de terceiros, como Amazon Bedrock, Google Cloud ou Microsoft Foundry.
  • Sessões na nuvem do Claude Code, que são executadas em infraestrutura de nuvem em vez de na máquina do usuário. Essas sessões na nuvem não são sessões remotas, embora ambas sejam executadas na nuvem; os endpoints de sessões remotas retornam apenas sessões do Cowork.
  • Sessões locais de produtos diferentes de Cowork e Claude Code em organizações com prontidão para HIPAA habilitada. Nessas organizações, os endpoints de sessões locais retornam apenas sessões do Cowork e do Claude Code, e o conteúdo de sessão capturado é armazenado por 30 dias.
  • Sessões locais para as quais a "zero data retention" (retenção zero de dados), ou ZDR, está em vigor. Essas sessões são excluídas dos resultados da listagem, e os endpoints de recuperação e de mensagens retornam 404 para elas.

A Anthropic recomenda a Compliance API para recuperar o conteúdo de sessões. A tabela a seguir compara sessões locais e sessões remotas com as alternativas baseadas em OpenTelemetry disponíveis para Cowork e Claude Code: o registro em log com OpenTelemetry do Cowork e o monitoramento do Claude Code.

Sessões locais (nas máquinas dos usuários)Sessões remotas (na nuvem)Registro em log com OpenTelemetry
EntregaPull: consulta e exportação via HTTPSPull: consulta e exportação via HTTPSPush: enviado via streaming ao seu coletor OTLP
ConfiguraçãoFunciona com sua Compliance Access Key existenteFunciona com sua Compliance Access Key existenteO administrador configura um endpoint OTLP e as configurações de captura de conteúdo
InfraestruturaHospedada pela AnthropicHospedada pela AnthropicVocê executa o coletor e o armazenamento
Prefixo de IDclls_cse_N/A
Valores de product_surfacecowork, claude_code, claude_science, claude_in_chrome e valores que começam com office_agentscowork_remoteN/A
Retenção6 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; 30 dias em organizações com prontidão para HIPAA habilitada; mantido pela Anthropic6 anos, a menos que um usuário exclua a sessão antes; mantido pela AnthropicSua infraestrutura, suas políticas
Prompts do usuário e respostas do assistenteSimSimSim, sujeito às configurações de captura de conteúdo
Entradas de ferramentasTruncadas em 10.000 bytes por entrada por padrão; até cerca de 1 MiB mediante solicitaçãoTruncadas em 10.000 bytes por entrada por padrão; até cerca de 1 MiB mediante solicitaçãoResumos truncados
Conteúdo de resultados de ferramentasCada entrada de texto truncada em 10.000 bytes por padrão; até cerca de 1 MiB mediante solicitaçãoCada entrada de texto truncada em 10.000 bytes por padrão; até cerca de 1 MiB mediante solicitaçãoMetadados como tamanho e sucesso; o Claude Code também pode capturar conteúdo com uma configuração opcional e com limite de tamanho
Conteúdo de arquivosSim, por meio das chamadas de ferramentas da transcrição (somente texto; outros conteúdos aparecem como um placeholder)Sim, por meio das chamadas de ferramentas da transcrição (somente texto; outros conteúdos são omitidos)Caminhos de arquivos; o Claude Code também pode capturar conteúdos com uma configuração opcional e com limite de tamanho
Metadados de host e dispositivo (tipo de terminal, caminhos de workspace)NãoNãoSim
Uso de tokens e custoNão; disponível por meio da Claude Enterprise Analytics APINão; disponível por meio da Claude Enterprise Analytics APISim

Sessões nas máquinas dos usuários (sessões locais)

Sessões locais são executadas nas máquinas dos usuários enquanto eles estão conectados com a conta Claude Enterprise. Hoje, isso inclui:

  • Cowork no Claude Desktop.
  • Claude Code (no terminal, no Claude Desktop ou em uma extensão de IDE).
  • O app desktop do Claude Science.
  • Claude for Microsoft 365 (no Excel, PowerPoint, Word e Outlook).
  • A extensão de navegador Claude in Chrome.

A Compliance API expõe as sessões locais por meio de três endpoints:

  • GET /v1/compliance/apps/sessions/local lista os metadados das sessões.
  • GET /v1/compliance/apps/sessions/local/{session_id} recupera os metadados de uma sessão.
  • GET /v1/compliance/apps/sessions/local/{session_id}/messages retorna a transcrição de uma sessão.

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, 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 as 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 fica visível apenas por meio das chamadas e dos resultados de ferramentas na transcrição. Por isso, a atividade que nunca chega à API não é capturada, como arquivos locais que a sessão nunca enviou.

Em organizações que usam chaves de criptografia gerenciadas pelo cliente, as transcrições de sessões locais são criptografadas com sua chave gerenciada pelo cliente e retornadas normalmente. A chave pode ficar inutilizável, por exemplo, porque você a desabilitou ou revogou, ou porque ela não pode ser acessada. Enquanto isso durar, o endpoint de mensagens retorna 503 Service Unavailable para as páginas afetadas, em vez do conteúdo da transcrição. Essas mensagens nunca são relatadas como not_captured (consulte Recuperar a transcrição de uma sessão local). A listagem de sessões e a recuperação de metadados de sessões não são afetadas.

O endpoint de listagem retorna os metadados das sessões, sem conteúdo de transcrição, de todas as organizações vinculadas que sua chave pode ler. Diferentemente da lista de sessões remotas, ele não tem filtros de organização nem de usuário. Para limitar os resultados no tempo, use os parâmetros created_at.gte e created_at.lt. Ambos aceitam timestamps RFC 3339 com um deslocamento UTC obrigatório. Quando os dois são fornecidos, created_at.lt deve ser estritamente posterior a created_at.gte. Caso contrário, a requisição retorna 400 Bad Request.

Um terceiro filtro de tempo, updated_at.gte, limita os resultados pela última atividade em vez da primeira. Ele retorna as sessões cuja última chamada de inferência ocorreu no horário informado ou depois dele. Ele pode ser combinado com os filtros created_at sem alterar a ordenação nem a paginação. Use-o para consultar periodicamente as sessões ativas desde uma execução anterior, conforme descrito mais adiante nesta seção.

Novas sessões e mensagens aparecem nos resultados após um breve atraso de processamento, normalmente de alguns minutos. Uma sessão que não aparece logo após ser iniciada não necessariamente deixou de ser capturada. A requisição a seguir lista as sessões criadas a partir de uma determinada data.

cURL
curl --fail-with-body -sS -G \
  "https://api.anthropic.com/v1/compliance/apps/sessions/local" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
  --header "anthropic-version: 2023-06-01" \
  --data-urlencode "created_at.gte=2026-07-01T00:00:00Z" \
  --data-urlencode "limit=100"
Response
{
  "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",
      "updated_at": "2026-07-09T14:02:38Z"
    },
    {
      "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",
      "updated_at": "2026-07-08T09:52:10Z"
    }
  ],
  "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. Cada resposta traz no máximo limit resultados (padrão 100, máximo 500). O endpoint pagina apenas para frente, com os tokens page e next_page (consulte Paginar resultados). Passe o valor de next_page da resposta como o parâmetro de consulta page na próxima requisição, e pare quando next_page for null. A resposta não tem um campo has_more.

Conclua a varredura de uma lista em até 24 horas após iniciá-la. Um cursor de lista mais antigo ainda é aceito, mas é reavaliado em relação ao limite de retenção atual. Por isso, 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 persiste após a exclusão da conta. user.email_address é null quando a conta do usuário foi excluída ou quando 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 foi 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 o contexto dele, inicia um novo registro de sessão. Para o Claude Science, a lista também pode incluir sessões separadas para o trabalho em segundo plano do próprio app, como dar nome à conversa. Em versões mais recentes do app, isso também inclui as trilhas de revisão e de delegação. Em versões mais antigas do app, parte desse trabalho em segundo plano aparece como mensagens extras dentro da própria transcrição da conversa. Uma conversa do Claude Science que continua após certas atualizações do app aparece como duas sessões. Esses comportamentos são esperados. Trate os valores de id como strings opacas, pois o formato pode mudar sem aviso prévio.

No Claude for Microsoft 365, a exclusão de uma conversa no suplemento acontece apenas no cliente e, portanto, não se reflete na API. As sessões locais não têm um campo deleted_at, e a sessão continua listada até que a retenção a remova.

As sessões locais têm um updated_at, mas não um status. Uma sessão local não tem status de 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, e updated_at é o timestamp da última, ambos em UTC. À medida que as chamadas mais antigas ultrapassam o período de retenção, created_at avança. Quando todas as chamadas de uma sessão tiverem expirado, a sessão deixa de ser retornada. updated_at acompanha a chamada mais recente e não é afetado até esse momento. Como created_at pode mudar entre execuções, elimine duplicatas por id ao percorrer a lista novamente ao longo do tempo.

Para manter as transcrições atualizadas à medida que as sessões recebem novas mensagens, faça consultas periódicas com o filtro updated_at.gte, sobrepondo janelas consecutivas. No endpoint de listagem, updated_at é um limite inferior. Para uma sessão ainda ativa no limite de uma página ou de uma janela created_at.lt, ele pode ficar momentaneamente atrás da última atividade real da sessão. Além disso, uma nova chamada só se torna consultável após o breve atraso de processamento mencionado anteriormente.

Por causa desse atraso, defina o updated_at.gte de cada execução alguns minutos antes do horário de início da execução anterior, e não exatamente no horário da execução anterior. Um limite definido exatamente no horário anterior descarta, de forma silenciosa e permanente, uma sessão cuja chamada final ainda estava sendo indexada naquele momento. Isso acontece porque, depois que o limite ultrapassa essa chamada, nenhuma execução posterior a retorna.

Elimine duplicatas das sessões retornadas por id, busque novamente as transcrições delas e elimine duplicatas das mensagens por id. A recuperação de uma sessão, ou de suas mensagens, sempre reflete exatamente a última chamada retida. Por isso, uma execução periódica de reconciliação sobre uma janela mais antiga é uma alternativa mais completa do que ampliar a sobreposição.

A lista é construída a partir dos metadados de atividade das sessões. Por isso, ela pode incluir sessões cujo conteúdo de transcrição não foi capturado, como sessões executadas antes do início da captura para sua organização (até onde seu período de retenção permitir). A transcrição de uma sessão desse tipo retorna cada mensagem com o conteúdo marcado como indisponível (consulte Recuperar a transcrição de uma sessão local).

Por padrão, o conteúdo capturado de sessões locais é armazenado por 6 anos a partir da captura. A organização que executou a sessão pode ter definido um período de retenção de conversas personalizado e finito em claude.ai > Organization settings > Data and privacy. Nesse caso, esse período se aplica no lugar 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, aplica-se o mais curto.

Uma alteração nessa configuração tem dois efeitos diferentes:

  • Os endpoints deixam de retornar atividades mais antigas que o período atual da organização assim que a configuração é alterada.
  • Cada mensagem capturada é armazenada pelo período que estava em vigor quando ela foi capturada. Por isso, aumentar o período depois não restaura conteúdo que já expirou.

Em organizações com prontidão para HIPAA habilitada, o conteúdo capturado de sessões locais é armazenado por 30 dias a partir da captura, ou pelo período de retenção de conversas personalizado da organização, quando este for mais curto. O padrão de 6 anos não se aplica.

Para buscar diretamente os metadados de uma sessão, passe o ID dela 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 abrange 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 de outra organização pai.
  • A sessão não existe.
  • A retenção zero de dados se aplica à sessão.
  • Todas as chamadas da sessão ultrapassaram o período de retenção.

product_surface (string ou null) identifica o produto que criou a sessão. Os valores possíveis são:

  • cowork: Cowork no Claude Desktop, na máquina do usuário.
  • claude_code: Claude Code.
  • claude_science: Claude Science.
  • claude_in_chrome: o chat integrado da extensão de navegador Claude in Chrome.
  • office_agents/excel, office_agents/powerpoint, office_agents/word ou office_agents/outlook: Claude for Microsoft 365, por app. O valor é apenas office_agents quando o app não é identificado.

Novos valores aparecem à medida que a cobertura se expande.

Recuperar a transcrição de uma sessão local

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 de 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:

  • Os "thinking blocks" (blocos de pensamento) nunca são incluídos.
  • O "system prompt" (prompt do sistema) da requisição nunca é retornado. Uma mensagem marcadora com o texto [system prompt content not shown] o substitui (normalmente uma vez por sessão; uma sessão sem conteúdo capturado não contém marcador).
  • Definições de ferramentas e a configuração de servidores do "Model Context Protocol", ou MCP, não fazem parte da transcrição.
  • Imagens, PDFs e outros blocos binários ou estruturados não são retornados. Cada um aparece como um bloco text com o texto [<block type> content not shown] (por exemplo, [image content not shown]) com truncated definido como true. Itens que não são texto dentro de um resultado de ferramenta, como resultados de pesquisa na web ou a saída da ferramenta de execução de código, são substituídos por uma única entrada [N non-text item(s) not shown], e o truncated do bloco de resultado de ferramenta é true. A chamada de ferramenta correspondente, com a consulta de pesquisa ou o código em seu input, ainda é retornada.
  • Os metadados de citação em blocos text, como as citações de fontes em uma resposta baseada em resultados de pesquisa na web, são omitidos. O próprio texto é retornado, e o bloco tem truncated definido como true.

Arquivos de instruções do projeto, como CLAUDE.md, aparecem como conteúdo comum com a função de usuário. O conteúdo de skills aparece quando o cliente o envia como conteúdo de mensagem e não é diferenciado de outros textos do usuário. Para um resumo da cobertura, consulte as Perguntas frequentes sobre a Compliance API; para uma tabela que compara sessões locais com sessões remotas e com o registro em log via OpenTelemetry, consulte a introdução desta página.

cURL
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" \
  --header "anthropic-version: 2023-06-01"
Response
{
  "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",
    "updated_at": "2026-07-09T14:02:38Z"
  },
  "data": [
    {
      "type": "compliance_local_session_message",
      "id": "clsm_01J4KpLmNoPqRsTuVwXyZaBa",
      "role": "user",
      "model": null,
      "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",
      "model": null,
      "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",
      "model": "claude-opus-5-5",
      "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",
      "model": null,
      "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",
      "model": "claude-opus-5-5",
      "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 junto com o array paginado data. 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, relacione 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 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. Ela também tem um model: em um turno do assistente capturado da Claude API, esse é o modelo que atendeu o turno, e ele é null em mensagens do usuário e em qualquer mensagem do assistente cujo provenance esteja definido, porque o histórico declarado pelo cliente e os marcadores sintéticos não foram produzidos por um modelo, e o modelo que atendeu é desconhecido para conteúdo indisponível. Um bloco text contém text e truncated. Um bloco tool_use contém id, name, input e truncated, em que input é uma string codificada em JSON em vez de um objeto. Um bloco tool_result contém 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. Todas as mensagens reconstruídas a partir da mesma chamada de inferência têm 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 indica a exceção:

  • content_unavailable significa que o conteúdo não pode ser retornado. O array content está vazio, e provenance.reason informa o motivo. not_captured significa que nenhum conteúdo está disponível para o turno. Isso não prova que nenhum registro foi armazenado: o conteúdo que as políticas de tratamento de dados da Anthropic não disponibilizam para a Compliance API é relatado com o mesmo motivo, assim como turnos individuais, dentro de uma sessão capturada nos demais aspectos, que estejam indisponíveis por esses motivos. Uma chave gerenciada pelo cliente inutilizável é a única exceção e, em vez disso, retorna 503 Service Unavailable. client_aborted significa que o cliente fechou a conexão ou cancelou a requisição antes de a resposta ser concluída, portanto a resposta do turno não foi capturada; qualquer saída parcial já transmitida por streaming ao cliente não é incluída, e esse motivo se aplica apenas a turnos com a função de assistente. cmek_key_revoked é reservado para conteúdo criptografado com a chave gerenciada pelo cliente da sua organização quando essa chave está indisponível (por exemplo, revogada). Ele não é retornado atualmente, porque uma chave inutilizável produz um 503, mas trate-o para compatibilidade futura. retention_elapsed significa que o conteúdo ultrapassou o período de 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 da conversa e que não puderam ser associadas 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 e esse novo conteúdo inclui mensagens do assistente, a transcrição omite o novo conteúdo até a última mensagem do assistente, inclusive (um segundo marcador indica isso), e mostra apenas as mensagens do usuário após esse ponto, seguidas pelo restante da sessão.

Mensagens marcadoras e declaradas 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 usar o máximo do servidor (cerca de 1 MiB por string); 0 retorna 400 Bad Request, e valores acima do máximo são reduzidos a ele. Uma string cortada por qualquer um dos limites é cortada em um limite de caractere e recebe um sufixo in-band (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 um JSON válido, então analise entradas de ferramentas apenas a partir 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 Claude Science chama conectores (servidores MCP) a partir do código que executa por meio de sua ferramenta repl, e não como ferramentas nomeadas separadamente, portanto nenhum bloco em uma transcrição do Claude Science recebe o nome de um conector. Cada chamada de conector aparece no código dentro do input de um bloco tool_use de repl (por exemplo, uma chamada host.mcp("<server>", "<tool>", ...)), e a saída do conector aparece no tool_result correspondente apenas onde esse código a imprimiu. As sessões do Cowork e do Claude Code são diferentes: elas chamam cada ferramenta de conector com seu próprio nome mcp__<server>__<tool>, que é o name do bloco tool_use. Para monitorar o uso de conectores em sessões do Claude Science, analise a string input e busque correspondências no código que ela contém, e não no nome de uma ferramenta. Passe tool_use_input_max_bytes=-1 para essas sessões para que uma entrada de código longa seja retornada até o máximo do servidor, em vez de ser cortada no limite padrão de 10.000 bytes antes que a chamada do conector apareça.

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, seguido pelas mensagens retidas. Quando todas as chamadas de uma sessão tiverem expirado, 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.

Sessões na nuvem (sessões remotas)

As sessões do Cowork iniciadas no claude.ai pela web ou pelo celular 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 os metadados das sessões, e GET /v1/compliance/apps/sessions/remote/{session_id}/messages retorna o "transcript" (transcrição) de uma sessão. Ambos exigem o escopo read:compliance_user_data. Ambos também contam para o "rate limit" (limite de taxa) compartilhado da Compliance API e para um segundo orçamento de requisições específico desses endpoints; consulte 429 Too Many Requests.

Por padrão, o endpoint de listagem abrange toda a organização. Omita organization_ids[] para incluir todas as organizações do claude.ai que sua chave pode ler, ou passe até 500 valores para restringir o escopo. Para restringir a listagem a usuários específicos, passe de 1 a 10 valores de user_ids[] (obtenha os IDs em Listar usuários da organização). O filtro corresponde ao usuário proprietário da sessão, portanto as sessões pertencentes a agentes são excluídas sempre que user_ids[] estiver definido. Limite os resultados no tempo com os parâmetros de intervalo de created_at (gte, gt, lt, lte, no formato RFC 3339). Não há filtro por updated_at. A requisição a seguir lista as sessões criadas a partir de uma determinada data.

cURL
curl --fail-with-body -sS -G \
  "https://api.anthropic.com/v1/compliance/apps/sessions/remote" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
  --header "anthropic-version: 2023-06-01" \
  --data-urlencode "created_at.gte=2026-06-01T00:00:00Z" \
  --data-urlencode "limit=100"
Response
{
  "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, com no máximo limit resultados por resposta (padrão 100, máximo 500). O endpoint usa "pagination" (paginação) com os tokens page e next_page (consulte Paginar resultados). Passe o valor de next_page da resposta como o parâmetro de consulta page na próxima requisição e pare quando next_page for null.

Uma sessão pertence a um usuário ou a um agente, nunca a ambos. Nas sessões pertencentes a usuários, user contém o ID e o endereço de e-mail do proprietário, e agent_id é null. O campo email_address é null quando o usuário não é mais membro de uma organização que sua chave pode ler. Nas sessões pertencentes a agentes (por exemplo, tarefas agendadas), user é null e agent_id contém o ID do agente (prefixo cagt_). Nesse caso, started_by_user identifica a pessoa que iniciou a execução, por exemplo, ao iniciar uma tarefa agendada. Nas sessões pertencentes a 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 dos valores pending, active, paused, archived ou failed. Uma sessão fica 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 excluídas nunca são retornadas.

product_surface (string ou null) identifica o produto que criou a sessão. Atualmente, o endpoint retorna apenas sessões com product_surface igual a cowork_remote, ou seja, sessões do Cowork iniciadas no claude.ai pela web ou pelo celular.

Recuperar a transcrição de uma sessão remota

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 da cobertura, consulte as Perguntas frequentes da Compliance API. Para uma tabela que compara as sessões remotas com as sessões locais e com o registro em log via OpenTelemetry do Cowork, consulte a introdução desta página.

cURL
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" \
  --header "anthropic-version: 2023-06-01"
Response
{
  "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 junto com o array paginado data. Neste endpoint, o envelope sempre tem user.email_address, started_by_user e claude_project_id definidos como null. Obtenha esses valores pelo endpoint de listagem.

Por padrão, as mensagens são retornadas das mais antigas para as mais recentes; passe order=desc para inverter a ordem. A paginação usa o mesmo esquema page/next_page do endpoint de listagem, com 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 contém 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 o mesmo timestamp ou aparecer levemente invertidas, então preserve a ordem retornada em vez de reordenar por created_at. Em sessões pertencentes a agentes, sent_by_user_id registra o usuário que enviou uma determinada mensagem de usuário, quando for possível atribuí-la. Caso contrário, o campo é 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, porque excede os limites de tamanho), a mensagem contém 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 usar o máximo do servidor (cerca de 1 MiB por string); 0 retorna 400 Bad Request. Um bloco cortado por qualquer um desses limites contém "truncated": true. Uma entrada de tool_use truncada deixa de ser um JSON válido, portanto analise as entradas de ferramentas apenas a partir de blocos não truncados (ou aumente o limite e busque novamente).

O endpoint de mensagens retorna 404 Not Found nos seguintes casos: 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.

Retenção e exclusão

Os endpoints de sessão 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, ou por 30 dias em organizações com prontidão para HIPAA habilitada, conforme descrito em Sessões nas máquinas dos usuários. As transcrições de sessões remotas são retidas por 6 anos, a menos que um usuário exclua a sessão antes. Os endpoints de sessões remotas deixam de retornar uma sessão assim que um usuário a exclui, e sua transcrição não pode ser recuperada por meio da Compliance API. Para saber como esses períodos se relacionam com os outros acordos de retenção da Anthropic, consulte API e retenção de dados.

Próximos passos

Acesse o conteúdo de chats, os anexos de arquivos e os projetos do claude.ai com a mesma Compliance Access Key.

Um resumo, campo a campo, do que as transcrições de sessões incluem, além de outras perguntas comuns.

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?