Admin Campaign API
관리자 캠페인 관리 API
Admin Campaign API
관리자 캠페인 관리 API입니다.
Base URL: /ai/admin/campaigns
이 API는 관리자 권한이 필요합니다.
엔드포인트 목록
캠페인 CRUD
| 메서드 | 경로 | 설명 |
|---|---|---|
PATCH | /ai/admin/campaigns/{campaignNo} | 캠페인 생성 |
PUT | /ai/admin/campaigns/{campaignNo} | 캠페인 수정 |
GET | /ai/admin/campaigns/{campaignNo} | 캠페인 상세 조회 |
GET | /ai/admin/campaigns | 캠페인 목록 조회 |
설정 업데이트
| 메서드 | 경로 | 설명 |
|---|---|---|
PATCH | /ai/admin/campaigns/{campaignNo}/dashboard | 대시보드 설정 업데이트 |
PATCH | /ai/admin/campaigns/{campaignNo}/schedule | 일정 설정 업데이트 |
PATCH | /ai/admin/campaigns/{campaignNo}/step | 캠페인 진행 상태 변경 |
PATCH | /ai/admin/campaigns/{campaignNo}/substep | 캠페인 진행 단계(SubStep) 변경 |
조회
| 메서드 | 경로 | 설명 |
|---|---|---|
GET | /ai/admin/campaigns/{campaignNo}/schedules | 캠페인 일정 목록 조회 |
GET | /ai/admin/campaigns/{campaignNo}/images | 캠페인 이미지 정보 조회 |
API 상세
캠페인 생성
관리자가 새 캠페인을 생성합니다. 피그마 디자인 5단계 폼 전체를 담는 API입니다.
HTTP 요청
PATCH /ai/admin/campaigns/{campaignNo}
Authorization: Bearer {access_token}
Content-Type: application/jsonPath Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | long | 예 | 캠페인 번호 |
Request Body
{
// === 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 필드 설명
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 | 초안 전송 종료일 |
draftReviewStartDate | datetime | 초안 검수 시작일 |
draftReviewEndDate | datetime | 초안 검수 종료일 |
videoProductionStartDate | datetime | 영상 제작 시작일 |
videoProductionEndDate | datetime | 영상 제작 종료일 |
videoReviewStartDate | datetime | 영상 검수 시작일 |
videoReviewEndDate | datetime | 영상 검수 종료일 |
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
}캠페인 수정
캠페인의 모든 정보를 수정합니다. 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",
"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"
}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 | 초안 전송 종료일 |
draftReviewStartDate | datetime | 초안 검수 시작일 |
draftReviewEndDate | datetime | 초안 검수 종료일 |
videoProductionStartDate | datetime | 영상 제작 시작일 |
videoProductionEndDate | datetime | 영상 제작 종료일 |
videoReviewStartDate | datetime | 영상 검수 시작일 |
videoReviewEndDate | datetime | 영상 검수 종료일 |
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
}캠페인 상세 조회
캠페인 상세 정보를 조회합니다.
HTTP 요청
GET /ai/admin/campaigns/{campaignNo}
Authorization: Bearer {access_token}응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "캠페인 상세 조회 성공",
"data": {
"no": 123,
"businessId": "business123",
"businessName": "(주)글로우비",
"title": "여름 뷰티 캠페인",
"category": "BEAUTY",
"sns": "instagram",
"snsContentFormat": "REEL",
"campaignType": "PRODUCT_SPONSORSHIP",
"productName": "여름 뷰티 제품",
"productUrl": "https://example.com/product",
"averageUnitPrice": "100000",
"person": "10",
"charge": "1000000",
"feePolicyType": "COST_PLUS_FEE",
"feeType": "PERCENT",
"feeValue": 10,
"campaignSubStep": "CREATOR_RECRUIT",
"guidelineStatus": "COMPLETED",
"managerNo": 1,
"managerName": "홍길동",
"managerPhone": "010-1234-5678",
"managerEmail": "manager@example.com",
"schedules": [...]
}
}응답 필드 설명
| 필드 | 타입 | 설명 |
|---|---|---|
no | integer | 캠페인 번호 |
businessId | string | 기업 회원 ID |
businessName | string | 기업명 |
title | string | 캠페인 제목 |
person | string | 모집인원 |
charge | string | 비용 |
feePolicyType | FeePolicyType | 수수료 정책 타입 (ACTUAL_COST: 실비, COST_PLUS_FEE: 실비+수수료, TOTAL_AMOUNT: 총액) |
feeType | FeeType | 수수료 유형 (PERCENT: %, FIXED: 원) |
feeValue | integer | 수수료 값 |
campaignSubStep | CampaignSubStep | 캠페인 진행 상태 |
guidelineStatus | GuidelineStatus | 가이드라인 상태 (REQUESTED: 요청됨, DRAFT: 초안, COMPLETED: 완성) |
managerNo | long | 담당자 번호 (담당자 미지정 시 null) |
managerName | string | 담당자 이름 (담당자 미지정 시 기업 기본 담당자 정보) |
managerPhone | string | 담당자 연락처 |
managerEmail | string | 담당자 이메일 |
캠페인 목록 조회
캠페인 목록을 조회합니다. businessId로 필터링 가능합니다.
HTTP 요청
GET /ai/admin/campaigns?businessId={businessId}
Authorization: Bearer {access_token}Query Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
businessId | string | 아니오 | 기업 회원 ID |
대시보드 설정 업데이트
캠페인의 대시보드 설정을 업데이트합니다.
HTTP 요청
PATCH /ai/admin/campaigns/{campaignNo}/dashboard
Authorization: Bearer {access_token}
Content-Type: application/jsonRequest Body
{
"reviewCount": 2,
"firstReviewTypes": ["SCRIPT_VIDEO"],
"secondReviewTypes": ["VIDEO", "CAPTION", "HASHTAG"],
"finalSubmissionTypes": ["CONTENT_LINK", "PARTNERSHIP_CODE", "CLEAN_FILE"],
"pricingType": "INDIVIDUAL",
"secondaryUsageMonths": 6,
"secondaryUsageOption": "SNS_AD",
"showPrice": true,
"listMode": "EXCLUDE",
"showLanding": true,
"showDashboard": true,
"modelType": "STANDARD"
}Request Body 필드 설명
| 필드 | 타입 | 설명 |
|---|---|---|
reviewCount | integer | 검수 횟수 (1 또는 2) |
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 | 대시보드 노출 여부 |
modelType | CampaignModelType | 캠페인 모델 타입 |
modelType (캠페인 모델 타입)
| 값 | 설명 |
|---|---|
STANDARD | 일반/2차활용 캠페인 |
PERFORMANCE | 성과형 캠페인 |
일정 설정 업데이트
캠페인의 일정 설정을 업데이트합니다.
HTTP 요청
PATCH /ai/admin/campaigns/{campaignNo}/schedule
Authorization: Bearer {access_token}
Content-Type: application/jsonRequest Body
{
"recruitmentStart": "2024-01-15",
"recruitmentEnd": "2024-01-31",
"contentSubmissionDeadline": "2024-02-15",
"reviewDeadline": "2024-02-28"
}캠페인 진행 상태 변경
결제 여부에 따라 캠페인 진행 상태를 변경합니다.
HTTP 요청
PATCH /ai/admin/campaigns/{campaignNo}/step?isPaid={isPaid}
Authorization: Bearer {access_token}Query Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
isPaid | boolean | 예 | 결제 완료 여부 |
- 결제 완료 (isPaid=true): 기업 크레딧에서 캠페인 비용 차감 후 가이드라인 작성 단계로 변경
- 결제 미완료 (isPaid=false): 결제 단계로 변경
isPaid=true일 때 크레딧 잔액이 부족하면 에러가 발생하고 캠페인 단계는 변경되지 않습니다.
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "캠페인 진행 상태가 변경되었습니다.",
"data": null
}에러 응답 - 크레딧 잔액 부족 (404)
{
"status": 404,
"code": "INVALID_DATA",
"message": "크레딧 잔액이 부족합니다. 현재: 0, 필요: 1000000",
"data": null
}에러 응답 - 캠페인 비용 정보 없음 (404)
{
"status": 404,
"code": "INVALID_DATA",
"message": "캠페인 비용 정보가 없습니다",
"data": null
}에러 응답 - 기업 정보 없음 (404)
{
"status": 404,
"code": "INVALID_USER",
"message": "기업 정보를 찾을 수 없습니다",
"data": null
}캠페인 일정 목록 조회
캠페인의 일정 목록을 조회합니다.
HTTP 요청
GET /ai/admin/campaigns/{campaignNo}/schedules
Authorization: Bearer {access_token}캠페인 이미지 정보 조회
캠페인의 썸네일, 제품링크, 프로덕트 이미지를 조회합니다. 캠페인 생성 시 이전 게시물 불러오기에 사용됩니다.
HTTP 요청
GET /ai/admin/campaigns/{campaignNo}/images
Authorization: Bearer {access_token}응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "캠페인 이미지 조회 성공",
"data": {
"thumbnail": "https://...",
"productLink": "https://...",
"productImages": [
"https://...",
"https://..."
]
}
}캠페인 진행 단계(SubStep) 변경
캠페인의 진행 단계(SubStep)를 변경합니다. 콘텐츠 제작/검수 단계 진입 시 선정된 신청자에게 ContentReview가 자동 생성됩니다.
HTTP 요청
PATCH /ai/admin/campaigns/{campaignNo}/substep?substep={substep}
Authorization: Bearer {access_token}Path Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | long | 예 | 캠페인 번호 |
Query Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
substep | string | 예 | 변경할 진행 단계 (CampaignSubStep enum 값) |
CampaignSubStep 값
| 값 | 상위 단계 | 설명 |
|---|---|---|
CAMPAIGN_REVIEW | 캠페인 접수 | 캠페인 내용 검토 |
CAMPAIGN_PAYMENT | 캠페인 접수 | 캠페인비 결제 |
CAMPAIGN_GUIDELINE | 캠페인 접수 | 콘텐츠 가이드라인 작성 |
CREATOR_RECRUIT | 크리에이터 모집 | 크리에이터 모집 |
CREATOR_MATCHING | 크리에이터 모집 | 협업 상세 협의 |
CONTENT_CREATION | 콘텐츠 제작 및 발행 | 콘텐츠 제작 |
CONTENT_REVIEW | 콘텐츠 제작 및 발행 | 콘텐츠 검수 |
CONTENT_PUBLISH | 캠페인 결과 전송 | 콘텐츠 발행 취합 |
RESULT_SUMMARY | 캠페인 결과 전송 | 캠페인 결과 취합 |
CAMPAIGN_COMPLETED | 캠페인 완료 | 캠페인 완료 |
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "캠페인 진행 단계가 변경되었습니다.",
"data": {
"campaignNo": 123,
"previousSubStep": "CREATOR_MATCHING",
"currentSubStep": "CONTENT_CREATION"
}
}CONTENT_CREATION 또는 CONTENT_REVIEW 단계로 변경 시, 선정된 신청자에게 ContentReview가 자동으로 생성됩니다.
사용 예시
캠페인 목록 조회
curl -X GET "https://api.glowb.io/ai/admin/campaigns?businessId=business123" \
-H "Authorization: Bearer {token}"캠페인 수정
curl -X PUT https://api.glowb.io/ai/admin/campaigns/123 \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"title": "수정된 캠페인명",
"description": "수정된 설명"
}'