활동 피드(Activity Feed) 조회하기
활동 피드(Activity Feed) 조회하기
이 페이지는 조직의 Compliance API Activity Feed를 조회·필터링·페이지네이션하는 방법을 설명해 드릴게요.
Compliance API를 활성화하려면 Compliance API 설정을 참고하세요.
필요한 범위: Compliance Access Key 또는 Admin API 키의
read:compliance_activities.이 범위를 가진 Compliance Access Key(
sk-...)와 Admin API 키(sk-...) 모두 Activity Feed를 호출할 수 있어요. 각 키 유형이 범위를 담는 조건은 Compliance API 설정을 참고하세요.
Activity Feed는 조직 전반의 인증, 채팅, 파일, 프로젝트, 관리, 플랫폼 활동을 기록하고 역시간순으로 반환해요. 활동은 발생 후 1분 이내에 조회할 수 있고 6년 동안 보존돼요. 기록은 소급되지 않아요. 조직에 Compliance API가 처음 활성화된 시점부터 시작되며, 활성화 이전의 활동은 백필되지 않아요.
출처: 문서
본문
curl --fail-with-body -sS \
"https://api.anthropic.com/v1/compliance/activities?limit=1" \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01"
{
"data": [
{
"id": "activity_01XyDMpzjS89pFZXqSFUBDr6",
"created_at": "2026-04-10T08:09:10Z",
"organization_id": "org_01Wv6QeBcDfGhJkLmNpQrSt8",
"organization_uuid": "abcdef01-2345-6789-abcd-ef0123456789",
"actor": {
"type": "user_actor",
"email_address": "[email protected]",
"user_id": "user_01TuVwXyZaBcDeFgH2JkLmN4",
"ip_address": "192.0.2.34",
"user_agent": "Mozilla/5.0..."
},
"type": "claude_chat_created",
"claude_chat_id": "claude_chat_01XyDMpzjS89pFZXqSFUBDr6",
"claude_project_id": "claude_proj_01KGp4eZNug9ri4kE35RSppq"
}
],
"has_more": true,
"first_id": "activity_01XyDMpzjS89pFZXqSFUBDr6",
"last_id": "activity_01XyDMpzjS89pFZXqSFUBDr6"
}
활동 필터링
점으로 구분된 하위 매개변수 created_at.gte, .gt, .lte, .lt로 조직, actor, 활동 유형, created_at 시간 창으로 필터링할 수 있어요. 각 매개변수의 유형과 허용 값은 API 참조를 참고하세요.
반복 가능한 매개변수는 배열 괄호 쿼리 구문을 사용해요. 값마다 activity_types[]=..., actor_ids[]=..., organization_ids[]=...을 한 번씩 전달하세요.
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/activities" \
--data-urlencode "activity_types[]=claude_file_uploaded" \
--data-urlencode "activity_types[]=claude_chat_created" \
--data-urlencode "created_at.gte=2026-04-01T00:00:00Z" \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01"
Activity Feed는 수백 가지의 개별 활동 유형을 만들어요. activity_types[]가 허용하는 전체 값 목록은 API 참조의 Compliance 활동 조회를 참고하세요.
결과 페이지네이션
활동은 최신순으로 반환되며, created_at이 같으면 활동 ID로 순서가 결정되고, 각 응답은 limit 결과로 제한돼요(기본 100, 최대 5,000). 전체 응답 스키마는 API 참조를 참고하세요.
Compliance API는 엔드포인트 패밀리에 따라 두 가지 페이지네이션 방식을 사용해요:
| 엔드포인트 패밀리 | 정렬 순서 | 방식 | 매개변수 |
|---|---|---|---|
| 활동 | 최신순 | 커서 | after_id, before_id(first_id, last_id로 반환) |
| 채팅과 채팅 메시지 | 오래된 것부터 | 커서 | after_id, before_id(first_id, last_id로 반환) |
| 조직, 프로젝트, 프로젝트 첨부, 사용자, 역할, 역할 권한, 그룹, 그룹 구성원 | 엔드포인트별 | 페이지 토큰 | page(next_page로 반환) |
| 로컬·원격 세션 및 세션 메시지 | 세션은 최신순, 메시지는 기본적으로 오래된 것부터 | 페이지 토큰 | page(next_page로 반환) |
파일은 페이지네이션하지 않아요. ID별로 개별 조회해요.
페이지네이션 커서와 페이지 토큰은 불투명 문자열이에요. 변경 없이 그대로 다시 전달하세요. 내부 형식은 안정적이지 않으며, 파싱하면 예고 없이 깨질 수 있어요. 각 요청에서 after_id와 before_id 중 하나만 설정할 수 있고, 두 방식 모두 언제 멈출지 알 수 있게 has_more를 반환해요. 세션 엔드포인트(로컬·원격)는 예외로, has_more 없이 next_page를 반환하므로 next_page가 null일 때 멈추면 돼요.
활동을 페이지네이션하려면:
- 결과 순서에서 다음 페이지로 나아가려면 응답의
last_id를after_id로 전달하세요. 활동이 최신순으로 정렬되므로 다음 페이지는 더 오래된 항목을 담아요. - 이전 페이지로 돌아가려면
first_id를before_id로 전달하세요. has_more가false일 때 멈추세요.
커서 매개변수는 페이지 방향을 설정하고, 엔드포인트의 정렬 순서는 시간 방향을 설정해요. 여기서 같은 after_id 매개변수는 더 오래된 활동에 도달해요. 채팅은 오래된 것부터 정렬돼요. 커서 의미는 채팅·파일·프로젝트 조회 및 삭제를 참고하세요.
커서는 재시도 시 재사용해도 안전해요. 성공적으로 반환된 페이지의 커서나 페이지 토큰은 유효한 상태로 남아 있어요. 실패한 요청(5xx, 시간 초과, 네트워크 오류)은 위치를 전진시키지 않아요. 같은 커서로 같은 요청을 다시 시도하세요. 커서가 가리키는 페이지를 저장한 후에만 다음 커서로 이동하세요.
로컬 세션 엔드포인트의 페이지 토큰은 더 긴 휴지 기간 동안 예외예요. 로컬 세션 메시지 엔드포인트에서 한 번의 순회(walk, 페이지를 한 번 통과)의
page토큰은 첫 페이지 후 24시간 후에 만료돼요. 그 창 안에 끝내거나 재개하고, 그렇지 않으면page매개변수 없이 다시 시작하세요. 로컬 세션 목록에서 이전page토큰은 여전히 허용되지만 현재 보존 경계에 맞춰 재평가되어 세션을 건너뛸 수 있으므로, 목록 순회도 24시간 안에 완료하세요.
# Fetch the first page (newest activities first) and capture its trailing cursor.
last_id=$(curl --fail-with-body -sS \
"https://api.anthropic.com/v1/compliance/activities?limit=2" \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" | jq -er '.last_id')
# Pass the cursor back unchanged to fetch the next (older) page.
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/activities" \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--data-urlencode "limit=2" \
--data-urlencode "after_id=${last_id}"
프로덕션 백필 루프는 has_more와 last_id로 반복을 구동해 더 오래된 활동을 페이지네이션해요:
- 저장된 커서에서 시작하세요(
after_id를 생략하면 처음부터 시작). has_more가false가 될 때까지after_id=<last_id>로 페이지네이션하세요.- 최종
last_id가 담당하는 모든 페이지를 저장한 후에만 그last_id를 영속화하세요.
cursor = stored_cursor
loop:
if cursor is not null:
page = GET /v1/compliance/activities?after_id={cursor}&limit=100
else:
page = GET /v1/compliance/activities?limit=100
store(page.data)
if page.last_id is not null:
cursor = page.last_id
if not page.has_more: break
persist(cursor)
Activity 객체 이해하기
data의 각 항목은 이 최상위 형태를 가진 Activity예요:
| 필드 | 유형 | 설명 |
|---|---|---|
id |
string | 활동의 고유 식별자. |
created_at |
RFC 3339 string | 활동이 발생한 시각. |
organization_id |
string or null | 활동이 발생한 조직, 또는 조직에 묶이지 않은 이벤트(로그인, 로그아웃, Compliance API 호출)는 null. |
organization_uuid |
string or null | organization_id와 동일한 범위를 UUID로 표현. |
actor |
Actor union | 활동을 수행한 주체. 다음 actor 표 참고. |
type |
string | 활동 유형. 예: claude_chat_created. |
| 추가 필드 | 다양 | 유형별 필드. 예: 채팅 이벤트의 claude_chat_id, 파일 이벤트의 filename. 유형별 필드 목록은 API 참조의 Compliance 활동 조회 참고. |
actor 필드는 판별된 유니언(discriminated union)이에요. type 판별자가 다른 어떤 필드가 있는지 알려줘요:
actor.type |
나타나는 시기 | 핵심 필드 |
|---|---|---|
user_actor |
로그인한 claude.ai 또는 Claude Console 사용자가 작업을 수행. | email_address, user_id, ip_address, user_agent |
api_actor |
요청이 고객 발급 API 키로 Claude API 또는 Compliance API를 호출. Compliance API 호출은 Compliance Access Key와 Admin API 키 모두에 대해 이 actor 유형을 생성. | api_key_id, ip_address, user_agent |
admin_api_key_actor |
조직 admin이 Admin API 키로 사용자, 초대, 워크스페이스, API 키를 관리. | admin_api_key_id, ip_address, user_agent |
unauthenticated_user_actor |
로그인 완료 전에 작업이 발생. 예: sso_login_initiated. |
unauthenticated_email_address, ip_address, user_agent |
anthropic_actor |
내부 도구 사용 같은 방식으로 Anthropic이 조직에 대해 작업. | email_address(항상 null. Anthropic 운영자는 개별 이메일로 표현되지 않기 때문에 user_actor와의 형태 일관성을 위해 존재) |
system_actor |
사용자나 고객 자격 증명 없이 Anthropic 시스템이 수행한 자동화된 백그라운드 처리. | service(nullable. 알려진 경우 작업을 수행한 자동화 프로세스의 이름) |
scim_directory_sync_actor |
ID 제공자(Okta, Microsoft Entra ID, JumpCloud 등)가 SCIM 디렉터리 동기화로 변경을 푸시. | workos_event_id, directory_id, idp_connection_type(nullable. 예: OktaSCIMV2, AzureSCIMV2) |
user_actor 활동이 항상 사용자가 작업을 수행했다는 의미는 아니에요. Anthropic이 사용자를 대신해 실행하는 프로세스는 현재 system_actor가 아니라 영향받는 사용자의 user_actor로 나타날 수 있으며, 이 귀속은 바뀔 수 있어요. 예를 들어 마이그레이션의 메모리 활동(platform_memory_store_created, platform_memory_created, platform_memory_deleted 같은 것)이 이렇게 귀속돼요. 이 마이그레이션 활동은 현재 ip_address가 0.0.0.0으로 표시돼요.
claude_*_viewed 활동은 Claude 앱이 콘텐츠를 로드했다는 뜻이지, 사람이 열람했다는 뜻은 아니에요. claude_chat_viewed, claude_file_viewed, claude_project_viewed 같은 유형은 Claude 앱이 Anthropic 서버에서 채팅·파일·프로젝트를 로드할 때마다 기록돼요. 반복 로드는 중복 제거되지 않아요. 웹·데스크톱·모바일 앱은 서로 다른 시점에, 때로는 백그라운드에서 콘텐츠를 로드하고, 로드하지 않고 캐시된 사본을 표시할 수 있어요. 결과적으로 이 활동의 개수는 플랫폼에 따라 달라지며, 보낸 메시지나 본 화면과 대응하지 않아요.
정방향 호환 핸들러를 만드세요. 인식하지 못하는
type과actor.type값은 그대로 통과시키고 핸들러가 예상하지 못한 필드는 무시해서, 새 활동 유형이 출시돼도 통합이 계속 작동하게 하세요.
다음 단계
- API 참조 — 이동 —
GET /v1/compliance/activities의 전체 요청·응답 스키마(모든 지원activity_types[]값 포함). - 채팅·파일·프로젝트 조회 및 삭제 — 이동 — 피드에서 찾은 활동의 기본 콘텐츠 조회·삭제(Compliance Access Key 필요).
- 준수 통합 설계 — 이동 — 폴링·배치 소비 패턴 선택과 SIEM 상관관계 계획.
- Compliance API 오류 처리 — 이동 — 전체 오류 카탈로그.