Glowb Dev Docs
SaaS API광고주 캠페인 초안

POST /ai/business/collab/draft

광고주 직접 캠페인 초안 생성

광고주 직접 캠페인 초안 생성

비즈니스(광고주) 사용자가 해피콜 이전 단계에서 캠페인 초안을 직접 생성합니다. 제목은 [브랜드명] 캠페인 으로 자동 세팅되며, 수수료(feePolicyType / feeType / feeValue) 와 category 는 NULL 로 저장되어 관리자가 해피콜 후 채웁니다. 생성 즉시 대시보드에 노출되며, 모집 일정은 now ~ now + 5일 로 기본 세팅된 뒤 이후 단계(EXCLUSION_SELECTION ~ SETTLEMENT) 는 CampaignPhase.durationDays 기준으로 cascade 로 자동 생성됩니다. 광고주에게는 별도 메일을 발송하지 않으며(프런트 팝업이 안내 처리), 영업팀에게 알림 메일 + 캠페인 알리미 슬랙 채널 알림이 자동 발송됩니다.

항목
메서드POST
경로/ai/business/collab/draft
인증필요 (ROLE_BUSINESS)
Content-Typemultipart/form-data

요청

POST /ai/business/collab/draft HTTP/1.1
Host: api.glowb.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: multipart/form-data
curl -X POST "https://api.glowb.com/ai/business/collab/draft" \
  -H "Authorization: Bearer {access_token}" \
  -F "campaign_data=@draft.json;type=application/json" \
  -F "detail_images=@product1.jpg" \
  -F "detail_images=@product2.jpg" \
  -F "guide_files=@guide.pdf"
const formData = new FormData();
formData.append('campaign_data', new Blob([JSON.stringify({
  modelType: 'STANDARD',
  scriptReviewRequired: true,
  managerNo: 30,
  managerName: '홍길동',
  managerPhone: '010-0000-0000',
  managerEmail: 'manager@example.com',
  productUrl: 'https://example.com/product/123',
  rewardType: 'BOTH',
  deliveryType: 'DELIVERY',
  productReturnRequired: false,
  snsType: 'INSTAGRAM',
  snsContentFormat: 'INSTAGRAM_REELS',
  nation: 'KR',
  budget: '1000000',
  headcount: '3',
  finalSubmissionTypes: ['CONTENT_LINK', 'PARTNERSHIP_CODE'],
  comment: '4월 중순 라이브 일정이에요.',
  commentAnonymous: false,
  secondaryUsageOption: '["post_secondary","clean_version"]',
  secondaryUsageMonths: 3
})], { type: 'application/json' }));
detailImageFiles.forEach((f) => formData.append('detail_images', f));
guideFiles.forEach((f) => formData.append('guide_files', f));

const response = await fetch('/ai/business/collab/draft', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${accessToken}` },
  body: formData
});

Request Parts

Prop

Type

campaign_data 스키마

Prop

Type

검수 유형 자동 매핑

scriptReviewRequired 와 SNS 플랫폼(Naver vs 그 외) 조합에 따라 Collab.firstReviewTypes / secondReviewTypes 가 자동 결정됩니다. (GuidelineV2Service.setReviewTypes 와 동일 로직)

조건firstReviewTypessecondReviewTypes
true + Naver{SCRIPT_BLOG}{SCRIPT_BLOG, PHOTO}
true + 그 외{SCRIPT_VIDEO}{VIDEO, CAPTION, HASHTAG}
false + Naver{}{SCRIPT_BLOG, PHOTO}
false + 그 외{}{VIDEO, CAPTION, HASHTAG}

응답

성공 응답 (201 Created)

{
  "status": 201,
  "code": null,
  "message": "캠페인 초안이 생성되었습니다.",
  "data": {
    "campaignNo": 2309,
    "title": "[facebook] 캠페인",
    "managerName": "홍길동",
    "managerEmail": "manager@example.com",
    "managerPhone": "010-0000-0000"
  }
}

에러 응답

상태 코드설명
401인증 실패
403ROLE_BUSINESS 권한 부족
404기업 정보를 찾을 수 없음 (INVALID_DATA)
500S3 업로드 실패 등 내부 오류

API 테스트

On this page