Admin APIAdmin Campaign API
PATCH /ai/admin/campaigns/{campaignNo}
캠페인 생성
캠페인 생성
관리자가 새 캠페인을 생성합니다. 피그마 디자인 5단계 폼 전체를 담는 API입니다.
HTTP 요청
PATCH /ai/admin/campaigns/{campaignNo}
Authorization: Bearer {access_token}
Content-Type: application/jsonPath Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | long | 예 | 캠페인 번호 |
Request Body
{
"guidelineVersion": 1,
// === Step 1: 게시물 생성 (기본 정보) ===
"businessId": "business123",
"campaignType": "PRODUCT_SPONSORSHIP",
"productName": "여름 뷰티 제품",
"productUrl": "https://example.com/product",
"etcNotes": "기타 메모 내용",
"currency": "KRW",
"differential": false,
// === 수수료 정책 ===
"feePolicyType": "COST_PLUS_FEE",
"feeType": "PERCENT",
"feeValue": 10,
"averageUnitPrice": "100000",
"person": "10",
"imagePath": "https://s3.../thumbnail.jpg",
"productImagePath": "https://s3.../image1.jpg,https://s3.../image2.jpg",
"campaignContractType": "STANDARD",
"campaignContractDescription": "계약 내용 설명",
// === Step 2: 제출물 설정 ===
"deliveryType": "DOMESTIC",
"firstReviewTypes": ["SCRIPT", "HASHTAG"],
"secondReviewTypes": ["VIDEO"],
"finalSubmissionTypes": ["INSTAGRAM_REEL", "INSTAGRAM_POST"],
// === Step 3: 대시보드 생성 ===
"secondaryUsageMonths": 6,
"secondaryUsageOption": "SNS_AD",
// === Step 4: 일정 설정 ===
"isAutoSchedule": false,
"recruitmentStartDate": "2024-01-15T00:00:00",
"recruitmentEndDate": "2024-01-31T23:59:59",
"contentStartDate": "2024-02-01T00:00:00",
"contentEndDate": "2024-02-28T23:59:59",
"exclusionSelectionStartDate": "2024-02-01T00:00:00",
"exclusionSelectionEndDate": "2024-02-05T23:59:59",
"contractCreationStartDate": "2024-02-06T00:00:00",
"contractCreationEndDate": "2024-02-10T23:59:59",
"draftSubmissionStartDate": "2024-02-11T00:00:00",
"draftSubmissionEndDate": "2024-02-15T23:59:59",
"draftReviewStartDate": "2024-02-16T00:00:00",
"draftReviewEndDate": "2024-02-18T23:59:59",
"videoProductionStartDate": "2024-02-19T00:00:00",
"videoProductionEndDate": "2024-02-25T23:59:59",
"videoReviewStartDate": "2024-02-26T00:00:00",
"videoReviewEndDate": "2024-02-28T23:59:59",
"uploadStartDate": "2024-03-01T00:00:00",
"uploadEndDate": "2024-03-05T23:59:59",
"uploadApprovalStartDate": "2024-03-06T00:00:00",
"uploadApprovalEndDate": "2024-03-10T23:59:59",
"settlementStartDate": "2024-03-11T00:00:00",
"settlementEndDate": "2024-03-15T23:59:59",
// === Step 5: 주의사항 ===
"caution": "제품 촬영 시 주의사항...",
// === Step 6: 담당자 설정 ===
"managerName": "홍길동",
"managerPhone": "010-1234-5678",
"managerEmail": "manager@example.com"
}Request Body 필드 설명
가이드라인 버전
| 필드 | 타입 | 기본값 | 설명 |
|---|---|---|---|
guidelineVersion | integer | 1 | 가이드라인 버전. 1: v1 AI 가이드라인 생성, 2: v2 AI 가이드라인 생성 (appeal-points, concept, hooks) |
Step 1: 게시물 생성 (기본 정보)
| 필드 | 타입 | 설명 |
|---|---|---|
businessId | string | 기업 회원 ID |
campaignType | CampaignType | 캠페인 제공종류 (제품협찬, 유료광고 등) |
productName | string | 상품명 |
productUrl | string | 상품 URL |
etcNotes | string | 기타 메모 |
currency | string | 화폐단위 |
differential | boolean | 차등지급 여부 (개별가/단일가) |
feePolicyType | FeePolicyType | 수수료 정책 타입 (ACTUAL_COST: 실비, COST_PLUS_FEE: 실비+수수료, TOTAL_AMOUNT: 총액) |
feeType | FeeType | 수수료 유형 (PERCENT: %, FIXED: 원) |
feeValue | integer | 수수료 값 |
averageUnitPrice | string | 개별 단가 |
person | string | 모집인원 |
imagePath | string | 썸네일 이미지 경로 |
productImagePath | string | 제품 이미지 경로 (콤마 구분) |
campaignContractType | string | 계약 형식 |
campaignContractDescription | string | 계약 내용 |
Step 2: 제출물 설정
| 필드 | 타입 | 설명 |
|---|---|---|
deliveryType | DeliveryType | 배송 여부 |
firstReviewTypes | Set<SubmissionItemType> | 1차 검수 필수 제출물 타입 |
secondReviewTypes | Set<SubmissionItemType> | 2차 검수 필수 제출물 타입 |
finalSubmissionTypes | Set<FinalSubmissionType> | 최종 제출물 타입 |
Step 3: 대시보드 생성
| 필드 | 타입 | 설명 |
|---|---|---|
secondaryUsageMonths | integer | 2차 활용 기간 (개월) |
secondaryUsageOption | string | 2차 활용 옵션 |
Step 4: 일정 설정
| 필드 | 타입 | 설명 |
|---|---|---|
isAutoSchedule | boolean | 자동 날짜 설정 유무 |
recruitmentStartDate | datetime | 모집 시작일 |
recruitmentEndDate | datetime | 모집 종료일 |
contentStartDate | datetime | 콘텐츠 등록 시작일 |
contentEndDate | datetime | 콘텐츠 등록 종료일 |
exclusionSelectionStartDate | datetime | 제외인원 선택 시작일 |
exclusionSelectionEndDate | datetime | 제외인원 선택 종료일 |
contractCreationStartDate | datetime | 계약서 작성 시작일 |
contractCreationEndDate | datetime | 계약서 작성 종료일 |
draftSubmissionStartDate | datetime | 제품 배송 시작일 |
draftSubmissionEndDate | datetime | 제품 배송 종료일 |
scriptSubmissionStartDate | datetime | 스크립트 제출 시작일 (2회 검수 전용) |
scriptSubmissionEndDate | datetime | 스크립트 제출 종료일 (2회 검수 전용) |
scriptReviewStartDate | datetime | 스크립트 검수 및 제작 허용 시작일 (2회 검수 전용) |
scriptReviewEndDate | datetime | 스크립트 검수 및 제작 허용 종료일 (2회 검수 전용) |
draftReviewStartDate | datetime | 제작물 제출 시작일 |
draftReviewEndDate | datetime | 제작물 제출 종료일 |
videoProductionStartDate | datetime | 제작물 검수 및 업로드 허용 시작일 |
videoProductionEndDate | datetime | 제작물 검수 및 업로드 허용 종료일 |
videoReviewStartDate | datetime | 재제출 or 업로드 시작일 |
videoReviewEndDate | datetime | 재제출 or 업로드 종료일 |
uploadStartDate | datetime | 최종 업로드 허용 시작일 |
uploadEndDate | datetime | 최종 업로드 허용 종료일 |
uploadApprovalStartDate | datetime | 최종업로드 시작일 |
uploadApprovalEndDate | datetime | 최종업로드 종료일 |
settlementStartDate | datetime | 정산 시작일 |
settlementEndDate | datetime | 정산 종료일 |
Step 5: 주의사항
| 필드 | 타입 | 설명 |
|---|---|---|
caution | string | 주의사항 |
Step 6: 담당자 설정
| 필드 | 타입 | 설명 |
|---|---|---|
managerName | string | 담당자 이름 (같은 이름의 담당자가 기업에 존재하면 기존 담당자 사용, 없으면 신규 생성) |
managerPhone | string | 담당자 연락처 |
managerEmail | string | 담당자 이메일 |
응답
성공 응답 (201 Created)
{
"status": 201,
"code": null,
"message": "캠페인이 생성되었습니다.",
"data": null
}