활동 피드(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_idbefore_id 중 하나만 설정할 수 있고, 두 방식 모두 언제 멈출지 알 수 있게 has_more를 반환해요. 세션 엔드포인트(로컬·원격)는 예외로, has_more 없이 next_page를 반환하므로 next_pagenull일 때 멈추면 돼요.

활동을 페이지네이션하려면:

  • 결과 순서에서 다음 페이지로 나아가려면 응답의 last_idafter_id로 전달하세요. 활동이 최신순으로 정렬되므로 다음 페이지는 더 오래된 항목을 담아요.
  • 이전 페이지로 돌아가려면 first_idbefore_id로 전달하세요.
  • has_morefalse일 때 멈추세요.

커서 매개변수는 페이지 방향을 설정하고, 엔드포인트의 정렬 순서는 시간 방향을 설정해요. 여기서 같은 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_morelast_id로 반복을 구동해 더 오래된 활동을 페이지네이션해요:

  1. 저장된 커서에서 시작하세요(after_id를 생략하면 처음부터 시작).
  2. has_morefalse가 될 때까지 after_id=<last_id>로 페이지네이션하세요.
  3. 최종 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_address0.0.0.0으로 표시돼요.

claude_*_viewed 활동은 Claude 앱이 콘텐츠를 로드했다는 뜻이지, 사람이 열람했다는 뜻은 아니에요. claude_chat_viewed, claude_file_viewed, claude_project_viewed 같은 유형은 Claude 앱이 Anthropic 서버에서 채팅·파일·프로젝트를 로드할 때마다 기록돼요. 반복 로드는 중복 제거되지 않아요. 웹·데스크톱·모바일 앱은 서로 다른 시점에, 때로는 백그라운드에서 콘텐츠를 로드하고, 로드하지 않고 캐시된 사본을 표시할 수 있어요. 결과적으로 이 활동의 개수는 플랫폼에 따라 달라지며, 보낸 메시지나 본 화면과 대응하지 않아요.

정방향 호환 핸들러를 만드세요. 인식하지 못하는 typeactor.type 값은 그대로 통과시키고 핸들러가 예상하지 못한 필드는 무시해서, 새 활동 유형이 출시돼도 통합이 계속 작동하게 하세요.

다음 단계

  • API 참조이동GET /v1/compliance/activities의 전체 요청·응답 스키마(모든 지원 activity_types[] 값 포함).
  • 채팅·파일·프로젝트 조회 및 삭제이동 — 피드에서 찾은 활동의 기본 콘텐츠 조회·삭제(Compliance Access Key 필요).
  • 준수 통합 설계이동 — 폴링·배치 소비 패턴 선택과 SIEM 상관관계 계획.
  • Compliance API 오류 처리이동 — 전체 오류 카탈로그.

더 알아보기 (Learn more)