이 페이지의 엔드포인트는 사용자가 Claude 앱과 에이전트(현재는 Cowork 및 Claude Code)에서 실행하는 세션의 트랜스크립트를 Claude Enterprise 조직에서 컴플라이언스 검토자에게 공개합니다. 각 세션은 Claude와의 단일 대화이며, 그 트랜스크립트는 해당 대화의 사용자 프롬프트, 어시스턴트 응답, 도구 호출 및 결과의 시퀀스입니다. 이 엔드포인트는 eDiscovery(electronic discovery, 전자 증거 개시) 내보내기와 "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.ai 웹 또는 모바일에서 시작되어 Anthropic이 관리하는 환경의 클라우드에서 실행되는 Cowork 세션 | 원격 세션 엔드포인트(/v1/compliance/apps/sessions/remote) | cowork_remote |
로컬 세션의 캡처는 조직에 Compliance API가 활성화되어 있는지에 연동되며, 사용자가 Claude Enterprise 계정으로 로그인한 동안 적용됩니다. 세션 엔드포인트는 다음을 반환하지 않습니다.
다음 표는 로컬 세션과 원격 세션의 차이점을 요약합니다.
| 로컬 세션(사용자 기기) | 원격 세션(클라우드) | |
|---|---|---|
| 엔드포인트 | /v1/compliance/apps/sessions/local 아래의 목록, 조회 및 메시지 엔드포인트 | /v1/compliance/apps/sessions/remote 아래의 목록 및 메시지 엔드포인트 |
| ID 접두사 | clls_ | cse_ |
| 목록 필터 | created_at 범위만 | 조직, 사용자 및 created_at 범위 |
| 수명 주기 필드 | 없음: status 또는 updated_at 없음 | status, updated_at |
| 보존 | 기본 6년, 또는 유한한 기간이 설정된 경우 조직의 사용자 지정 대화 보존 기간 | 6년 |
| 속도 제한 | 공유 Compliance API 제한만 | 공유 Compliance API 제한 및 두 번째 요청 예산 |
| API를 통한 삭제 | 불가 | 불가 |
로컬 세션은 사용자가 Claude Enterprise 계정으로 로그인한 동안 사용자 기기에서 실행됩니다. 현재는 Claude Desktop의 Cowork, 그리고 터미널, Claude Desktop 또는 IDE 확장 프로그램의 Claude Code가 해당됩니다.
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에 도달하지 않는 활동(예: 세션이 전송하지 않은 로컬 파일)은 캡처되지 않습니다.
고객 관리 암호화 키를 사용하는 조직에서는 로컬 세션이 평소와 같이 나열되고 조회 가능하지만, 트랜스크립트 콘텐츠는 현재 반환되지 않습니다. 각 메시지는 콘텐츠가 사용 불가로 표시된 상태로 반환됩니다(이러한 메시지가 어떻게 표시되는지는 로컬 세션 트랜스크립트 가져오기 참조).
목록 엔드포인트는 키가 읽을 수 있는 모든 연결된 조직에 대해 트랜스크립트 콘텐츠 없이 세션 메타데이터를 반환합니다. 원격 세션 목록과 달리 조직 또는 사용자 필터가 없습니다. created_at.gte 및 created_at.lt 매개변수로 결과를 시간 범위로 제한하세요. 둘 다 필수 UTC 오프셋이 포함된 RFC 3339 타임스탬프를 받으며, 둘 다 제공된 경우 created_at.lt는 created_at.gte보다 엄격하게 이후여야 하고, 그렇지 않으면 요청이 400 Bad Request를 반환합니다. 새 세션과 메시지는 짧은 처리 지연 후, 일반적으로 몇 분 이내에 결과에 나타납니다. 시작 직후에 누락된 세션이 반드시 캡처되지 않은 것은 아닙니다. 다음 요청은 지정된 날짜 이후에 생성된 세션을 나열합니다.
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"
}결과는 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에 해당합니다. 클라이언트에서 새 대화를 시작하거나 컨텍스트를 지우면 새 세션 레코드가 시작됩니다. id 값은 불투명한 문자열로 취급하세요. 형식은 예고 없이 변경될 수 있습니다.
로컬 세션에는 status와 updated_at이 없습니다. 로컬 세션에는 서버 측 수명 주기가 없으며, 대신 보존에 의해 가시성이 결정됩니다. 로컬 세션은 세션 동안 클라이언트가 수행하는 일련의 Claude API 호출(추론 호출)로 캡처되며, 보존은 캡처된 각 호출에 개별적으로 적용됩니다. created_at은 세션에서 가장 이른 보존 호출의 타임스탬프(UTC)입니다. 오래된 호출이 보존 기간을 지나면 created_at이 그에 따라 앞으로 이동하며, 세션의 모든 호출이 만료되면 해당 세션은 더 이상 반환되지 않습니다. created_at은 실행 간에 변할 수 있으므로, 시간이 지나면서 목록을 다시 순회할 때는 id로 중복을 제거하세요. 세션의 created_at은 세션이 계속되어도 더 늦은 시점으로 이동하지 않으며 updated_at도 없으므로, 처음 내보낸 후 메시지가 추가된 세션은 이후의 created_at 윈도우에 다시 나타나지 않습니다. 트랜스크립트를 최신 상태로 유지하려면, 각 실행마다 가장 오래 실행되는 세션 이상의 길이를 가진 후행 윈도우를 다시 나열하고 반환된 세션의 트랜스크립트를 다시 가져오면서 메시지를 id로 중복 제거하세요.
목록은 세션 활동 메타데이터로 구성되므로, 트랜스크립트 콘텐츠가 캡처되지 않은 세션(예: 조직에 대한 캡처가 시작되기 전에 실행된 세션, 보존 기간이 허용하는 한도까지 과거로)을 포함할 수 있습니다. 이러한 세션의 트랜스크립트는 각 메시지를 콘텐츠가 사용 불가로 표시된 상태로 반환합니다(로컬 세션 트랜스크립트 가져오기 참조).
캡처된 로컬 세션 콘텐츠는 기본적으로 캡처 시점부터 6년간 저장됩니다. 세션을 실행한 조직이 claude.ai > 조직 설정 > 데이터 및 개인정보 보호에서 유한한 사용자 지정 대화 보존 기간을 설정한 경우, 기본값보다 짧든 길든 해당 기간이 대신 적용됩니다. 조직에 둘 이상의 사용자 지정 보존 기간이 구성된 경우 가장 짧은 기간이 적용됩니다. 해당 설정의 변경은 두 가지 다른 방식으로 적용됩니다. 엔드포인트는 설정이 변경되는 즉시 조직의 현재 기간보다 오래된 활동의 반환을 중지하는 반면, 캡처된 각 메시지는 캡처 당시 적용되던 기간 동안 저장되므로, 나중에 기간을 늘려도 이미 만료된 콘텐츠는 복원되지 않습니다.
한 세션의 메타데이터를 직접 가져오려면 해당 ID를 GET /v1/compliance/apps/sessions/local/{session_id}에 전달하세요. 응답은 목록 엔드포인트가 반환하는 것과 동일한 세션 객체이며, 엔벨로프와 트랜스크립트 콘텐츠가 없습니다. 잘못된 형식의 세션 ID는 400 Bad Request를 반환합니다. 단일 404 Not Found는 응답이 구분하지 않는 네 가지 경우를 포괄합니다. 세션이 키가 읽을 수 있는 조직에 없는 경우(다른 상위 조직 아래의 세션 포함), 존재하지 않는 경우, 제로 데이터 보존이 적용되는 경우, 또는 세션의 모든 호출이 보존 기간을 지난 경우입니다.
product_surface(문자열 또는 null)는 세션을 생성한 제품을 식별합니다. Claude Desktop에서 사용자 기기에서 실행되는 Cowork 세션은 cowork, Claude Code 세션은 claude_code입니다. 지원 범위가 확장됨에 따라 새로운 값이 나타납니다.
메시지 엔드포인트는 캡처된 Claude API 호출로부터 재구성된 세션의 트랜스크립트를 반환합니다. 사용자 프롬프트, 어시스턴트 텍스트, 도구 호출, 도구 결과의 텍스트 부분이 포함되며, 크기 잘림을 제외하고 모두 전송된 그대로 반환됩니다. 해당 콘텐츠의 URL, 자격 증명 또는 개인 데이터를 마스킹하는 것은 없으므로 트랜스크립트를 민감한 정보로 취급하세요. 트랜스크립트는 다음을 생략하거나 대체합니다.
[system prompt content not shown]이라는 마커 메시지가 이를 대신합니다(일반적으로 세션당 한 번이며, 캡처된 콘텐츠가 없는 세션에는 마커가 없습니다).truncated가 true로 설정된 [<block type> content not shown](예: [image content not shown])이라는 text 블록으로 나타납니다. 도구 결과 내부의 비텍스트 항목은 하나의 [N non-text item(s) not shown] 항목으로 대체되며, 도구 결과 블록의 truncated는 true입니다.text 블록의 인용 메타데이터는 생략되며, 영향을 받은 블록은 truncated가 true로 설정됩니다.CLAUDE.md와 같은 프로젝트 지침 파일은 일반 사용자 역할 콘텐츠로 나타납니다. 스킬 콘텐츠는 클라이언트가 이를 메시지 콘텐츠로 보낼 때 나타나며 다른 사용자 텍스트와 구분되지 않습니다. 지원 범위 요약 및 Cowork와 Claude Code의 OpenTelemetry 로깅과의 비교는 Compliance API FAQ를 참조하세요.
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
}응답은 페이지가 매겨진 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 배열이 있습니다. 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 필드도 있습니다. provenance는 Claude API가 캡처한 검증된 콘텐츠의 경우 null이며, 이것이 일반적인 경우입니다. 그렇지 않으면 type이 예외를 표시하는 객체입니다.
content_unavailable은 콘텐츠를 반환할 수 없음을 의미합니다. content 배열은 비어 있으며, provenance.reason이 그 이유를 나타냅니다. not_captured는 해당 턴에 사용 가능한 콘텐츠가 없음을 의미합니다. 이는 레코드가 저장되지 않았음을 증명하지는 않습니다. 스토리지 측 액세스 정책에 의해 보류된 콘텐츠도 동일한 이유로 보고되기 때문이며(예: 고객 관리 암호화 키를 사용하는 조직), 그 외에는 캡처된 세션 내의 개별 턴도 다른 데이터 처리 이유로 사용 불가일 수 있고 동일한 이유를 가집니다. cmek_key_revoked는 조직의 고객 관리 키로 암호화된 콘텐츠에 대해 해당 키를 사용할 수 없을 때(예: 취소됨)를 위해 예약되어 있습니다. 현재는 반환되지 않으므로 향후 호환성을 위해 처리하세요. 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를 가집니다.
트랜스크립트 콘텐츠는 사용자 기기의 세션에서 설명한 보존 기간을 따릅니다. 세션의 시작 부분이 보존 기간을 지난 경우, 트랜스크립트는 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" \
--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 세션만 반환합니다.
메시지 엔드포인트는 세션의 트랜스크립트를 반환합니다. 사용자 프롬프트, 어시스턴트 응답, 도구 호출 및 결과가 포함됩니다. 사고 블록과 이미지는 포함되지 않습니다. 지원 범위 요약 및 Cowork의 OpenTelemetry 로깅과의 비교는 Compliance API FAQ를 참조하세요.
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
}응답은 페이지가 매겨진 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이며, 모든 어시스턴트 메시지에서도 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년간, 또는 유한한 기간이 설정된 경우 조직의 사용자 지정 대화 보존 기간 동안 보존됩니다. 원격 세션 트랜스크립트는 6년간 보존됩니다. 이러한 기간이 Anthropic의 다른 보존 방식과 어떻게 함께 적용되는지는 API 및 데이터 보존을 참조하세요.
동일한 Compliance Access Key로 claude.ai 채팅 콘텐츠, 파일 첨부 및 프로젝트에 액세스합니다.
세션 트랜스크립트의 지원 범위 요약 및 OpenTelemetry 로깅과의 비교.
오류 페이로드 원문과 각각에 대한 해결 방법.
Compliance API의 엔드포인트 경로, 매개변수 및 응답 스키마.
Was this page helpful?