감사 로그
조직의 모든 변경 — 관리자 UI 작업과 Public API 호출 모두 — 이 단일 감사 스트림에 기록됩니다. 이러한 엔드포인트를 사용하여 해당 스트림을 SIEM으로 보내거나, 내부 컴플라이언스 보고서를 만들거나, 특정 변경을 조사하세요. API 키에 필요한 범위: audit-log:read.
엔드포인트
| Method | Path | Scope | 용도 |
|---|---|---|---|
GET | /api/public/v1/audit-log | audit-log:read | 선택적 필터가 있는 페이지 매김된 감사 이벤트 목록. |
GET | /api/public/v1/audit-log/actions | audit-log:read | 조직에 대해 기록된 고유한 작업 이름. 필터 드롭다운 구축에 유용합니다. |
기록되는 것
Public API 호출은 자동 감사됩니다. 항목은 actorRole = "api_key"과 actorEmail = "apikey:<apiKeyId>"을 포함하며, 여기서 <apiKeyId>는 호출한 API 키의 전체 UUID입니다((scs_live_… 토큰 접두사가 아님). 관리자 UI 작업은 사람의 이메일과 그들의 org_admin 역할을 사용합니다. 두 스트림은 동일한 로그에 혼합되어 단일 내보내기로 모든 변경 기록을 다룹니다.
감사 이벤트 목록 조회
이벤트를 최신순으로 반환합니다. 모든 필터는 선택 사항이며 결합될 수 있습니다.
GET /api/public/v1/audit-log
?action=sarif.ingested
&actorEmail=apikey:7d8a3e0b-4f12-4cd6-b9e1-21f6cf5d4a73
&from=2026-05-01T00:00:00Z
&to=2026-05-29T23:59:59Z
&page=1
&pageSize=50
Authorization: Bearer scs_live_…쿼리 매개변수
| 매개변수 | Type | 기본값 | 참고 |
|---|---|---|---|
action | string | — | 정확한 일치 작업 이름. /audit-log/actions에서 유효한 값을 가져오세요. |
actorEmail | string | — | 정확한 일치 행위자 이메일. API 키 항목의 경우 apikey:<api-key-uuid> 형식을 사용하세요. |
from | ISO 8601 | — | createdAt의 포함 하한 (UTC). |
to | ISO 8601 | — | createdAt의 포함 상한 (UTC). |
page | integer | 1 | 1 기반 페이지 인덱스. |
pageSize | integer | 50 | 200으로 제한됨. 1–200 범위 밖의 값은 50으로 폴백합니다. |
응답
{
"items": [
{
"id": "0e7a3b4c-9d2f-4e1a-b6c8-2c4f8d5a1e90",
"createdAt": "2026-05-29T13:42:11.318Z",
"actorEmail": "apikey:7d8a3e0b-4f12-4cd6-b9e1-21f6cf5d4a73",
"actorRole": "api_key",
"action": "assignment.created",
"targetType": "assignment",
"targetId": "b1d8c2a0-7e34-4f9a-9d51-8e2c91a4f607",
"targetLabel": "jane.smith@acme.com / SQL Injection",
"metadata": "{\"topicId\":\"sql-injection\",\"deadlineDays\":14}",
"ipAddress": "203.0.113.42"
},
{
"id": "ba98c9d4-5f60-4b21-9c0e-3f72e1b58a44",
"createdAt": "2026-05-29T13:41:08.902Z",
"actorEmail": "amelia.ng@acme.com",
"actorRole": "org_admin",
"action": "user.invited",
"targetType": "user",
"targetId": "c4f1d22a-83b7-4d2c-9a01-7e6b5d1f9c33",
"targetLabel": "jane.smith@acme.com",
"metadata": null,
"ipAddress": "203.0.113.7"
}
],
"total": 2841,
"page": 1,
"pageSize": 50
}metadata는 JSON 문자열입니다(객체가 아님). 클라이언트에서 파싱하세요. 형태는 작업당 다릅니다.total은 현재 페이지가 아닌 전체 필터링된 카운트를 반영합니다 — 페이지 수를 도출하려면pageSize로 나누세요.- User-agent 및 기타 요청 헤더는 포렌식을 위해 서버 측에 저장되지만 이 응답에서는 반환되지 않습니다.
예시
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
"https://api.limeplate.com/api/public/v1/audit-log?from=2026-05-01T00:00:00Z&pageSize=200"고유한 작업 목록 조회
조직에 대해 기록된 모든 작업 이름을 알파벳 순으로 정렬하여 반환합니다. 목록은 조직 범위이며 — 새 테넌트는 이벤트가 흐르기 시작할 때까지 빈 배열을 반환합니다.
GET /api/public/v1/audit-log/actions
Authorization: Bearer scs_live_…응답
[
"apikey.created",
"apikey.revoked",
"assignment.completed",
"assignment.created",
"course.published",
"sarif.ingested",
"user.invited",
"user.role_changed",
"webhook.created"
]예시
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/audit-log/actionsSIEM으로 보내기
전형적인 패턴은 cron에서 /audit-log를 폴링하고, 수집한 마지막 createdAt와 동일한 from을 전달하며, items.length < pageSize까지 페이지를 걸어가는 것입니다. 결과가 최신순으로 정렬되므로, 증분 페처는 다운스트림 순서를 시간순으로 유지하려면 이벤트를 방출하기 전에 페이지를 반전해야 합니다. v1에는 스트리밍 감사 웹훅이 없습니다 — 특정 이벤트에 대한 저지연 반응이 필요할 때 감사 폴링을 웹훅 아래에 문서화된 대상 도메인 웹훅과 결합하세요.