SaaS API
Campaign Schedule API
캠페인 일정 관련 API
Campaign Schedule API
캠페인 일정 조회 API입니다.
Base URL: /ai/campaign-schedules
인증 정보
| 항목 | 값 |
|---|---|
| 인증 필요 | 예 |
| 인증 방식 | JWT Bearer Token |
엔드포인트 목록
| 메서드 | 경로 | 설명 | 인증 |
|---|---|---|---|
GET | /ai/campaign-schedules/{campaignNo} | 캠페인 일정 조회 | 필요 |
GET | /ai/campaign-schedules/applications/{applicationId} | 크리에이터 개별 일정 조회 | 필요 |
API 상세
캠페인 일정 조회
캠페인 ID로 해당 캠페인의 일정 목록을 조회합니다. 1회검수(10단계) / 2회검수(12단계) 여부를 isDoubleReview로 구분합니다.
HTTP 요청
GET /ai/campaign-schedules/{campaignNo}
Authorization: Bearer {access_token}Path Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | int | 예 | 캠페인 번호 |
응답
성공 응답 (200 OK) - 1회검수 캠페인
{
"status": 200,
"code": null,
"message": "캠페인 일정 조회가 성공하였습니다.",
"data": {
"schedules": [
{
"scheduleId": 1,
"phase": "RECRUITMENT",
"phaseDescription": "모집",
"startDate": "2026-03-01T00:00:00",
"endDate": "2026-03-15T00:00:00",
"completedDate": null,
"isCompleted": true,
"isDelayed": false,
"memo": null,
"createdAt": "2026-03-01T00:00:00",
"updatedAt": null
},
{
"scheduleId": 2,
"phase": "EXCLUSION_SELECTION",
"phaseDescription": "협업 제안",
"startDate": "2026-03-16T00:00:00",
"endDate": "2026-03-18T00:00:00",
"completedDate": null,
"isCompleted": false,
"isDelayed": false,
"memo": null,
"createdAt": "2026-03-01T00:00:00",
"updatedAt": null
}
],
"isDoubleReview": false,
"totalPhases": 10
}
}성공 응답 (200 OK) - 2회검수 캠페인
{
"status": 200,
"code": null,
"message": "캠페인 일정 조회가 성공하였습니다.",
"data": {
"schedules": [
{
"scheduleId": 1,
"phase": "RECRUITMENT",
"phaseDescription": "모집",
"startDate": "2026-03-01T00:00:00",
"endDate": "2026-03-15T00:00:00",
"completedDate": null,
"isCompleted": false,
"isDelayed": false,
"memo": null,
"createdAt": "2026-03-01T00:00:00",
"updatedAt": null
}
],
"isDoubleReview": true,
"totalPhases": 12
}
}Response 스키마 (ScheduleListResponse)
| 필드명 | 타입 | 설명 |
|---|---|---|
schedules | CampaignScheduleResponseDto[] | 일정 목록 |
isDoubleReview | boolean | 2회검수 캠페인 여부 (true: 12단계, false: 10단계) |
totalPhases | int | 총 단계 수 (10 또는 12) |
CampaignScheduleResponseDto
| 필드명 | 타입 | 설명 |
|---|---|---|
scheduleId | long | 일정 ID |
phase | string | 캠페인 단계 enum |
phaseDescription | string | 단계 한글 설명 |
startDate | datetime | 단계 시작일 |
endDate | datetime | 단계 종료일 |
completedDate | datetime | 실제 완료일 (미완료 시 null) |
isCompleted | boolean | 완료 여부 |
isDelayed | boolean | 지연 여부 |
memo | string | 메모 |
createdAt | datetime | 생성일 |
updatedAt | datetime | 수정일 |
크리에이터 개별 일정 조회
신청 ID로 해당 크리에이터의 개별 일정 목록을 조회합니다. 플로우 진행에 따라 일정이 동적으로 추가/갱신됩니다.
HTTP 요청
GET /ai/campaign-schedules/applications/{applicationId}
Authorization: Bearer {access_token}Path Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
applicationId | long | 예 | 크리에이터 신청 ID |
응답
성공 응답 (200 OK) - 1회검수 캠페인 (전체 플로우 완료 시)
{
"status": 200,
"code": null,
"message": "크리에이터 개별 일정 조회가 성공하였습니다.",
"data": {
"schedules": [
{
"id": 1,
"phase": "CONTENT_SUBMISSION_DEADLINE",
"phaseDescription": "제작물 제출 마감",
"deadline": "2026-04-05T14:00:00",
"createdAt": "2026-04-01T14:00:00",
"updatedAt": null
},
{
"id": 2,
"phase": "CONTENT_REVIEW_DEADLINE",
"phaseDescription": "제작물 검수 마감",
"deadline": "2026-04-09T10:00:00",
"createdAt": "2026-04-04T10:00:00",
"updatedAt": null
},
{
"id": 3,
"phase": "FEEDBACK_DEADLINE",
"phaseDescription": "피드백 반영 마감",
"deadline": "2026-04-13T15:00:00",
"createdAt": "2026-04-09T15:00:00",
"updatedAt": null
},
{
"id": 4,
"phase": "UPLOAD_ALLOWED_DATE",
"phaseDescription": "업로드 허용일",
"deadline": "2026-04-20T00:00:00",
"createdAt": "2026-04-14T10:00:00",
"updatedAt": null
}
],
"applicationId": 100
}
}성공 응답 (200 OK) - 2회검수 캠페인 (전체 플로우 완료 시)
{
"status": 200,
"code": null,
"message": "크리에이터 개별 일정 조회가 성공하였습니다.",
"data": {
"schedules": [
{
"id": 1,
"phase": "SCRIPT_SUBMISSION_DEADLINE",
"phaseDescription": "스크립트 제출 마감",
"deadline": "2026-04-12T00:00:00",
"createdAt": "2026-04-10T00:00:00",
"updatedAt": null
},
{
"id": 2,
"phase": "SCRIPT_REVIEW_DEADLINE",
"phaseDescription": "스크립트 검수 마감",
"deadline": "2026-04-16T09:00:00",
"createdAt": "2026-04-12T09:00:00",
"updatedAt": null
},
{
"id": 3,
"phase": "CONTENT_SUBMISSION_DEADLINE",
"phaseDescription": "제작물 제출 마감",
"deadline": "2026-04-20T15:00:00",
"createdAt": "2026-04-16T15:00:00",
"updatedAt": null
},
{
"id": 4,
"phase": "CONTENT_REVIEW_DEADLINE",
"phaseDescription": "제작물 검수 마감",
"deadline": "2026-04-28T10:00:00",
"createdAt": "2026-04-24T10:00:00",
"updatedAt": null
},
{
"id": 5,
"phase": "FEEDBACK_DEADLINE",
"phaseDescription": "피드백 반영 마감",
"deadline": "2026-05-02T14:00:00",
"createdAt": "2026-04-28T14:00:00",
"updatedAt": null
},
{
"id": 6,
"phase": "UPLOAD_ALLOWED_DATE",
"phaseDescription": "업로드 허용일",
"deadline": "2026-05-10T00:00:00",
"createdAt": "2026-05-03T10:00:00",
"updatedAt": null
}
],
"applicationId": 200
}
}일정은 한 번에 전부 생성되지 않습니다. 플로우 단계마다 해당 일정만 추가됩니다.
- 선정 시: 제출 마감만 생성 (1회검수:
CONTENT_SUBMISSION_DEADLINE, 2회검수:SCRIPT_SUBMISSION_DEADLINE) - 제출 시: 검수 마감 추가
- 피드백 시: 피드백 마감 추가
- 업로드일 설정 시: 업로드 허용일 추가
- 같은 phase는 새 row가 생기지 않고 기존 deadline이 갱신됩니다.
Response 스키마 (ListResponse)
| 필드명 | 타입 | 설명 |
|---|---|---|
schedules | ApplicationScheduleResponseDto[] | 일정 목록 |
applicationId | long | 신청 ID |
ApplicationScheduleResponseDto
| 필드명 | 타입 | 설명 |
|---|---|---|
id | long | 일정 ID |
phase | string | 일정 단계 enum |
phaseDescription | string | 단계 한글 설명 |
deadline | datetime | 마감일 |
createdAt | datetime | 생성일 |
updatedAt | datetime | 수정일 |
ApplicationSchedulePhase (개별 일정 단계)
| Phase | 설명 | 비고 |
|---|---|---|
SCRIPT_SUBMISSION_DEADLINE | 스크립트 제출 마감 | 2회검수만 |
SCRIPT_REVIEW_DEADLINE | 스크립트 검수 마감 | 2회검수만 |
CONTENT_SUBMISSION_DEADLINE | 제작물 제출 마감 | |
CONTENT_REVIEW_DEADLINE | 제작물 검수 마감 | |
FEEDBACK_DEADLINE | 피드백 반영 마감 | |
UPLOAD_ALLOWED_DATE | 업로드 허용일 |
일정 계산 규칙
1회검수 (비배송)
| 단계 | 기준 | 계산 |
|---|---|---|
| 제작물 제출 마감 | 선정 시 | 선정일 + 4일 |
| 제작물 검수 마감 | 크리에이터 제출 시 | 제출일 + 영업일 2일 |
| 피드백 반영 마감 | 기업 피드백 시 | 피드백일 + 4일 |
| 업로드 허용일 | 기업 설정 시 | 기업 입력값 |
1회검수 (배송) — 제작물 제출 마감만 다름: 배송마감예상일 + 4일
2회검수 (비배송)
| 단계 | 기준 | 계산 |
|---|---|---|
| 스크립트 제출 마감 | 선정 시 | 선정일 + 2일 |
| 스크립트 검수 마감 | 크리에이터 제출 시 | 제출일 + 영업일 2일 |
| 제작물 제출 마감 | 스크립트 승인 시 | 승인일 + 4일 |
| 제작물 검수 마감 | 크리에이터 제출 시 | 제출일 + 영업일 2일 |
| 피드백 반영 마감 | 기업 피드백 시 | 피드백일 + 4일 |
| 업로드 허용일 | 기업 설정 시 | 기업 입력값 |
2회검수 (배송) — 스크립트 제출 마감만 다름: 배송마감예상일 + 2일
영업일 = 토/일 제외 (공휴일 미포함). 배송마감예상일 = 캠페인 일정의 DRAFT_SUBMISSION phase endDate.
API 테스트 - 크리에이터 개별 일정
캠페인 단계 (CampaignPhase)
1회검수 캠페인 (10단계)
| 순서 | Phase | 설명 | 기본 기간 |
|---|---|---|---|
| 1 | RECRUITMENT | 모집 | 설정에 따름 |
| 2 | EXCLUSION_SELECTION | 협업 제안 | 2일 |
| 3 | CONTRACT_CREATION | 계약서 작성 | 2일 |
| 4 | DRAFT_SUBMISSION | 제품 배송 | 4일 |
| 5 | DRAFT_REVIEW | 제작물 제출 | 4일 |
| 6 | VIDEO_PRODUCTION | 제작물 검수 및 업로드 허용 | 2일 |
| 7 | VIDEO_REVIEW | 재제출 or 업로드 | 3일 |
| 8 | UPLOAD | 최종 업로드 허용 | 2일 |
| 9 | UPLOAD_APPROVAL | 최종업로드 | 3일 |
| 10 | SETTLEMENT | 정산 | 20일 |
2회검수 캠페인 (12단계)
| 순서 | Phase | 설명 | 기본 기간 |
|---|---|---|---|
| 1 | RECRUITMENT | 모집 | 설정에 따름 |
| 2 | EXCLUSION_SELECTION | 협업 제안 | 2일 |
| 3 | CONTRACT_CREATION | 계약서 작성 | 2일 |
| 4 | DRAFT_SUBMISSION | 제품 배송 | 4일 |
| 5 | SCRIPT_SUBMISSION | 스크립트 제출 | 7일 |
| 6 | SCRIPT_REVIEW | 스크립트 검수 및 제작 허용 | 2일 |
| 7 | DRAFT_REVIEW | 제작물 제출 | 4일 |
| 8 | VIDEO_PRODUCTION | 제작물 검수 및 업로드 허용 | 2일 |
| 9 | VIDEO_REVIEW | 재제출 or 업로드 | 3일 |
| 10 | UPLOAD | 최종 업로드 허용 | 2일 |
| 11 | UPLOAD_APPROVAL | 최종업로드 | 3일 |
| 12 | SETTLEMENT | 정산 | 20일 |
2회검수 캠페인은 firstReviewTypes(1차 검수 필수 제출물)가 설정된 캠페인입니다. 스크립트 제출/검수 단계가 제품 배송과 제작물 제출 사이에 추가됩니다.