Admin APIAdmin Campaign API
PUT /ai/admin/campaigns/{campaignNo}
캠페인 수정
캠페인 수정
캠페인의 모든 정보를 수정합니다. null이 아닌 필드만 업데이트됩니다.
HTTP 요청
PUT /ai/admin/campaigns/{campaignNo}
Authorization: Bearer {access_token}
Content-Type: application/jsonPath Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | long | 예 | 캠페인 번호 |
Request Body
{
// === 기본 정보 ===
"title": "수정된 캠페인명",
"category": "BEAUTY",
"sns": "1",
"snsContentFormat": "REEL",
"campaignType": "PRODUCT_SPONSORSHIP",
"productName": "여름 뷰티 제품",
"productUrl": "https://example.com/product",
"nation": "KR",
"shootingConditions": "실내 촬영 필수",
"keywords": "뷰티,여름,화장품",
"description": "캠페인 설명",
"productDescription": "상품 설명",
"isVisitRequired": "false",
"etcNotes": "기타 메모",
"averageUnitPrice": "100000",
"person": "10",
"charge": "1000000",
"currency": "KRW",
"differential": false,
// === 수수료 정책 ===
"feePolicyType": "COST_PLUS_FEE",
"feeType": "PERCENT",
"feeValue": 10,
// === 이미지 ===
"imagePath": "https://s3.../thumbnail.jpg",
"productImagePath": "https://s3.../image1.jpg,https://s3.../image2.jpg",
// === 제출물 설정 ===
"deliveryType": "DELIVERY",
"firstReviewTypes": ["SCRIPT", "HASHTAG"],
"secondReviewTypes": ["VIDEO"],
"finalSubmissionTypes": ["INSTAGRAM_REEL", "INSTAGRAM_POST"],
// === 대시보드 설정 ===
"pricingType": "INDIVIDUAL",
"secondaryUsageMonths": 6,
"secondaryUsageOption": "SNS_AD",
"showPrice": true,
"listMode": "EXCLUDE",
"showLanding": true,
"showDashboard": true,
// === 담당자 설정 ===
"managerNo": 1,
"managerName": "홍길동",
"managerPhone": "010-1234-5678",
"managerEmail": "manager@example.com",
// === 계약 설정 ===
"campaignContractType": "STANDARD",
"campaignContractDescription": "계약 내용",
"caution": "주의사항",
// === 일정 설정 ===
"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",
"scriptSubmissionStartDate": "2024-02-16T00:00:00",
"scriptSubmissionEndDate": "2024-02-22T23:59:59",
"scriptReviewStartDate": "2024-02-23T00:00:00",
"scriptReviewEndDate": "2024-02-24T23:59:59",
"draftReviewStartDate": "2024-02-25T00:00:00",
"draftReviewEndDate": "2024-02-28T23: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"
}Request Body 필드 설명
기본 정보
| 필드 | 타입 | 설명 |
|---|---|---|
title | string | 캠페인 제목 |
category | CategoryType | 캠페인 카테고리 (아래 enum 값 참고) |
sns | string | SNS 플랫폼 (1: Instagram, 2: YouTube 등) |
snsContentFormat | SnsContentFormat | 콘텐츠 포맷 (REEL, FEED, STORY 등) |
campaignType | CampaignType | 캠페인 제공종류 |
productName | string | 상품명 |
productUrl | string | 상품 URL |
nation | string | 국가 |
shootingConditions | string | 촬영 조건 |
keywords | string | 키워드 |
description | string | 캠페인 설명 |
productDescription | string | 상품 설명 |
isVisitRequired | string | 방문 필요 여부 |
etcNotes | string | 기타 메모 |
averageUnitPrice | string | 개별 단가 |
person | string | 모집인원 |
charge | string | 비용 |
currency | string | 화폐단위 |
differential | boolean | 차등지급 여부 |
category 필드 주의사항: 반드시 영문 enum 코드를 사용해야 합니다. 한글 값(예: "일상", "뷰티")은 에러가 발생합니다.
CategoryType enum 값
| 값 | 설명 |
|---|---|
BEAUTY | 뷰티 |
FASHION | 패션 |
DAILY | 일상 |
TRAVEL | 여행 |
KIDS | 육아 |
FOOD | 푸드 |
DEFAULT | 기본 |
RELATIONSHIP | 연애/결혼 |
INTERIOR | 인테리어 |
FOREIGN_CULTURE | 해외문화 |
EDUCATION_SELF_DEVELOPMENT | 교육/자기계발 |
BOOK | 도서 |
PERFORMANCE_EXHIBITION | 공연/전시 |
FINANCE_BUSINESS | 재테크/비즈니스 |
IT | IT |
PET | 반려동물 |
COOKING | 요리 |
GAME | 게임 |
SPORTS | 스포츠 |
PHOTOGRAPHY | 사진 |
MEDICINE | 의학 |
SOCIETY_POLITICS | 사회/정치 |
MOVIE_DRAMA | 영화/드라마 |
COMIC | 만화 |
HEALTH | 건강 |
CAREER | 커리어 |
MUSIC | 음악 |
ENVIRONMENT | 환경 |
GROCERY | 식료품 |
수수료 정책
| 필드 | 타입 | 설명 |
|---|---|---|
feePolicyType | FeePolicyType | 수수료 정책 타입 (ACTUAL_COST, COST_PLUS_FEE, TOTAL_AMOUNT) |
feeType | FeeType | 수수료 유형 (PERCENT, FIXED) |
feeValue | integer | 수수료 값 |
이미지
| 필드 | 타입 | 설명 |
|---|---|---|
imagePath | string | 썸네일 이미지 경로 |
productImagePath | string | 제품 이미지 경로 (콤마 구분) |
제출물 설정
| 필드 | 타입 | 설명 |
|---|---|---|
deliveryType | DeliveryType | 배송 타입 (DELIVERY, NO_DELIVERY) |
firstReviewTypes | Set<SubmissionItemType> | 1차 검수 필수 제출물 타입 |
secondReviewTypes | Set<SubmissionItemType> | 2차 검수 필수 제출물 타입 |
finalSubmissionTypes | Set<FinalSubmissionType> | 최종 제출물 타입 |
대시보드 설정
| 필드 | 타입 | 설명 |
|---|---|---|
pricingType | PricingType | 단가 표기 타입 (INDIVIDUAL, SINGLE) |
secondaryUsageMonths | integer | 2차 활용 기간 (개월) |
secondaryUsageOption | string | 2차 활용 옵션 |
showPrice | boolean | 가격 노출 여부 |
listMode | string | 리스트 모드 (SELECT, EXCLUDE) |
showLanding | boolean | 랜딩 페이지 노출 여부 |
showDashboard | boolean | 대시보드 노출 여부 |
담당자 설정
| 필드 | 타입 | 설명 |
|---|---|---|
managerNo | long | 담당자 번호 (기존 담당자 수정 시 사용, 없으면 이름으로 조회/신규 생성) |
managerName | string | 담당자 이름 |
managerPhone | string | 담당자 연락처 |
managerEmail | string | 담당자 이메일 |
담당자 처리 로직
managerNo가 있으면 해당 담당자 조회 후 정보 업데이트managerNo가 없고managerName이 있으면 같은 이름의 담당자 조회, 없으면 신규 생성
계약 설정
| 필드 | 타입 | 설명 |
|---|---|---|
campaignContractType | string | 계약 형식 |
campaignContractDescription | string | 계약 내용 |
caution | string | 주의사항 |
일정 설정
| 필드 | 타입 | 설명 |
|---|---|---|
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 | 정산 종료일 |
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "캠페인이 수정되었습니다.",
"data": null
}에러 응답 - 유효하지 않은 카테고리 (404)
{
"status": 404,
"code": "INVALID_DATA",
"message": "유효하지 않은 카테고리입니다: 일상",
"data": null
}