
# 디렉터리 프로비저닝 로그 조회

`GET /v1/directories/{directory_id}/provisioning-logs` · 권한 `directories:read`

SCIM 디렉터리의 프로비저닝 로그를 최신순으로 조회합니다. 아이덴티티 공급자가 보낸 인증된 SCIM 요청 하나가 레코드 하나에 해당하며, 메서드, 경로 템플릿(실제 ID는 경로에 포함되지 않음), 리소스 유형과 ID, 값 없이 요약한 작업 내용, 무시된 속성 이름, HTTP 상태, `scim_type`, 처리 시간, 클라이언트 주소 접두사(IPv4 /24, IPv6 /48), 클라이언트 분류, 대량 비활성화 보류로 요청이 중단되었는지 여부를 포함합니다. 요청 및 응답 본문, 속성 값, 전체 IP 주소, User-Agent, 토큰 값은 저장되지 않으며 반환되지도 않습니다.

레코드는 요금제의 로그 보관 기간 동안 보관됩니다(Free 7일, Startup 14일, Business 30일, Enterprise 90일). 정렬은 항상 최신순이며 `order` 매개변수는 없습니다. 삭제된 디렉터리의 레코드는 `GET /v1/logs?type=scim.request`로 계속 조회할 수 있습니다.

## 요청

| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
| `directory_id` | path | 예 | SCIM 디렉터리 ID(`dir_…`)입니다. |
| `limit` | query | 아니요 | 1~100, 기본값 20입니다. |
| `after` | query | 아니요 | `list_metadata.after`의 커서입니다(더 오래된 레코드). |
| `before` | query | 아니요 | `list_metadata.before`의 커서입니다(더 새로운 레코드). |
| `from` | query | 아니요 | 포함하는 하한(RFC 3339)입니다. |
| `to` | query | 아니요 | 제외하는 상한(RFC 3339)입니다. |

요청 본문은 없습니다.

## 응답

레코드 페이지와 함께 `200 OK`를 반환합니다.

```json
{
  "data": [
    {
      "id": "evt_01j9xp4q6r8s0t2v4w6x8y0z2b",
      "occurred_at": "2026-10-20T12:00:00Z",
      "outcome": "success",
      "organization_id": "org_01j9xk1m3n5p7q9r1s3t5v7w9x",
      "token_id": "dst_01j9xn2p4q6r8s0t2v4w6x8y0z",
      "method": "PATCH",
      "path_template": "PATCH /Users/{id}",
      "resource_type": "User",
      "resource_id": "dsu_01j9xq5r7s9t1v3w5x7y9z1a3c",
      "operation_summary": ["replace:active"],
      "ignored_attributes": [],
      "status": 200,
      "scim_type": null,
      "duration_ms": 12,
      "client_ip_prefix": "203.0.113.0/24",
      "client_class": "okta",
      "held": false,
      "request_id": "0192f5e0-0000-7000-8000-000000000001",
      "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736"
    }
  ],
  "list_metadata": {
    "before": null,
    "after": null
  }
}
```

## 오류

| HTTP | code | 발생 조건 |
|---|---|---|
| 400 | `invalid_cursor` | 커서의 형식이 잘못되었거나 다른 요청에 속합니다. |
| 400 | `range_outside_retention` | `from`이 요금제의 보관 기간보다 이전입니다. |
| 404 | `not_found` | 이 환경에 디렉터리가 존재하지 않습니다. |
| 422 | `validation_failed` | `limit`이 범위를 벗어나거나, `from` 또는 `to`가 RFC 3339 형식이 아니거나, `to`가 `from`보다 뒤가 아니거나, `order`가 전달되었습니다(`unsupported`). |
| 401 | `unauthenticated` | 자격 증명이 없거나, 잘못되었거나, 폐기되었습니다. |
| 403 | `insufficient_permissions` | 자격 증명에 필요한 권한이 없습니다. |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After` 기간이 지난 후 다시 시도하십시오. |
| 503 | `service_unavailable` | 디렉터리 동기화 또는 로그 검색을 일시적으로 사용할 수 없거나 이 배포에서 구성되지 않았습니다. `Retry-After` 기간이 지난 후 다시 시도하십시오. |

## 예시

```bash
curl -i "https://api.eu.keenauth.com/v1/directories/dir_01j9xm2n4p6q8r0s2t4v6w8y0z/provisioning-logs?limit=20" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth directories provisioning-logs list dir_01j9xm2n4p6q8r0s2t4v6w8y0z --from 2026-10-01T00:00:00Z
```

## 개인정보

이 엔드포인트에는 개인정보, 즉 디렉터리(SCIM) 사용자 정보가 포함됩니다. [KeenAuth API의 개인정보](/docs/policies/personal-data)에서 저장되는 항목, 보관 기간, 삭제 방법을 확인하십시오. 어떤 필드에도 민감한 개인정보(건강, 생체 정보, 종교, 정치적 견해, 성적 지향)를 보내지 마십시오.
