---
title: Activity Feed 쿼리하기
url: https://platform.claude.com/docs/ko/manage-claude/compliance-activity-feed
description: 조직의 Compliance API Activity Feed를 조회하고, 필터링하고, 페이지네이션합니다.
---

<Note>
  Compliance API를 활성화하려면 [Compliance API 설정](https://platform.claude.com/docs/ko/manage-claude/compliance-api-access)을 참조하세요.
</Note>

<Check>
  **필수 스코프:** Compliance Access Key 또는 Admin API 키의 `read:compliance_activities`.

  이 스코프를 가진 Compliance Access Key(`sk-ant-api01-...`)와 Admin API 키(`sk-ant-admin01-...`) 모두 Activity Feed를 호출할 수 있습니다. 각 키 유형이 어떤 조건에서 이 스코프를 갖는지는 [Compliance API 설정하기](https://platform.claude.com/docs/ko/manage-claude/compliance-api-access)를 참조하세요.
</Check>

Activity Feed는 조직 전반의 인증, 채팅, 파일, 프로젝트, 관리 및 플랫폼 활동을 기록하고 이를 최신순(역시간순)으로 반환합니다. 활동은 발생 후 1분 이내에 쿼리할 수 있으며 6년간 보존됩니다. 기록은 소급 적용되지 않습니다. 조직에 Compliance API가 처음 활성화된 시점부터 기록이 시작되며, 활성화 이전의 활동은 백필(backfill)되지 않습니다.

```bash cURL
curl --fail-with-body -sS \
  "https://api.anthropic.com/v1/compliance/activities?limit=1" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
  --header "anthropic-version: 2023-06-01"
```

```json Response
{
  "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": "user@example.com",
        "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"
}
```

## 활동 필터링

조직, 액터(actor), 활동 유형으로 필터링하거나, 점 표기 하위 매개변수 `created_at.gte`, `.gt`, `.lte`, `.lt`를 사용하여 `created_at` 시간 범위로 필터링할 수 있습니다. 각 매개변수의 타입과 허용되는 값은 [API 레퍼런스](https://platform.claude.com/docs/ko/api/compliance/activities/list)를 참조하세요.

반복 가능한 매개변수는 배열 대괄호 쿼리 구문을 사용합니다. 각 값마다 `activity_types[]=...`, `actor_ids[]=...` 또는 `organization_ids[]=...`를 한 번씩 전달하세요.

```bash cURL
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_COMPLIANCE_ACCESS_KEY" \
  --header "anthropic-version: 2023-06-01"
```

Activity Feed는 수백 가지의 서로 다른 활동 유형을 생성합니다. `activity_types[]`가 허용하는 값의 전체 목록은 API 레퍼런스의 [컴플라이언스 활동 쿼리하기](https://platform.claude.com/docs/ko/api/compliance/activities/list)를 참조하세요.

## 결과 페이지네이션

활동은 최신 항목부터 반환되며, `created_at`이 동일한 경우 활동 ID로 순서가 결정되고, 각 응답은 최대 `limit`개의 결과로 제한됩니다(기본값 100, 최대 5,000). 전체 응답 스키마는 [API 레퍼런스](https://platform.claude.com/docs/ko/api/compliance/activities/list)를 참조하세요.

Compliance API는 엔드포인트 계열에 따라 두 가지 페이지네이션 방식을 사용합니다.

| 엔드포인트 계열                                        | 정렬 순서                     | 방식     | 매개변수                                                 |
| ----------------------------------------------- | ------------------------- | ------ | ---------------------------------------------------- |
| 활동(Activities)                                  | 최신순                       | 커서     | `after_id`, `before_id` (`first_id`, `last_id`로 반환됨) |
| 채팅 및 채팅 메시지                                     | 오래된 순                     | 커서     | `after_id`, `before_id` (`first_id`, `last_id`로 반환됨) |
| 조직, 프로젝트, 프로젝트 첨부 파일, 사용자, 역할, 역할 권한, 그룹, 그룹 멤버 | 엔드포인트별 상이                 | 페이지 토큰 | `page` (`next_page`로 반환됨)                            |
| 로컬 및 원격 세션과 세션 메시지                              | 세션은 최신순, 메시지는 기본적으로 오래된 순 | 페이지 토큰 | `page` (`next_page`로 반환됨)                            |

파일은 페이지네이션되지 않으며, ID로 개별 조회합니다.

페이지네이션 커서와 페이지 토큰은 불투명한(opaque) 문자열이므로 변경 없이 그대로 다시 전달하세요. 내부 형식은 안정적이지 않으며, 이를 파싱하면 예고 없이 동작이 깨질 수 있습니다. 각 요청에는 `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` 매개변수로 더 오래된 활동에 도달합니다. 채팅은 오래된 순으로 정렬됩니다. 해당 엔드포인트의 커서 의미론은 [채팅, 파일, 프로젝트 조회 및 삭제하기](https://platform.claude.com/docs/ko/manage-claude/compliance-content-data)를 참조하세요.

<Note>
  **커서는 재시도 시 재사용해도 안전합니다.** 성공적으로 반환된 페이지의 커서 또는 페이지 토큰은 계속 유효하며, 실패한 요청(5xx, 타임아웃, 네트워크 오류)은 현재 위치를 앞으로 이동시키지 않습니다. 동일한 커서로 동일한 요청을 재시도하세요. 커서가 가리키는 지점 이전의 페이지를 저장한 후에만 다음 커서로 이동하세요.

  로컬 세션 엔드포인트의 페이지 토큰은 긴 일시 중지가 있을 경우 예외입니다. [로컬 세션 메시지 엔드포인트](https://platform.claude.com/docs/ko/manage-claude/compliance-sessions#retrieve-a-local-session-transcript)에서는 한 번의 순회(walk, 페이지들을 한 차례 통과하는 것)의 `page` 토큰이 첫 페이지 이후 24시간이 지나면 만료되므로, 해당 시간 내에 완료하거나 재개하거나, `page` 매개변수 없이 다시 시작하세요. [로컬 세션 목록](https://platform.claude.com/docs/ko/manage-claude/compliance-sessions#retrieve-local-sessions)에서는 오래된 `page` 토큰도 여전히 허용되지만 현재 보존 경계를 기준으로 재평가되어 세션을 건너뛸 수 있으므로, 목록 순회 역시 24시간 이내에 완료하세요.
</Note>

```bash cURL
# 첫 페이지(최신 활동 순)를 가져오고 마지막 커서를 저장합니다.
last_id=$(curl --fail-with-body -sS \
  "https://api.anthropic.com/v1/compliance/activities?limit=2" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
  --header "anthropic-version: 2023-06-01" | jq -er '.last_id')

# 다음(이전) 페이지를 가져오려면 커서를 변경하지 않고 그대로 다시 전달하세요.
curl --fail-with-body -sS -G \
  "https://api.anthropic.com/v1/compliance/activities" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
  --header "anthropic-version: 2023-06-01" \
  --data-urlencode "limit=2" \
  --data-urlencode "after_id=${last_id}"
```

프로덕션 **백필(backfill)** 루프는 `has_more`와 `last_id`를 기준으로 반복을 진행하여 더 오래된 활동을 페이지 단위로 순회합니다.

1. 저장된 커서에서 시작합니다(또는 처음부터 시작하려면 `after_id`를 생략합니다).
2. `has_more`가 `false`가 될 때까지 `after_id=<last_id>`로 페이지를 순회합니다.
3. 해당 커서가 포함하는 모든 페이지를 저장한 후에만 최종 `last_id`를 영구 저장합니다.

```text
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 또는 null  | 활동이 발생한 조직. 조직에 연결되지 않은 이벤트(로그인, 로그아웃, Compliance API 호출)의 경우 `null`.                                                                                                              |
| `organization_uuid` | string 또는 null  | `organization_id`와 동일한 범위를 UUID로 표현한 값.                                                                                                                                            |
| `actor`             | Actor 유니온       | 활동을 수행한 주체(사람 또는 시스템). 아래 액터 표를 참조하세요.                                                                                                                                             |
| `type`              | string          | 활동 유형. 예: `claude_chat_created`.                                                                                                                                                   |
| *추가 필드*             | 다양함             | 유형별 필드. 예: 채팅 이벤트의 `claude_chat_id` 또는 파일 이벤트의 `claude_file_id`. 유형별 필드 목록은 API 레퍼런스의 [컴플라이언스 활동 쿼리하기](https://platform.claude.com/docs/ko/api/compliance/activities/list)를 참조하세요. |

`actor` 필드는 구별된 유니온(discriminated union)입니다. `type` 판별자는 어떤 다른 필드가 존재하는지 알려줍니다.

| `actor.type`                 | 나타나는 경우                                                                                                                              | 주요 필드                                                                                                  |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| `user_actor`                 | 로그인한 claude.ai 또는 Claude Console 사용자가 작업을 수행했거나, Anthropic이 해당 사용자를 대신하여 실행하는 프로세스가 작업을 수행한 경우입니다(이 표 다음 단락 참조).                     | `email_address`, `user_id`, `ip_address`, `user_agent`                                                 |
| `api_actor`                  | 고객이 발급한 API 키로 Claude API 또는 Compliance API를 호출한 요청입니다. Compliance API 호출은 Compliance Access Key와 Admin API 키 모두에 대해 이 액터 유형을 생성합니다. | `api_key_id`, `ip_address`, `user_agent`                                                               |
| `admin_api_key_actor`        | 조직 관리자가 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` (null일 수 있으며, 알려진 경우 작업을 수행한 자동화 프로세스의 이름입니다)                                                |
| `scim_directory_sync_actor`  | ID 공급자(예: Okta, Microsoft Entra ID 또는 JumpCloud)가 SCIM 디렉터리 동기화를 통해 변경 사항을 푸시한 경우입니다.                                                | `workos_event_id`, `directory_id`, `idp_connection_type` (null일 수 있으며, 예: `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 서버에서 채팅, 파일 또는 프로젝트를 로드할 때마다 기록됩니다. 반복 로드는 중복 제거되지 않습니다. 웹, 데스크톱, 모바일 앱은 서로 다른 시점에, 때로는 백그라운드에서 콘텐츠를 로드하며, 로드하지 않고 캐시된 사본을 표시할 수도 있습니다. 그 결과 이러한 활동의 횟수는 플랫폼에 따라 다르며, 전송된 메시지 수나 조회된 화면 수와 일치하지 않습니다.

파일, 프로젝트 문서 또는 아티팩트에 관한 활동에는 해당 항목의 이름이나 제목이 포함되지 않습니다. 2026년 9월 24일부터 이러한 활동의 `filename` 및 `title` 필드는 해당 날짜 이전에 기록된 활동을 포함하여 항상 `null` 또는 빈 문자열이거나 생략됩니다. 이름이나 제목을 조회하려면 `read:compliance_user_data` 스코프를 가진 Compliance Access Key를 사용하여 활동의 `claude_file_*`, `claude_proj_doc_*` 또는 `claude_artifact_version_*` ID를 [파일 및 아티팩트 조회](https://platform.claude.com/docs/ko/manage-claude/compliance-content-data#retrieve-files-and-artifacts)의 해당 메타데이터 엔드포인트에 전달하세요. 파일, 문서 또는 아티팩트가 삭제된 후이거나 활동에 해당 ID가 없는 경우에는 이름이나 제목을 조회할 수 없습니다.

<Note>
  **상위 호환(forward-compatible) 핸들러를 구축하세요.** 인식되지 않는 `type` 및 `actor.type` 값은 그대로 통과시키고, 핸들러가 예상하지 않는 필드는 무시하여 새로운 활동 유형이 출시되어도 통합이 계속 작동하도록 하세요.
</Note>

## 다음 단계

<CardGroup cols={2}>
  <Card title="API 레퍼런스" href="https://platform.claude.com/docs/ko/api/compliance/activities/list">
    지원되는 모든 `activity_types[]` 값을 포함한 `GET /v1/compliance/activities`의 전체 요청 및 응답 스키마.
  </Card>

  <Card title="채팅, 파일, 프로젝트 조회 및 삭제하기" href="https://platform.claude.com/docs/ko/manage-claude/compliance-content-data">
    피드에서 찾은 활동의 기반 콘텐츠를 쿼리하고 삭제합니다(Compliance Access Key 필요).
  </Card>

  <Card title="컴플라이언스 통합 설계하기" href="https://platform.claude.com/docs/ko/manage-claude/compliance-integration-patterns">
    폴링 또는 배치 소비 패턴을 선택하고 SIEM 상관 분석을 계획합니다.
  </Card>

  <Card title="Compliance API 오류 처리하기" href="https://platform.claude.com/docs/ko/manage-claude/compliance-errors">
    전체 오류 카탈로그.
  </Card>
</CardGroup>
