Admin APIAdmin Business Pending Campaigns API
GET /review-campaigns — 검수 미진행 캠페인
크리에이터는 제출했는데 기업이 검수를 안 한 1·2차 검수 대기 캠페인을 마감 임박순으로 조회합니다.
검수 미진행 캠페인 목록
크리에이터가 제작물 제출을 완료(submissionItems 전부 isSubmitted=true)했는데 기업이 검수 처리를 안 한 상태의 캠페인을 조회합니다.
- 1차 검수 미진행: round 1 (또는 1회검수의 경우 round 2) 의
ContentReview.status == PENDING - 2차 검수 미진행: 2회검수 캠페인 한정. round 1 이
APPROVED이고 round 2 가PENDING
1회검수 컨벤션: 1회검수 캠페인은 ContentReview 가 reviewRound=2 단일 행으로 저장됩니다. 응답의 round 필드는 1차 검수 미진행이면 1, 2차 검수 미진행이면 2 로 직접 표기되므로 호출자는 이 차이를 신경 쓸 필요가 없습니다.
정렬: 신청자별 가장 이른 검수 마감일(oldestDeadline) ASC. 마감이 임박한 캠페인이 위로 올라옵니다.
HTTP 요청
GET /ai/admin/pending/review-campaigns
Authorization: Bearer {access_token}Query Parameters
| 파라미터 | 타입 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
campaignNos | int[] | 아니오 | 활성 캠페인 전체 | multi 지원 (?campaignNos=1&campaignNos=2). CAMPAIGN_COMPLETED 단계는 자동 제외. |
businessId | string | 아니오 | 특정 기업(Member.id) 캠페인만 조회 | |
page | int | 아니오 | 0 | Spring Pageable |
size | int | 아니오 | 20 |
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "검수 미진행 캠페인 조회 성공",
"data": {
"summary": {
"totalCampaigns": 12,
"totalApplicants": 47
},
"page": {
"number": 0,
"size": 20,
"totalElements": 12,
"totalPages": 1
},
"content": [
{
"campaignNo": 2350,
"campaignTitle": "솔루션랩 2회 배송 캠페인",
"businessId": "biz-member-id",
"businessName": "솔루션랩",
"managers": [
{ "managerNo": 1, "name": "홍길동", "email": "hong@example.com", "phone": "010-1234-5678", "isDefault": true }
],
"registeredAt": "2026-04-10T10:00:00",
"oldestDeadline": "2026-04-30T18:00:00",
"pendingCount": 2,
"pendingApplicants": [
{
"applicationId": 9001,
"influenceId": 555,
"nickname": "creator-a",
"round": 1,
"deadline": "2026-04-30T18:00:00"
},
{
"applicationId": 9002,
"influenceId": 556,
"nickname": "creator-b",
"round": 2,
"deadline": "2026-05-02T18:00:00"
}
]
}
]
}
}응답 필드
캠페인 row
| 필드 | 타입 | 설명 |
|---|---|---|
campaignNo / campaignTitle | Integer / string | 캠페인 식별자 |
businessId / businessName | string / string? | 기업 |
managers | array | 캠페인 담당자 목록(N:M, 동등). 각 항목 { managerNo, name, email, phone, isDefault }. 미지정 시 빈 배열 |
registeredAt | LocalDateTime? | 캠페인 등록일 |
oldestDeadline | LocalDateTime? | pendingApplicants 중 가장 이른 deadline. 캠페인 정렬 기준. |
pendingCount | int | 검수 미진행 신청자 수 |
pendingApplicants | array | 신청자 drill-down |
pendingApplicants[] 행
| 필드 | 타입 | 설명 |
|---|---|---|
applicationId | Long | 신청 ID |
influenceId | Integer | 인플루언서 ID (Influence.no) |
nickname | string | 닉네임 |
round | Integer | 1 = 1차 검수 미진행, 2 = 2차 검수 미진행 |
deadline | LocalDateTime? | 검수 마감일. 1차 hit 의 deadline 은 2회검수면 SCRIPT_REVIEW_DEADLINE, 1회검수면 CONTENT_REVIEW_DEADLINE. 2차 hit 은 항상 CONTENT_REVIEW_DEADLINE. |
summary
| 필드 | 설명 |
|---|---|
totalCampaigns | 검수 미진행이 있는 캠페인 총 개수 (필터 적용 후) |
totalApplicants | 모든 캠페인의 pendingCount 합 |
예시
활성 캠페인 전체에서 검수 미진행 조회
GET /ai/admin/pending/review-campaigns특정 기업 캠페인만
GET /ai/admin/pending/review-campaigns?businessId=biz-member-id특정 캠페인 2개로 한정
GET /ai/admin/pending/review-campaigns?campaignNos=2350&campaignNos=2401