SaaS API콘텐츠 검수
GET /ai/influence/contents/review/{reviewId}
검수 라운드별 제출물 목록 조회
검수 라운드별 제출물 목록 조회
검수 라운드에서 제출해야 할 모든 타입 목록과 각 타입별 저장된 내용을 조회합니다.
복수 스크립트 지원
스크립트 타입(SCRIPT_VIDEO, SCRIPT_BLOG)은 하나의 검수 라운드에 여러 개를 등록할 수 있습니다.
items필드: 해당 타입의 전체 스크립트 목록 (스크립트 타입은 복수, 비스크립트 타입은 단건 리스트)item필드: 하위호환용. 스크립트 타입은 첫 번째 스크립트, 비스크립트 타입은 기존과 동일- 각 스크립트는
scriptIndex(0, 1, 2...)로 구분됩니다.
HTTP 요청
GET /ai/influence/contents/review/{reviewId}
Authorization: Bearer {access_token}Path Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
reviewId | long | 예 | 검수 라운드 ID |
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "조회 성공",
"data": {
"reviewId": 88,
"reviewRound": 1,
"guidelineVersion": 2,
"requiredHashtags": "#브랜드명 #협찬",
"submissionItems": [
{
"itemType": "SCRIPT_VIDEO",
"item": {
"id": 1,
"reviewId": 88,
"itemType": "SCRIPT_VIDEO",
"scriptIndex": 0,
"editorState": {"root": {"children": []}},
"status": "REVIEWING",
"isSubmitted": true,
"submittedAt": "2026-03-19T14:00:00",
"currentVersion": 1,
"feedbacks": []
},
"items": [
{
"id": 1,
"reviewId": 88,
"itemType": "SCRIPT_VIDEO",
"scriptIndex": 0,
"editorState": {"root": {"children": []}},
"status": "REVIEWING",
"isSubmitted": true,
"submittedAt": "2026-03-19T14:00:00",
"currentVersion": 1,
"feedbacks": []
},
{
"id": 2,
"reviewId": 88,
"itemType": "SCRIPT_VIDEO",
"scriptIndex": 1,
"editorState": {"root": {"children": []}},
"status": "REVIEWING",
"isSubmitted": true,
"submittedAt": "2026-03-19T14:05:00",
"currentVersion": 1,
"feedbacks": [
{
"id": 10,
"feedback": "나레이션 톤을 좀 더 밝게 수정해주세요.",
"highlightedText": "나레이션 부분",
"selection": null,
"mediaList": [],
"feedbackAuthor": { "id": "admin001" },
"isResolved": false,
"checkedByCreator": false,
"feedbackType": "FREE",
"createdAt": "2026-03-19T15:00:00",
"isDraft": false
}
]
}
]
},
{
"itemType": "HASHTAG",
"item": null,
"items": []
}
],
"unreflectedFeedbackIds": [10],
"hasAdditionalReviewRequest": true,
"needsResubmission": false
}
}Response Body 스키마
최상위
| 필드명 | 타입 | 설명 |
|---|---|---|
reviewId | long | 검수 라운드 ID |
reviewRound | int | 검수 라운드 (1: 1차, 2: 2차) |
guidelineVersion | int | 가이드라인 버전 (1: v1, 2: v2) |
requiredHashtags | string | 캠페인 필수 해시태그 |
submissionItems | array | 제출물 타입별 목록 |
submissionItems[].itemType | string | 제출물 타입 |
submissionItems[].item | object | null | 저장된 제출물 (하위호환: 스크립트 타입은 첫번째 스크립트) |
submissionItems[].items | array | 제출물 목록 (스크립트 타입: 복수 스크립트, 비스크립트: 단건 리스트) |
unreflectedFeedbackIds | array<long> | null | 반영되지 않은 피드백 ID 목록 |
hasAdditionalReviewRequest | boolean | 추가 검수 요청 여부 |
needsResubmission | boolean | 크리에이터가 지금 수정/재제출해야 하는지 여부 |
제출물 (submissionItems[].item)
| 필드명 | 타입 | 설명 |
|---|---|---|
id | long | 제출물 ID |
reviewId | long | 검수 라운드 ID |
itemType | string | 제출물 타입 (VIDEO, CAPTION, HASHTAG, SCRIPT_VIDEO 등) |
scriptIndex | int | null | 스크립트 순서 인덱스 (스크립트 타입: 0, 1, 2..., 비스크립트: null) |
filePath | string | null | 파일 URL (VIDEO, PHOTO) |
editorState | string | null | 에디터 상태 JSON (SCRIPT, CAPTION, HASHTAG) |
comment | string | null | 코멘트 |
status | string | 상태 (REVIEWING, APPROVED, REJECTED) |
isSubmitted | boolean | 제출 완료 여부 |
submittedAt | datetime | null | 제출 시간 |
uploadedAt | datetime | null | 업로드 시간 |
createdAt | datetime | 생성 시간 |
currentVersion | int | 현재 버전 |
requiredHashtags | string | null | 필수 해시태그 (HASHTAG 타입일 때만) |
feedbacks | array | 피드백 목록 (isDraft=true인 임시저장 피드백은 제외) |
피드백 (feedbacks[])
| 필드명 | 타입 | 설명 |
|---|---|---|
id | long | 피드백 ID |
feedback | string | 피드백 내용 |
highlightedText | string | null | 하이라이트된 텍스트 (피드백 대상) |
selection | string | null | Lexical 텍스트 선택 범위 (JSON) |
mediaList | array | 첨부 미디어 목록 |
feedbackAuthor | object | 작성자 정보 ({ "id": "..." }) |
isResolved | boolean | 해결 완료 여부 |
checkedByCreator | boolean | 크리에이터가 체크한 상태 (임시 저장용) |
feedbackType | string | 피드백 유형 |
feedbackCategory | string | null | 피드백 카테고리 (가이드라인 섹션명) |
feedbackItem | string | null | 피드백 항목 (가이드라인 항목명) |
createdAt | datetime | 작성 시간 |
resolvedAt | datetime | null | 해결 시간 |
isDraft | boolean | 임시저장 여부 (크리에이터 조회 시 항상 false) |
피드백 유형 (feedbackType)
| 값 | 설명 |
|---|---|
FREE | 자유 피드백 |
GUIDELINE_UNREFLECTED | 가이드라인 미반영 (가이드라인에 명시된 내용이 반영되지 않음) |
GUIDELINE_EXTRA | 가이드라인 외 요청 (가이드라인에 없는 추가 요청) |
피드백 미디어 (feedbacks[].mediaList[])
| 필드명 | 타입 | 설명 |
|---|---|---|
id | long | 미디어 ID |
mediaType | string | 미디어 타입 (IMAGE / VIDEO) |
mediaUrl | string | S3 URL |
startTime | double | null | 영상 시작 시간 (초, VIDEO만) |
endTime | double | null | 영상 끝 시간 (초, VIDEO만) |
comment | string | null | 미디어별 코멘트 |
임시저장 피드백 필터링
크리에이터 조회 시 isDraft=true인 피드백은 자동으로 제외됩니다.
기업이 아직 임시저장만 한 피드백은 크리에이터에게 노출되지 않으며, 기업이 정식 제출한 피드백만 보입니다.
피드백 유형 (feedbackType)
피드백은 3가지 유형으로 구분됩니다:
FREE: 자유 피드백 (기본값)GUIDELINE_UNREFLECTED: 가이드라인에 명시된 내용이 반영되지 않은 경우GUIDELINE_EXTRA: 가이드라인에 없는 추가 요청
GUIDELINE_UNREFLECTED와 GUIDELINE_EXTRA 유형인 경우 feedbackCategory(가이드라인 섹션명)와 feedbackItem(가이드라인 항목명) 필드에 값이 포함될 수 있습니다.
unreflectedFeedbackIds 필드
기업이 "피드백 미반영" 검수 추가 요청 시 지정한 피드백 ID 목록입니다.
- 값이 있으면: 해당 피드백들을 하이라이트 표시하여 크리에이터가 재반영해야 함을 안내
- 값이
null이면: 일반 피드백 목록으로 표시
hasAdditionalReviewRequest 필드
기업이 추가 검수 요청을 했는지 여부를 나타냅니다.
true: 기업이 검수 추가 요청을 한 상태 (maxFeedbackCount > 1)false: 일반 검수 진행 중 (maxFeedbackCount = 1)
이 값이 true이면 크리에이터에게 추가 검수 요청이 있음을 안내할 수 있습니다.
needsResubmission 필드
크리에이터가 현재 제출물을 수정하거나 재제출해야 하는지를 나타냅니다.
true: 재제출 필요 (제출물이 REJECTED 상태이거나 미제출)false: 제출 완료, 기업 검수 대기 중 또는 승인 완료 (REVIEWING/APPROVED)
프론트엔드 활성화 조건: needsResubmission === true일 때만 편집/제출 버튼 활성화