SaaS API기업용 콘텐츠 검수
PUT /ai/business/contents/guideline/{collabNo}
가이드라인 저장/생성 (Upsert)
가이드라인 저장/생성 (Upsert)
가이드라인 데이터를 저장합니다. 없으면 생성, 있으면 병합합니다.
수정 제한 조건
- 가이드라인이 이미 존재하는 경우, 모집 시작 전에만 수정 가능합니다.
- 모집이 시작된 이후(
CREATOR_RECRUIT단계 이후)에는 수정이 불가능합니다. - 수정 가능 단계:
CAMPAIGN_REVIEW,CAMPAIGN_PAYMENT,CAMPAIGN_GUIDELINE
임시저장 vs 초안 검수 vs 완성본 저장
isModify=true: 임시저장 모드. MongoDB에 내용만 저장하고, 가이드라인 상태/캠페인 단계 변경 없음isFirst=true: 초안 검수 모드. 가이드라인 상태가DRAFT로 설정되며,hasGuideline=false유지isFirst=false(기본값): 완성본 저장 모드. 가이드라인 상태가COMPLETED로 설정되며,hasGuideline=true- 완성본 저장 시에만 캠페인 단계가
CREATOR_RECRUIT로 변경됩니다 (모집 시작)
HTTP 요청
PUT /ai/business/contents/guideline/{collabNo}?isFirst=false&isModify=false
Authorization: Bearer {access_token}
Content-Type: application/jsonPath Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
collabNo | int | 예 | 캠페인 번호 |
Query Parameters
| 파라미터 | 타입 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
isFirst | boolean | 아니오 | false | true: 초안 검수 (DRAFT), false: 완성본 저장 (COMPLETED) |
isModify | boolean | 아니오 | false | true: 임시저장 (내용만 저장, 상태/단계 변경 없음) |
Request Body
가이드라인은 4단계 Wizard 구조로 되어 있습니다. 각 단계별로 부분 저장이 가능하며, 기존 데이터와 병합됩니다.
{
"contentTypes": ["VIDEO", "CAPTION", "HASHTAG"],
"basicInfo": {
"productUrl": "https://example.com/product",
"contentConcepts": [
{
"code": "STORY_TELLING",
"referenceUrl": "https://instagram.com/reel/xxx",
"referenceDescription": "이 영상처럼 자연스러운 썰풀기 스타일로"
}
],
"keywords": [
{ "text": "여름선크림", "isRequired": true }
],
"titleExample": "여름 필수템! 촉촉한 선크림 추천"
},
"contentDetailInfo": {
"categoryCode": "BEAUTY",
"basicShots": [
{
"code": "TEXTURE_SHOT",
"appealPoint": "크리미한 제형과 빠른 흡수력을 보여주세요",
"subOption": null
}
],
"additionalOptions": [
{ "code": "BEFORE_AFTER", "additionalPrice": 50000, "inputText": null }
],
"etcOptions": []
},
"marketingInfo": {
"requiredPoints": ["SPF50+ PA++++ 자외선 차단", "촉촉한 수분감"],
"optionalPoints": ["비건 인증"],
"videoMarketingOptions": {
"promotion": {
"referenceUrl": "https://example.com/promo",
"description": "6월 한정 20% 할인 진행 중"
},
"brandAccountTag": {
"accountName": "@glowb_beauty",
"tagMethods": ["PERSON_TAG", "CAPTION_TAG"],
"saveAsDefault": true
},
"sponsorLabel": {
"accountName": "@glowb_official"
},
"collaborator": {
"accountName": "@glowb_collab",
"tagMethods": null,
"saveAsDefault": false
},
"useAutoDm": false,
"productLinkShare": {
"enabled": true,
"shareMethods": ["dm", "profileLink"],
"shareLink": "https://example.com/product",
"shareDuration": 2,
"shareDurationUnit": "week",
"priceIncrease": 50000
}
},
"hashtags": ["#글로브뷰티", "#여름선크림"]
},
"detailPageInfo": {
"brandLogo": {
"imageUrls": ["https://s3.../brand-logo-black.png", "https://s3.../brand-logo-white.png"],
"saveAsDefault": true
},
"thumbnailUrl": "https://s3.../thumbnail.jpg",
"detailImageUrls": ["https://s3.../detail-1.jpg", "https://s3.../detail-2.jpg"]
}
}Request Body 필드 상세 설명
전체 필드 상세는 가이드라인 조회 API 문서를 참고하세요.
응답
성공 응답 (200 OK) - 완성본 저장 (isFirst=false)
{
"status": 200,
"code": null,
"message": "가이드라인이 저장되었습니다.",
"data": {
"collabNo": 123,
"isFirst": false,
"guidelineStatus": "COMPLETED",
"message": "가이드라인이 저장되었습니다."
}
}성공 응답 (200 OK) - 초안 검수 (isFirst=true)
{
"status": 200,
"code": null,
"message": "가이드라인이 저장되었습니다.",
"data": {
"collabNo": 123,
"isFirst": true,
"guidelineStatus": "DRAFT",
"message": "가이드라인이 저장되었습니다."
}
}성공 응답 (200 OK) - 임시저장 (isModify=true)
{
"status": 200,
"code": null,
"message": "가이드라인이 임시저장되었습니다.",
"data": {
"collabNo": 123,
"isModify": true,
"guidelineStatus": "COMPLETED",
"message": "가이드라인이 임시저장되었습니다."
}
}임시저장 시 guidelineStatus는 현재 상태를 그대로 반환합니다. (기존 상태가 COMPLETED면 COMPLETED, DRAFT면 DRAFT)
Response 스키마
| 필드 | 타입 | 설명 |
|---|---|---|
collabNo | int | 캠페인 번호 |
isFirst | boolean | 초안 검수 여부 (임시저장 시 없음) |
isModify | boolean | 임시저장 여부 (임시저장 시에만 포함) |
guidelineStatus | string | 가이드라인 상태 (REQUESTED: 요청됨, DRAFT: 초안, COMPLETED: 완성). 임시저장 시 현재 상태 그대로 반환 |
message | string | 결과 메시지 |
에러 응답
에러 응답 (400 Bad Request) - 모집 시작 후 수정 시도
{
"status": 400,
"code": "GUIDELINE_MODIFICATION_NOT_ALLOWED",
"message": "모집이 시작된 이후에는 가이드라인을 수정할 수 없습니다.",
"data": null
}