세션 트랜스크립트 검색
사용자가 Claude Cowork 및 Claude Code와 같은 Claude 앱과 에이전트에서 실행하는 세션을 나열하고, Compliance API를 통해 해당 트랜스크립트를 검색합니다.
이 페이지의 엔드포인트는 Claude Enterprise 조직의 사용자가 Claude 앱과 에이전트(현재: Cowork, Claude Code, Claude Science, Claude for Microsoft 365, Claude in Chrome)에서 실행하는 세션의 "transcript"(트랜스크립트)를 컴플라이언스 검토자에게 제공합니다. 각 세션은 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 in Chrome(브라우저 확장 프로그램의 내장 채팅) | 로컬 세션 엔드포인트 | claude_in_chrome |
| 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 클라우드 세션. 이러한 클라우드 세션은 원격 세션과 마찬가지로 클라우드에서 실행되지만 원격 세션이 아니며, 원격 세션 엔드포인트는 Cowork 세션만 반환합니다.
- HIPAA 준비가 활성화된 조직의 Cowork 및 Claude Code 이외 제품의 로컬 세션. 해당 조직에서 로컬 세션 엔드포인트는 Cowork 및 Claude Code 세션만 반환하며, 캡처된 세션 콘텐츠는 30일 동안 저장됩니다.
- "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_surface 값 | cowork, claude_code, claude_science, claude_in_chrome 및 office_agents로 시작하는 값 | cowork_remote | 해당 없음 |
| 보존 | 기본적으로 6년, 또는 유한한 사용자 지정 대화 보존 기간이 설정된 경우 조직의 해당 기간; HIPAA 준비가 활성화된 조직에서는 30일; 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 데스크톱 앱, Claude for Microsoft 365(Excel, PowerPoint, Word, Outlook), Claude in Chrome 브라우저 확장 프로그램이 해당됩니다.
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.gte 및 created_at.lt 매개변수로 결과의 시간 범위를 제한하세요. 두 매개변수 모두 UTC 오프셋이 필수인 RFC 3339 타임스탬프를 받으며, 둘 다 제공하는 경우 created_at.lt는 created_at.gte보다 엄격하게 이후여야 합니다. 그렇지 않으면 요청이 400 Bad Request를 반환합니다. 세 번째 시간 필터인 updated_at.gte는 첫 활동 대신 마지막 활동을 기준으로 범위를 제한합니다. 이 필터는 마지막 추론 호출이 지정된 시간 이후(해당 시간 포함)인 세션을 반환하며, 정렬이나 페이지네이션을 변경하지 않고 created_at 필터와 함께 사용할 수 있습니다. 이 섹션의 뒷부분에서 설명하는 것처럼, 이전 실행 이후 활성화된 세션을 폴링하는 데 사용하세요. 새 세션과 메시지는 짧은 처리 지연(일반적으로 몇 분 이내) 후에 결과에 나타나므로, 시작 직후 누락된 세션이 반드시 캡처되지 않은 것은 아닙니다. 다음 요청은 지정된 날짜 이후에 생성된 세션을 나열합니다.
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"{
"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). 이 엔드포인트는 page 및 next_page 토큰을 사용하여 앞으로만 페이지네이션합니다(결과 페이지네이션 참조). 응답의 next_page 값을 다음 요청의 page 쿼리 매개변수로 전달하고, next_page가 null이면 중지하세요. 응답에는 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 > 조직 설정 > 데이터 및 개인정보 보호에서 유한한 사용자 지정 대화 보존 기간을 설정한 경우, 기본값보다 짧든 길든 해당 기간이 대신 적용됩니다. 조직에 둘 이상의 사용자 지정 보존 기간이 구성된 경우 가장 짧은 기간이 적용됩니다. 이 설정의 변경은 두 가지 방식으로 적용됩니다. 설정이 변경되는 즉시 엔드포인트는 조직의 현재 기간보다 오래된 활동을 반환하지 않는 반면, 캡처된 각 메시지는 캡처 당시 적용되던 기간 동안 저장되므로 나중에 기간을 늘려도 이미 만료된 콘텐츠는 복원되지 않습니다. HIPAA 준비가 활성화된 조직에서는 캡처된 로컬 세션 콘텐츠가 캡처 시점부터 30일 동안, 또는 조직의 사용자 지정 대화 보존 기간이 더 짧은 경우 해당 기간 동안 저장되며, 6년 기본값은 적용되지 않습니다.
한 세션의 메타데이터를 직접 가져오려면 해당 ID를 GET /v1/compliance/apps/sessions/local/{session_id}에 전달하세요. 응답은 목록 엔드포인트가 반환하는 것과 동일한 세션 객체이며, 엔벨로프나 트랜스크립트 콘텐츠는 없습니다. 형식이 잘못된 세션 ID는 400 Bad Request를 반환합니다. 단일 404 Not Found는 응답에서 구분되지 않는 네 가지 경우를 포괄합니다. 세션이 키가 읽을 수 있는 조직에 속하지 않는 경우(다른 상위 조직의 세션 포함), 세션이 존재하지 않는 경우, 세션에 제로 데이터 보존이 적용되는 경우, 또는 세션의 모든 호출이 보존 기간을 지난 경우입니다.
product_surface(문자열 또는 null)는 세션을 생성한 제품을 식별합니다. cowork(사용자 컴퓨터의 Claude Desktop에서 실행되는 Cowork), claude_code(Claude Code), claude_science(Claude Science), claude_in_chrome(Claude in Chrome 브라우저 확장 프로그램의 내장 채팅), 또는 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 및 기타 바이너리 또는 구조화된 블록은 반환되지 않습니다. 각각은
truncated가true로 설정된[<block type> content not shown](예:[image content not shown])이라는text블록으로 표시됩니다. 웹 검색 결과나 코드 실행 도구의 출력처럼 도구 결과 안의 텍스트가 아닌 항목은 하나의[N non-text item(s) not shown]항목으로 대체되며, 도구 결과 블록의truncated는true입니다.input에 검색 쿼리나 코드가 포함된 해당 도구 호출은 여전히 반환됩니다. - 웹 검색 결과를 활용한 답변의 출처 인용처럼
text블록의 인용 메타데이터는 생략됩니다. 텍스트 자체는 반환되며, 블록에는truncated가true로 설정됩니다.
CLAUDE.md 같은 프로젝트 지침 파일은 일반 사용자 역할 콘텐츠로 표시됩니다. 스킬 콘텐츠는 클라이언트가 메시지 콘텐츠로 전송할 때 표시되며 다른 사용자 텍스트와 구분되지 않습니다. 지원 범위 요약은 Compliance API FAQ를 참조하고, 로컬 세션을 원격 세션 및 OpenTelemetry 로깅과 비교한 표는 이 페이지의 소개 부분을 참조하세요.
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"{
"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
}응답에는 페이지네이션된 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_page가 null이 될 때까지 계속 페이지를 넘기세요. 페이지 커서는 발급된 세션 및 정렬 순서에 바인딩되며, 순회의 커서는 첫 페이지 이후 24시간이 지나면 만료됩니다. 만료된 커서는 page 매개변수 없이 다시 시작하라는 400 Bad Request를 반환하며, 다시 시작한 순회에는 현재 보존 경계가 반영됩니다. 다른 세션이나 order에 대해 발급된 커서도 유효하지 않은 커서로 간주되어 400을 반환합니다.
각 메시지에는 role(user 또는 assistant)과 text, tool_use, tool_result 블록으로 구성된 content 배열이 포함됩니다. 또한 model도 포함됩니다. Claude API에서 캡처된 어시스턴트 턴에서는 해당 턴을 처리한 모델이며, 사용자 메시지와 provenance가 설정된 모든 어시스턴트 메시지에서는 null입니다. 클라이언트가 주장한 기록과 합성 마커는 모델이 생성한 것이 아니며, 사용할 수 없는 콘텐츠의 경우 처리한 모델을 알 수 없기 때문입니다. text 블록에는 text와 truncated가 포함됩니다. tool_use 블록에는 id, name, input, truncated가 포함되며, 여기서 input은 객체가 아닌 JSON으로 인코딩된 문자열입니다. tool_result 블록에는 tool_use_id, name, is_error, text 항목으로 구성된 content 배열, truncated가 포함됩니다. MCP 도구 호출 및 결과와 대부분의 서버 도구 호출 및 결과는 동일한 tool_use 및 tool_result 형태로 정규화되며, 그 외의 블록 유형은 [<block type> content not shown] 자리 표시자로 표시됩니다. 메시지 id는 턴이 보존되는 동안 안정적으로 유지됩니다. 동일한 추론 호출에서 재구성된 모든 메시지는 해당 호출의 타임스탬프를 가지므로 연속된 메시지가 같은 created_at 값을 공유하는 경우가 많습니다. 타임스탬프로 다시 정렬하지 말고 반환된 순서를 유지하세요.
각 메시지에는 콘텐츠가 캡처된 방식을 설명하는 provenance 필드도 포함됩니다. Claude API가 캡처한 검증된 콘텐츠의 경우 provenance는 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_bytes와 tool_result_max_bytes는 각 도구 블록에서 반환되는 바이트 수를 제한하며, 둘 다 기본값은 10,000바이트입니다. 서버 최대값(문자열당 약 1 MiB)을 사용하려면 -1을 전달하세요. 0은 400 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가 포함됩니다.
Claude Science는 커넥터(MCP 서버)를 별도로 이름이 지정된 도구로 호출하지 않고 repl 도구를 통해 실행하는 코드에서 호출하므로, Claude Science 트랜스크립트에는 커넥터 이름을 딴 블록이 없습니다. 각 커넥터 호출은 repl tool_use 블록의 input 안에 있는 코드(예: host.mcp("<server>", "<tool>", ...) 호출)에 나타나며, 커넥터 출력은 해당 코드가 출력한 경우에만 대응하는 tool_result에 나타납니다. Cowork 및 Claude Code 세션은 다릅니다. 이들은 각 커넥터 도구를 고유한 mcp__<server>__<tool> 이름으로 호출하며, 이 이름이 tool_use 블록의 name입니다. Claude Science 세션에서 커넥터 사용을 모니터링하려면 도구 이름이 아니라 input 문자열을 파싱하여 그 안에 포함된 코드를 기준으로 일치시키세요. 이러한 세션에는 tool_use_input_max_bytes=-1을 전달하여, 긴 코드 입력이 커넥터 호출이 나타나기 전에 10,000바이트 기본값에서 잘리지 않고 서버 최대값까지 반환되도록 하세요.
트랜스크립트 콘텐츠는 사용자 컴퓨터의 세션에서 설명한 보존 기간을 따릅니다. 세션의 시작 부분이 보존 기간을 지난 경우, 트랜스크립트는 reason이 retention_elapsed인 단일 content_unavailable 자리 표시자로 시작하고 보존된 메시지가 그 뒤에 이어집니다. 세션의 모든 호출이 보존 기간을 지난 경우, 메시지 엔드포인트는 키가 읽을 수 없는 조직의 세션, 존재하지 않는 세션, 제로 데이터 보존이 적용되는 세션과 마찬가지로 404 Not Found를 반환합니다. 형식이 잘못된 세션 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 --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"{
"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). 이 엔드포인트는 page 및 next_page 토큰으로 페이지네이션합니다(결과 페이지네이션 참조). 응답의 next_page 값을 다음 요청의 page 쿼리 매개변수로 다시 전달하고, next_page가 null이면 중지하세요.
세션은 사용자 또는 에이전트 중 하나가 소유하며, 둘 다 소유하는 경우는 없습니다. 사용자 소유 세션의 경우 user에는 소유자의 ID와 이메일 주소가 있고(email_address는 사용자가 더 이상 키가 읽을 수 있는 조직의 구성원이 아닌 경우 null) agent_id는 null입니다. 에이전트 소유 세션(예: 예약된 작업)의 경우 user는 null이고, agent_id에는 에이전트의 ID(접두사 cagt_)가 있으며, started_by_user는 예를 들어 예약된 작업을 시작하는 등 실행을 시작한 사람을 식별합니다. 사용자 소유 세션에서 started_by_user는 null입니다.
claude_project_id는 세션이 속한 claude.ai 프로젝트의 ID(접두사 claude_proj_)이며, 세션이 프로젝트에 속하지 않은 경우 null입니다.
status는 pending, active, paused, archived 또는 failed 중 하나입니다. 세션은 프로비저닝되는 동안 pending입니다. pending 세션에는 아직 트랜스크립트가 없으며, 프로비저닝이 완료될 때까지 메시지 엔드포인트는 이에 대해 404를 반환합니다. 삭제된 세션은 반환되지 않습니다.
product_surface(문자열 또는 null)는 세션을 생성한 제품을 식별합니다. 이 엔드포인트는 현재 product_surface가 cowork_remote인 세션, 즉 claude.ai 웹 또는 모바일에서 시작된 Cowork 세션만 반환합니다.
원격 세션 트랜스크립트 검색
메시지 엔드포인트는 세션의 트랜스크립트를 반환합니다. 사용자 프롬프트, 어시스턴트 응답, 도구 호출 및 결과입니다. 사고 블록과 이미지는 포함되지 않습니다. 지원 범위 요약은 Compliance API FAQ를 참조하세요. 원격 세션을 로컬 세션 및 Cowork의 OpenTelemetry 로깅과 비교하는 표는 이 페이지의 소개를 참조하세요.
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"{
"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_page가 null이 될 때까지 계속 페이지네이션하세요.
각 메시지에는 role(user 또는 assistant)과 text, tool_use, tool_result 블록의 content 배열이 있습니다. 메시지 created_at 값은 커밋 타임스탬프입니다. 연속된 메시지가 타임스탬프를 공유하거나 약간 역전될 수 있으므로, created_at으로 다시 정렬하지 말고 반환된 순서를 유지하세요. 에이전트 소유 세션에서 sent_by_user_id는 귀속 가능한 경우 특정 사용자 메시지를 보낸 사용자를 기록합니다. 그렇지 않으면 모든 어시스턴트 메시지를 포함하여 null입니다. 메시지의 콘텐츠를 전혀 반환할 수 없는 경우(예: 크기 한도 초과) 메시지에는 content_unavailable이 true로 설정됩니다.
두 개의 매개변수가 각 도구 블록에서 반환되는 바이트 수를 제한합니다. tool_use_input_max_bytes와 tool_result_max_bytes이며, 둘 다 기본값은 10,000바이트입니다. 서버 최대값(문자열당 약 1 MiB)을 원하면 -1을 전달하세요. 0은 400 Bad Request를 반환합니다. 어느 한도에 의해 잘린 블록에는 "truncated": true가 있으며, 잘린 tool_use 입력은 더 이상 유효한 JSON이 아니므로, 잘리지 않은 블록에서만 도구 입력을 파싱하세요(또는 한도를 높이고 다시 가져오세요).
메시지 엔드포인트는 pending 세션, 존재하지 않거나 삭제된 세션, 키가 읽을 수 없는 조직의 세션에 대해 404 Not Found를 반환합니다.
보존 및 삭제
세션 엔드포인트는 읽기 전용이며, 로컬 및 원격 세션은 Compliance API를 통해 삭제할 수 없습니다. 로컬 세션 트랜스크립트는 사용자 컴퓨터의 세션에 설명된 대로 기본적으로 6년간 보존되며, 조직에서 유한한 사용자 지정 대화 보존 기간을 설정한 경우에는 해당 기간 동안, 또는 HIPAA 준비가 활성화된 조직에서는 30일 동안 보존됩니다. 원격 세션 트랜스크립트는 사용자가 그 전에 세션을 삭제하지 않는 한 6년간 보존됩니다. 사용자가 세션을 삭제하면 원격 세션 엔드포인트는 더 이상 해당 세션을 반환하지 않으며, 그 트랜스크립트는 Compliance API를 통해 복구할 수 없습니다. 이러한 기간이 Anthropic의 다른 보존 정책과 어떻게 연관되는지 알아보려면 API 및 데이터 보존을 참조하세요.
다음 단계
동일한 Compliance Access Key로 claude.ai 채팅 콘텐츠, 파일 첨부 및 프로젝트에 액세스하세요.
세션 트랜스크립트에 포함되는 내용에 대한 필드별 요약 및 기타 자주 묻는 질문입니다.
오류 페이로드 원문과 각 오류에 대한 해결 방법입니다.
Compliance API의 엔드포인트 경로, 매개변수 및 응답 스키마입니다.
Was this page helpful?