Claude Platform Docs
관리자Compliance API

세션 트랜스크립트 검색

사용자가 Claude Cowork 및 Claude Code와 같은 Claude 앱과 에이전트에서 실행하는 세션을 나열하고, Compliance API를 통해 해당 트랜스크립트를 검색합니다.

이 페이지의 엔드포인트는 사용자가 Claude 앱과 에이전트(현재: Cowork, Claude Code, Claude Science 및 Claude for Microsoft 365)에서 실행하는 세션의 트랜스크립트를 Claude Enterprise 조직에서 컴플라이언스 검토자에게 노출합니다. 각 세션은 Claude와의 단일 대화이며, 그 트랜스크립트는 해당 대화의 사용자 프롬프트, 어시스턴트 응답, 도구 호출 및 결과의 시퀀스입니다. 이 엔드포인트는 "eDiscovery"(전자 증거 개시) 내보내기와 "data loss prevention"(데이터 손실 방지), 즉 DLP 시행을 지원합니다.

Compliance API는 세션이 실행되는 위치에 따라 세션을 두 개의 엔드포인트 계열로 그룹화합니다. 사용자 기기에서 실행되는 세션을 위한 로컬 세션 엔드포인트와, Anthropic이 관리하는 환경의 클라우드에서 실행되는 세션을 위한 원격 세션 엔드포인트입니다. 두 계열 모두 읽기 전용이며, 둘 다 Admin API 키(sk-ant-admin01-...)로는 사용할 수 없습니다. Admin API 키로 인증된 호출은 403 Forbidden을 반환합니다.

다음 표는 각 제품과 실행 위치를, 해당 세션을 반환하는 엔드포인트 계열 및 응답에서 이를 식별하는 product_surface 값에 매핑합니다. 지원 범위가 확장됨에 따라 제품이 이 표에 추가됩니다.

제품 및 실행 위치엔드포인트 계열product_surface
사용자 기기에서 실행되는 Claude Desktop의 Cowork로컬 세션 엔드포인트 (/v1/compliance/apps/sessions/local)cowork
사용자 기기에서 실행되는 터미널, Claude Desktop 또는 IDE 확장의 Claude Code로컬 세션 엔드포인트claude_code
사용자 기기에서 실행되는 Claude Science 데스크톱 앱로컬 세션 엔드포인트claude_science
Microsoft 365 데스크톱 또는 웹 앱에서 실행되는 Claude for Microsoft 365(Excel, PowerPoint, Word 및 Outlook용 Claude 추가 기능)로컬 세션 엔드포인트office_agents/excel, office_agents/powerpoint, office_agents/word 또는 office_agents/outlook (앱이 식별되지 않은 경우 office_agents)
claude.ai 웹 또는 모바일에서 시작되어 Anthropic이 관리하는 환경의 클라우드에서 실행되는 Cowork 세션원격 세션 엔드포인트 (/v1/compliance/apps/sessions/remote)cowork_remote

로컬 세션의 캡처는 조직에 Compliance API가 활성화되어 있는지에 연동되며, 사용자가 Claude Enterprise 계정으로 로그인한 동안 적용됩니다. 세션 엔드포인트는 다음을 반환하지 않습니다.

  • Claude Console API 키로 인증되었거나 Amazon Bedrock, Google Cloud 또는 Microsoft Foundry와 같은 타사 클라우드 플랫폼을 통해 실행된 Claude Code 세션.
  • 웹의 Claude Code. 이 역시 Anthropic이 관리하는 환경의 클라우드에서 실행되지만 원격 세션이 아닙니다. 원격 세션 엔드포인트는 Cowork 세션만 반환합니다.
  • HIPAA 준비가 활성화된 조직의 로컬 세션. 로컬 세션 데이터가 캡처되지 않으므로 로컬 세션 엔드포인트는 해당 조직에 대해 세션을 반환하지 않습니다.
  • zero data retention(ZDR)이 적용되는 로컬 세션. 이러한 세션은 목록 결과에서 제외되며, 검색 및 메시지 엔드포인트는 이에 대해 404를 반환합니다.

Anthropic은 세션 콘텐츠 검색에 Compliance API를 권장합니다. 다음 표는 로컬 세션원격 세션을 Cowork 및 Claude Code에서 사용할 수 있는 OpenTelemetry 기반 대안인 Cowork의 OpenTelemetry 로깅Claude Code 모니터링과 비교합니다.

로컬 세션 (사용자 기기)원격 세션 (클라우드)OpenTelemetry 로깅
전달 방식Pull: HTTPS를 통한 쿼리 및 내보내기Pull: HTTPS를 통한 쿼리 및 내보내기Push: OTLP 수집기로 스트리밍
설정기존 Compliance Access Key로 작동기존 Compliance Access Key로 작동관리자가 OTLP 엔드포인트 및 콘텐츠 캡처 설정을 구성
인프라Anthropic 호스팅Anthropic 호스팅수집기와 스토리지를 직접 운영
ID 접두사clls_cse_해당 없음
product_surfacecowork, claude_code, claude_scienceoffice_agents로 시작하는 값cowork_remote해당 없음
보존기본 6년, 또는 유한한 사용자 지정 대화 보존 기간이 설정된 경우 조직의 해당 기간. Anthropic이 보관6년, Anthropic이 보관귀사의 인프라, 귀사의 정책
사용자 프롬프트 및 어시스턴트 응답예, 콘텐츠 캡처 설정에 따름
도구 입력기본적으로 입력당 10,000바이트로 잘림. 요청 시 최대 약 1 MiB기본적으로 입력당 10,000바이트로 잘림. 요청 시 최대 약 1 MiB잘린 요약
도구 결과 콘텐츠각 텍스트 항목이 기본적으로 10,000바이트로 잘림. 요청 시 최대 약 1 MiB각 텍스트 항목이 기본적으로 10,000바이트로 잘림. 요청 시 최대 약 1 MiB크기 및 성공 여부와 같은 메타데이터. Claude Code는 선택적인 크기 제한 설정으로 콘텐츠도 캡처 가능
파일 콘텐츠예, 트랜스크립트 도구 호출을 통해 (텍스트만. 다른 콘텐츠는 플레이스홀더로 표시)예, 트랜스크립트 도구 호출을 통해 (텍스트만. 다른 콘텐츠는 생략)파일 경로. Claude Code는 선택적인 크기 제한 설정으로 콘텐츠도 캡처 가능
호스트 및 기기 메타데이터 (터미널 유형, 작업 공간 경로)아니요아니요
토큰 사용량 및 비용아니요. Claude Enterprise Analytics API를 통해 사용 가능아니요. Claude Enterprise Analytics API를 통해 사용 가능

사용자 기기의 세션 (로컬 세션)

로컬 세션은 사용자가 Claude Enterprise 계정으로 로그인한 동안 사용자 기기에서 실행됩니다. 현재는 Claude Desktop의 Cowork, Claude Code(터미널, Claude Desktop 또는 IDE 확장), Claude Science 데스크톱 앱, 그리고 Excel, PowerPoint, Word 및 Outlook의 Claude for Microsoft 365가 해당됩니다.

Compliance API는 세 개의 엔드포인트를 통해 로컬 세션을 노출합니다. GET /v1/compliance/apps/sessions/local은 세션 메타데이터를 나열하고, GET /v1/compliance/apps/sessions/local/{session_id}는 한 세션의 메타데이터를 검색하며, GET /v1/compliance/apps/sessions/local/{session_id}/messages는 한 세션의 트랜스크립트를 반환합니다. 세 엔드포인트 모두 read:compliance_user_data 범위가 필요하며 공유 Compliance API "rate limit"(속도 제한)에만 계산됩니다. 원격 세션 엔드포인트에 적용되는 두 번째 요청 예산의 대상이 아닙니다. 429 Too Many Requests를 참조하세요. 상위 조직에서 로컬 세션을 사용할 수 없는 경우 세 엔드포인트 모두 Local sessions are not available. 메시지와 함께 404를 반환합니다(로컬 세션을 찾을 수 없음 참조). 세션 목록이나 캡처된 콘텐츠를 일시적으로 사용할 수 없는 동안에는 503을 반환합니다(로컬 세션을 일시적으로 사용할 수 없음 참조).

로컬 세션의 경우 Anthropic은 각 대화의 요청이 Claude API에 도달할 때 서버 측에서 이를 기록합니다. 기기에는 아무것도 설치되지 않으며, 클라이언트가 이미 Claude API로 보내는 요청 외에는 아무것도 수집되지 않습니다. 로컬 세션 트랜스크립트는 기기에서 무슨 일이 일어났는지가 아니라 Claude에게 무엇을 요청했고 Claude가 무엇을 반환했는지를 보여줍니다. 파일 및 네트워크 활동은 트랜스크립트의 도구 호출과 도구 결과를 통해서만 볼 수 있으므로, API에 도달하지 않는 활동(예: 세션이 전송하지 않은 로컬 파일)은 캡처되지 않습니다.

고객 관리 암호화 키를 사용하는 조직에서는 로컬 세션 트랜스크립트가 귀사의 키로 암호화되어 평소와 같이 반환됩니다. 키를 사용할 수 없는 동안(예: 키를 비활성화하거나 취소했거나, 키에 도달할 수 없는 경우) 메시지 엔드포인트는 영향을 받는 페이지에 대해 트랜스크립트 콘텐츠 대신 503 Service Unavailable을 반환합니다. 이러한 메시지는 not_captured로 보고되지 않습니다(로컬 세션 트랜스크립트 검색 참조). 세션 나열 및 세션 메타데이터 검색은 영향을 받지 않습니다.

목록 엔드포인트는 키가 읽을 수 있는 모든 연결된 조직에 대해 트랜스크립트 콘텐츠 없이 세션 메타데이터를 반환합니다. 원격 세션 목록과 달리 조직 또는 사용자 필터가 없습니다. created_at.gtecreated_at.lt 매개변수로 결과를 시간 범위로 제한하세요. 둘 다 필수 UTC 오프셋이 있는 RFC 3339 타임스탬프를 받으며, 둘 다 제공된 경우 created_at.ltcreated_at.gte보다 엄격하게 이후여야 하며 그렇지 않으면 요청이 400 Bad Request를 반환합니다. 세 번째 시간 필터인 updated_at.gte는 첫 활동 대신 마지막 활동으로 제한합니다. 마지막 추론 호출이 지정된 시간 이후인 세션을 반환하며, 정렬이나 페이지네이션을 변경하지 않고 created_at 필터와 결합됩니다. 이 섹션 뒷부분에서 설명하는 대로 이전 실행 이후 활성화된 세션을 폴링하는 데 사용하세요. 새 세션과 메시지는 짧은 처리 지연 후, 일반적으로 몇 분 내에 결과에 나타납니다. 시작 직후에 누락된 세션이 반드시 캡처되지 않은 것은 아닙니다. 다음 요청은 지정된 날짜 이후에 생성된 세션을 나열합니다.

cURL
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"
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"
}

결과는 created_at 기준 역시간순(최신순)으로 정렬되며, 동일한 값은 고정된 서버 측 순서로 구분되고, 응답당 limit개의 결과로 제한됩니다(기본 100, 최대 500). 이 엔드포인트는 pagenext_page 토큰으로 앞으로만 페이지네이션합니다(결과 페이지네이션 참조). 응답의 next_page 값을 다음 요청의 page 쿼리 매개변수로 다시 전달하고, next_pagenull이면 중지하세요. 응답에는 has_more 필드가 없습니다. 목록 순회는 시작 후 24시간 이내에 완료하세요. 더 오래된 목록 커서도 여전히 허용되지만 현재 보존 경계에 대해 재평가되므로, 가장 오래된 보존 활동이 보존 기간에서 곧 만료될 세션은 건너뛸 수 있습니다.

각 세션 객체에서 user.id는 항상 설정되며 계정 삭제 후에도 유지됩니다. user.email_address는 사용자 계정이 삭제되었거나 사용자가 더 이상 키가 읽을 수 있는 조직의 구성원이 아닌 경우 null입니다. workspace_id는 세션이 작업 공간과 연결되지 않은 경우 null입니다. 로컬 세션은 하나의 클라이언트 세션 ID에 해당합니다. 클라이언트에서 새 대화를 시작하거나 컨텍스트를 지우면 새 세션 레코드가 시작됩니다. Claude Science의 경우 목록에는 앱 자체의 백그라운드 작업(예: 대화 이름 지정, 최신 앱 버전에서는 검토자 및 위임 트랙도 포함)을 위한 별도의 세션도 포함될 수 있으며, 이전 앱 버전에서는 해당 백그라운드 작업 중 일부가 대화 자체의 트랜스크립트 내에 추가 메시지로 나타납니다. 일부 앱 업데이트를 거쳐 계속되는 Claude Science 대화는 두 개의 세션으로 나타납니다. 이러한 동작은 예상된 것입니다. id 값은 불투명한 문자열로 취급하세요. 형식은 예고 없이 변경될 수 있습니다.

Claude for Microsoft 365의 경우 추가 기능에서 대화를 삭제하는 것은 클라이언트에서만 발생하므로 API에 반영되지 않습니다. 로컬 세션에는 deleted_at 필드가 없으며, 보존에 의해 제거될 때까지 세션은 계속 나열됩니다.

로컬 세션에는 updated_at이 있지만 status는 없습니다. 로컬 세션에는 서버 측 수명 주기 상태가 없으며, 대신 보존에 의해 가시성이 결정됩니다. 로컬 세션은 세션 중에 클라이언트가 수행하는 일련의 Claude API 호출(추론 호출)로 캡처되며, 보존은 캡처된 각 호출에 개별적으로 적용됩니다. created_at은 세션의 가장 이른 보존 호출의 타임스탬프이고 updated_at은 마지막 호출의 타임스탬프이며, 둘 다 UTC입니다. 오래된 호출이 보존 기간을 지나 만료되면 created_at이 그에 따라 앞으로 이동하고, 세션의 모든 호출이 만료되면 세션은 더 이상 반환되지 않습니다. updated_at은 가장 최근 호출을 추적하며 그때까지 영향을 받지 않습니다. created_at은 실행 간에 변할 수 있으므로, 시간이 지나면서 목록을 다시 순회할 때는 id로 중복을 제거하세요. 세션에 메시지가 추가됨에 따라 트랜스크립트를 최신 상태로 유지하려면 연속된 윈도우를 겹치게 하여 updated_at.gte 필터로 폴링하세요. 목록 엔드포인트에서 updated_at은 하한입니다. 페이지 또는 created_at.lt 윈도우 경계에서 여전히 활성 상태인 세션의 경우 세션의 실제 마지막 활동보다 일시적으로 뒤처질 수 있으며, 새 호출은 앞서 언급한 짧은 처리 지연 후에만 쿼리 가능해집니다. 이러한 지연 때문에 각 실행의 updated_at.gte를 이전 실행의 정확한 시작 시간이 아니라 그보다 몇 분 전으로 설정하세요. 정확한 이전 시간으로 설정된 경계는 그 순간에 마지막 호출이 아직 인덱싱 중이던 세션을 조용히 그리고 영구적으로 누락시킵니다. 경계가 해당 호출을 지나 앞으로 이동하면 이후의 어떤 실행도 이를 반환하지 않기 때문입니다. 반환된 세션을 id로 중복 제거하고, 트랜스크립트를 다시 가져오고, 메시지를 id로 중복 제거하세요. 세션 또는 그 메시지를 검색하면 항상 정확한 최신 보존 호출이 반영되므로, 이전 윈도우에 대한 주기적인 조정 실행은 겹침을 넓히는 것보다 더 철저한 대안입니다.

목록은 세션 활동 메타데이터로부터 구성되므로, 트랜스크립트 콘텐츠가 캡처되지 않은 세션(예: 조직에 대한 캡처가 시작되기 전에 실행된 세션, 보존 기간이 허용하는 한도까지)을 포함할 수 있습니다. 이러한 세션의 트랜스크립트는 각 메시지의 콘텐츠를 사용 불가로 표시하여 반환합니다(로컬 세션 트랜스크립트 검색 참조).

캡처된 로컬 세션 콘텐츠는 기본적으로 캡처 시점부터 6년간 저장됩니다. 세션을 실행한 조직이 claude.ai > 조직 설정 > 데이터 및 개인정보에서 유한한 사용자 지정 대화 보존 기간을 설정한 경우, 기본값보다 짧든 길든 해당 기간이 대신 적용됩니다. 조직에 둘 이상의 사용자 지정 보존 기간이 구성된 경우 가장 짧은 기간이 적용됩니다. 해당 설정의 변경은 두 가지 다른 방식으로 적용됩니다. 엔드포인트는 설정이 변경되는 즉시 조직의 현재 기간보다 오래된 활동의 반환을 중지하는 반면, 캡처된 각 메시지는 캡처 당시 적용되던 기간 동안 저장되므로 나중에 기간을 늘려도 이미 만료된 콘텐츠는 복원되지 않습니다.

한 세션의 메타데이터를 직접 가져오려면 해당 ID를 GET /v1/compliance/apps/sessions/local/{session_id}에 전달하세요. 응답은 목록 엔드포인트가 반환하는 것과 동일한 세션 객체이며, 엔벨로프와 트랜스크립트 콘텐츠가 없습니다. 잘못된 형식의 세션 ID는 400 Bad Request를 반환합니다. 단일 404 Not Found는 응답이 구분하지 않는 네 가지 경우를 포괄합니다. 세션이 키가 읽을 수 있는 조직에 없는 경우(다른 상위 조직 아래의 세션 포함), 존재하지 않는 경우, zero data retention이 적용되는 경우, 또는 세션의 모든 호출이 보존 기간을 지나 만료된 경우입니다.

product_surface(문자열 또는 null)는 세션을 생성한 제품을 식별합니다. cowork(사용자 기기의 Claude Desktop에 있는 Cowork), claude_code(Claude Code), claude_science(Claude Science), 또는 office_agents/excel, office_agents/powerpoint, office_agents/word, office_agents/outlook 중 하나(앱별 Claude for Microsoft 365. 앱이 식별되지 않은 경우 office_agents만)입니다. 지원 범위가 확장됨에 따라 새로운 값이 나타납니다.

로컬 세션 트랜스크립트 검색

메시지 엔드포인트는 캡처된 Claude API 호출로부터 재구성된 세션의 트랜스크립트를 반환합니다. 사용자 프롬프트, 어시스턴트 텍스트, 도구 호출 및 도구 결과의 텍스트 부분이며, 크기 잘림을 제외하고 모두 전송된 그대로 반환됩니다. 해당 콘텐츠의 URL, 자격 증명 또는 개인 데이터를 마스킹하는 것은 없으므로 트랜스크립트를 민감한 정보로 취급하세요. 트랜스크립트는 다음을 생략하거나 대체합니다.

  • 사고 블록은 포함되지 않습니다.
  • 요청의 "system prompt"(시스템 프롬프트)는 반환되지 않습니다. [system prompt content not shown]이라는 마커 메시지가 이를 대신합니다(일반적으로 세션당 한 번. 캡처된 콘텐츠가 없는 세션에는 마커가 없습니다).
  • 도구 정의 및 MCP 서버 구성은 트랜스크립트의 일부가 아닙니다.
  • 이미지, PDF 및 기타 바이너리 또는 구조화된 블록은 반환되지 않습니다. 각각은 truncatedtrue로 설정된 [<block type> content not shown](예: [image content not shown])이라는 text 블록으로 나타납니다. 웹 검색 결과나 코드 실행 도구의 출력과 같은 도구 결과 내의 비텍스트 항목은 하나의 [N non-text item(s) not shown] 항목으로 대체되며, 도구 결과 블록의 truncatedtrue입니다. 검색 쿼리나 코드가 input에 있는 일치하는 도구 호출은 여전히 반환됩니다.
  • 웹 검색 결과를 활용한 답변의 출처 인용과 같은 text 블록의 인용 메타데이터는 생략됩니다. 텍스트 자체는 반환되며, 블록에는 truncatedtrue로 설정됩니다.

CLAUDE.md와 같은 프로젝트 지침 파일은 일반 사용자 역할 콘텐츠로 나타납니다. 스킬 콘텐츠는 클라이언트가 메시지 콘텐츠로 전송할 때 나타나며 다른 사용자 텍스트와 구분되지 않습니다. 지원 범위 요약은 Compliance API FAQ를 참조하세요. 로컬 세션을 원격 세션 및 OpenTelemetry 로깅과 비교하는 표는 이 페이지의 소개를 참조하세요.

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"
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",
      "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",
      "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
}

응답은 페이지네이션된 data 배열과 함께 session 엔벨로프를 포함합니다. 이 예시의 첫 번째 레코드는 요청의 시스템 프롬프트를 대신하는 마커이며, 그 provenance는 이 섹션 뒷부분에서 설명합니다. 이 엔드포인트에서 user.email_address는 항상 null입니다. 메시지 엔드포인트는 이메일 주소를 확인하지 않으므로, 여기서 null이라고 해서 사용자 계정이 삭제되었다는 의미는 아닙니다. 세션을 이메일 주소에 귀속시키려면 user.id목록 엔드포인트 또는 검색 엔드포인트(GET /v1/compliance/apps/sessions/local/{session_id})와 조인하세요.

메시지는 기본적으로 오래된 순으로 반환됩니다. 역순으로 하려면 order=desc를 전달하세요. 페이지네이션은 목록 엔드포인트와 동일한 page/next_page 방식을 사용하며, limit 기본값은 100이고 최대값은 1,000입니다. 응답이 크기 제한에 도달하면 페이지가 일찍 끝날 수 있으므로, limit보다 적은 메시지가 있는 페이지가 끝에 도달했다는 의미는 아닙니다. next_pagenull이 될 때까지 계속 페이지네이션하세요. 페이지 커서는 발급된 세션 및 정렬 순서에 바인딩되며, 순회의 커서는 첫 페이지 이후 24시간 후에 만료됩니다. 만료된 커서는 page 매개변수 없이 다시 시작하라는 400 Bad Request를 반환하며, 다시 시작된 순회는 현재 보존 경계를 반영합니다. 다른 세션이나 order에 대해 발급된 커서도 유효하지 않은 커서로서 400을 반환합니다.

각 메시지에는 role(user 또는 assistant)과 text, tool_use, tool_result 블록의 content 배열이 있습니다. 또한 model도 있습니다. Claude API에서 캡처된 어시스턴트 턴에서는 해당 턴을 처리한 모델이며, 사용자 메시지와 provenance가 설정된 모든 어시스턴트 메시지에서는 null입니다. 클라이언트가 주장한 기록과 합성 마커는 모델이 생성한 것이 아니며, 사용 불가 콘텐츠의 경우 처리 모델을 알 수 없기 때문입니다. text 블록에는 texttruncated가 있습니다. tool_use 블록에는 id, name, input, truncated가 있으며, input은 객체가 아닌 JSON 인코딩된 문자열입니다. tool_result 블록에는 tool_use_id, name, is_error, text 항목의 content 배열, truncated가 있습니다. MCP 도구 호출 및 결과와 대부분의 서버 도구 호출 및 결과는 동일한 tool_usetool_result 형태로 정규화됩니다. 다른 모든 블록 유형은 [<block type> content not shown] 플레이스홀더로 나타납니다. 메시지 id는 턴이 보존되는 동안 안정적입니다. 동일한 추론 호출에서 재구성된 모든 메시지는 해당 호출의 타임스탬프를 가지므로 연속된 메시지가 종종 created_at 값을 공유합니다. 타임스탬프로 다시 정렬하지 말고 반환된 순서를 유지하세요.

각 메시지에는 콘텐츠가 어떻게 캡처되었는지 설명하는 provenance 필드도 있습니다. provenance는 Claude API가 캡처한 검증된 콘텐츠의 경우 null이며, 이것이 일반적인 경우입니다. 그렇지 않으면 type이 예외를 표시하는 객체입니다.

  • content_unavailable은 콘텐츠를 반환할 수 없음을 의미합니다. content 배열은 비어 있으며, provenance.reason이 이유를 나타냅니다. not_captured는 해당 턴에 사용 가능한 콘텐츠가 없음을 의미합니다. 이는 레코드가 저장되지 않았음을 증명하지 않습니다. Anthropic의 데이터 처리 정책이 Compliance API에서 보류하는 콘텐츠도 동일한 이유로 보고되며, 그 외에는 캡처된 세션 내에서 그러한 이유로 사용할 수 없는 개별 턴도 마찬가지입니다. 사용할 수 없는 고객 관리 키는 유일한 예외이며 대신 503 Service Unavailable을 반환합니다. client_aborted는 응답이 완료되기 전에 클라이언트가 연결을 닫거나 요청을 취소하여 해당 턴의 응답이 캡처되지 않았음을 의미합니다. 이미 클라이언트로 스트리밍된 부분 출력은 포함되지 않으며, 이 이유는 어시스턴트 역할 턴에만 적용됩니다. cmek_key_revoked는 조직의 고객 관리 키로 암호화된 콘텐츠에 대해 해당 키를 사용할 수 없을 때(예: 취소됨)를 위해 예약되어 있습니다. 사용할 수 없는 키는 대신 503을 생성하므로 현재는 반환되지 않지만, 상위 호환성을 위해 처리하세요. retention_elapsed는 콘텐츠가 보존 기간을 지나 만료되었음을 의미합니다. oversize는 단일 메시지가 메시지당 크기 한도를 초과했음을 의미합니다. 메시지는 빈 content 배열과 함께 여전히 반환됩니다.
  • client_asserted는 클라이언트가 대화 기록으로 제공했으며 캡처된 응답과 일치시킬 수 없었던 어시스턴트 메시지를 표시합니다. 그 작성자는 검증되지 않습니다.
  • synthetic_marker는 시스템 프롬프트를 대신하는 마커와 같이 엔드포인트 자체가 생성한 레코드를 표시합니다. 클라이언트가 세션 중간에 대화 기록을 다시 쓰거나 압축하면(예: 컨텍스트 압축 후) 트랜스크립트는 해당 지점에 마커 메시지를 삽입하고 클라이언트가 보낸 새 콘텐츠로 계속됩니다. 조직에 유한한 보존 기간이 있는 경우 다시 쓴 기록 자체는 보류되며(두 번째 마커가 이를 알림) 최신 사용자 턴과 그 이후만 표시됩니다.

마커 및 클라이언트 주장 메시지는 truncated: true로 표시된 대괄호로 묶인 설명 text 블록(예: [system prompt content not shown])으로 시작합니다. 이러한 레코드는 누락된 것이 아니라 존재하지만 사용 불가 또는 미검증인 것으로 취급하고, 인식되지 않는 provenance 유형과 이유를 허용하세요.

두 개의 매개변수가 각 도구 블록에서 반환되는 바이트 수를 제한합니다. tool_use_input_max_bytestool_result_max_bytes이며, 둘 다 기본값은 10,000바이트입니다. 서버 최대값(문자열당 약 1 MiB)을 원하면 -1을 전달하세요. 0400 Bad Request를 반환하며, 최대값을 초과하는 값은 최대값으로 고정됩니다. 어느 한도에 의해 잘린 문자열은 문자 경계에서 잘리고 인밴드 접미사가 추가되며(예: …[truncated; pass tool_result_max_bytes=-1 for the server max]), 해당 블록에는 "truncated": true가 있습니다. 따라서 잘린 tool_use input은 더 이상 유효한 JSON이 아니므로, 잘리지 않은 블록에서만 도구 입력을 파싱하세요(또는 한도를 높이고 다시 가져오세요). text 유형의 블록은 항상 약 1 MiB의 동일한 서버 최대값으로 제한됩니다. 이를 높이는 매개변수는 없으며, 한도에 도달한 text 블록에도 "truncated": true가 있습니다.

트랜스크립트 콘텐츠는 사용자 기기의 세션에서 설명한 보존 기간을 따릅니다. 세션의 시작 부분이 보존 기간을 지나 만료된 경우 트랜스크립트는 reasonretention_elapsed인 단일 content_unavailable 플레이스홀더로 시작하고, 보존된 메시지가 뒤따릅니다. 세션의 모든 호출이 만료된 경우 메시지 엔드포인트는 404 Not Found를 반환하며, 이는 키가 읽을 수 없는 조직의 세션, 존재하지 않는 세션, zero data retention이 적용되는 세션에 대해서도 마찬가지입니다. 잘못된 형식의 세션 ID는 400 Bad Request를 반환합니다.

클라우드의 세션 (원격 세션)

claude.ai 웹 또는 모바일에서 시작된 Cowork 세션은 Anthropic이 관리하는 환경의 클라우드에서 실행됩니다. Compliance API는 두 개의 엔드포인트를 통해 이러한 원격 세션을 노출합니다. GET /v1/compliance/apps/sessions/remote는 세션 메타데이터를 나열하고, GET /v1/compliance/apps/sessions/remote/{session_id}/messages는 한 세션의 트랜스크립트를 반환합니다. 둘 다 read:compliance_user_data 범위가 필요하며, 둘 다 공유 Compliance API 속도 제한과 이 엔드포인트에 특정한 두 번째 요청 예산에 계산됩니다. 429 Too Many Requests를 참조하세요.

목록 엔드포인트는 기본적으로 조직 전체 범위입니다. 키가 읽을 수 있는 모든 claude.ai 조직을 포함하려면 organization_ids[]를 생략하고, 범위를 좁히려면 최대 500개의 값을 전달하세요. 대신 특정 사용자로 목록 범위를 지정하려면 1~10개의 user_ids[] 값을 전달하세요(ID는 조직 사용자 나열에서 얻습니다). 이 필터는 세션의 소유 사용자와 일치하므로 user_ids[]가 설정되면 에이전트 소유 세션은 제외됩니다. created_at 범위 매개변수(gte, gt, lt, lte, RFC 3339 형식)로 결과를 시간 범위로 제한하세요. updated_at 필터는 없습니다. 다음 요청은 지정된 날짜 이후에 생성된 세션을 나열합니다.

cURL
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"
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"
}

결과는 created_at 기준 역시간순(최신순)으로 정렬되며 응답당 limit개의 결과로 제한됩니다(기본 100, 최대 500). 이 엔드포인트는 pagenext_page 토큰으로 페이지네이션합니다(결과 페이지네이션 참조). 응답의 next_page 값을 다음 요청의 page 쿼리 매개변수로 다시 전달하고, next_pagenull이면 중지하세요.

세션은 사용자 또는 에이전트 중 하나가 소유하며, 둘 다 소유하는 경우는 없습니다. 사용자 소유 세션의 경우 user에는 소유자의 ID와 이메일 주소가 있고(email_address는 사용자가 더 이상 키가 읽을 수 있는 조직의 구성원이 아닌 경우 null) agent_idnull입니다. 에이전트 소유 세션(예: 예약된 작업)의 경우 usernull이고, agent_id에는 에이전트의 ID(접두사 cagt_)가 있으며, started_by_user는 예를 들어 예약된 작업을 시작하는 등 실행을 시작한 사람을 식별합니다. 사용자 소유 세션에서 started_by_usernull입니다.

claude_project_id는 세션이 속한 claude.ai 프로젝트의 ID(접두사 claude_proj_)이며, 세션이 프로젝트에 속하지 않은 경우 null입니다.

statuspending, active, paused, archived 또는 failed 중 하나입니다. 세션은 프로비저닝되는 동안 pending입니다. pending 세션에는 아직 트랜스크립트가 없으며, 프로비저닝이 완료될 때까지 메시지 엔드포인트는 이에 대해 404를 반환합니다. 삭제된 세션은 반환되지 않습니다.

product_surface(문자열 또는 null)는 세션을 생성한 제품을 식별합니다. 이 엔드포인트는 현재 product_surfacecowork_remote인 세션, 즉 claude.ai 웹 또는 모바일에서 시작된 Cowork 세션만 반환합니다.

원격 세션 트랜스크립트 검색

메시지 엔드포인트는 세션의 트랜스크립트를 반환합니다. 사용자 프롬프트, 어시스턴트 응답, 도구 호출 및 결과입니다. 사고 블록과 이미지는 포함되지 않습니다. 지원 범위 요약은 Compliance API FAQ를 참조하세요. 원격 세션을 로컬 세션 및 Cowork의 OpenTelemetry 로깅과 비교하는 표는 이 페이지의 소개를 참조하세요.

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"
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
}

응답은 페이지네이션된 data 배열과 함께 session 엔벨로프를 포함합니다. 이 엔드포인트에서 엔벨로프의 user.email_address, started_by_user, claude_project_id는 항상 null로 설정됩니다. 해당 값은 대신 목록 엔드포인트에서 가져오세요.

메시지는 기본적으로 오래된 순으로 반환됩니다. 역순으로 하려면 order=desc를 전달하세요. 페이지네이션은 목록 엔드포인트와 동일한 page/next_page 방식을 사용하며, limit 기본값은 100이고 최대값은 1,000입니다. 응답이 크기 제한에 도달하면 페이지가 일찍 끝날 수 있으므로, limit보다 적은 메시지가 있는 페이지가 끝에 도달했다는 의미는 아닙니다. next_pagenull이 될 때까지 계속 페이지네이션하세요.

각 메시지에는 role(user 또는 assistant)과 text, tool_use, tool_result 블록의 content 배열이 있습니다. 메시지 created_at 값은 커밋 타임스탬프입니다. 연속된 메시지가 타임스탬프를 공유하거나 약간 역전될 수 있으므로, created_at으로 다시 정렬하지 말고 반환된 순서를 유지하세요. 에이전트 소유 세션에서 sent_by_user_id는 귀속 가능한 경우 특정 사용자 메시지를 보낸 사용자를 기록합니다. 그렇지 않으면 모든 어시스턴트 메시지를 포함하여 null입니다. 메시지의 콘텐츠를 전혀 반환할 수 없는 경우(예: 크기 한도 초과) 메시지에는 content_unavailabletrue로 설정됩니다.

두 개의 매개변수가 각 도구 블록에서 반환되는 바이트 수를 제한합니다. tool_use_input_max_bytestool_result_max_bytes이며, 둘 다 기본값은 10,000바이트입니다. 서버 최대값(문자열당 약 1 MiB)을 원하면 -1을 전달하세요. 0400 Bad Request를 반환합니다. 어느 한도에 의해 잘린 블록에는 "truncated": true가 있으며, 잘린 tool_use 입력은 더 이상 유효한 JSON이 아니므로, 잘리지 않은 블록에서만 도구 입력을 파싱하세요(또는 한도를 높이고 다시 가져오세요).

메시지 엔드포인트는 pending 세션, 존재하지 않거나 삭제된 세션, 키가 읽을 수 없는 조직의 세션에 대해 404 Not Found를 반환합니다.

보존 및 삭제

세션 엔드포인트는 읽기 전용이며, 로컬 및 원격 세션은 Compliance API를 통해 삭제할 수 없습니다. 로컬 세션 트랜스크립트는 기본적으로 6년 동안 보존되며, 조직에서 유한한 사용자 지정 대화 보존 기간을 설정한 경우에는 사용자 머신의 세션에 설명된 대로 해당 기간 동안 보존됩니다. 원격 세션 트랜스크립트는 6년 동안 보존됩니다. 이러한 기간이 Anthropic의 다른 보존 정책과 어떻게 함께 적용되는지 알아보려면 API 및 데이터 보존을 참조하세요.

다음 단계

동일한 Compliance Access Key로 claude.ai 채팅 콘텐츠, 파일 첨부 및 프로젝트에 액세스하세요.

세션 트랜스크립트에 포함되는 내용에 대한 필드별 요약 및 기타 자주 묻는 질문입니다.

오류 페이로드 원문과 각 오류에 대한 해결 방법입니다.

Compliance API의 엔드포인트 경로, 매개변수 및 응답 스키마입니다.

Was this page helpful?