Glowb Dev Docs
Admin APIAdmin Campaign API

GET /ai/admin/campaigns/{campaignNo}

캠페인 상세 조회

캠페인 상세 조회

캠페인 상세 정보를 조회합니다.

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",
    "nation": "KR",
    "creatorTargetCountry": "KR",
    "isVisitRequired": "false",
    "averageUnitPrice": "100000",
    "person": "10",
    "charge": "1000000",
    "currency": "KRW",
    "feePolicyType": "COST_PLUS_FEE",
    "feeType": "PERCENT",
    "feeValue": 10,
    "priceRoundUp": true,
    "deliveryType": "배송",
    "firstReviewTypes": ["SCRIPT", "HASHTAG"],
    "secondReviewTypes": ["VIDEO"],
    "finalSubmissionTypes": ["INSTAGRAM_REEL", "INSTAGRAM_POST"],
    "secondaryUsageMonths": 6,
    "secondaryUsageOption": "SNS_AD",
    "showPrice": true,
    "priceRoundingType": 1,
    "tiktokUsPriceMode": null,
    "adminFeedbackApprovalEnabled": true,
    "adminFeedbackApprovalScriptEnabled": true,
    "adminSelectionApprovalEnabled": false,
    "listMode": "EXCLUDE",
    "modelType": "STANDARD",
    "guidelineVersion": 2,
    "campaignSubStep": "CREATOR_RECRUIT",
    "guidelineStatus": "COMPLETED",
    "campaignContractType": "STANDARD",
    "campaignContractDescription": "계약 내용",
    "caution": "제품 촬영 시 주의사항",
    "managers": [
      { "managerNo": 1, "name": "홍길동", "phone": "010-1234-5678", "email": "manager@example.com", "isDefault": true }
    ],
    "guidelineCompletedAt": "2026-05-26T11:50:41",
    "recruitmentDays": 4,
    "schedules": [...],
    "paymentVerification": {
      "paymentStatus": "PAID",
      "isPaymentStatusSet": false,
      "verifiedAt": null,
      "verifiedAmount": null,
      "verifiedMethod": null,
      "verifiedMethodMemo": null,
      "verifierName": null
    },
    "deficitLock": {
      "engaged": true,
      "amount": 300000,
      "status": "LOCKED",
      "threshold": 800000,
      "sumLockedNormal": 500000,
      "policyEnabled": true
    }
  }
}

응답 필드 설명

필드타입설명
nointeger캠페인 번호
businessIdstring기업 회원 ID
businessNamestring기업명
titlestring캠페인 제목
categorystring카테고리 코드
snsstringSNS 플랫폼
snsContentFormatSnsContentFormat콘텐츠 포맷 (REEL, FEED, STORY 등)
campaignTypeCampaignType캠페인 제공종류
productNamestring상품명
productUrlstring상품 URL
nationstring캠페인 운영 국가 (예: KR)
creatorTargetCountrystring크리에이터 타겟 국가. ISO 3166-1 alpha-2 (예: KR). 미지정이면 null
isVisitRequiredstring방문 필요 여부
personstring모집인원
chargestring비용
currencystring화폐 단위 (예: KRW, USD). 수정 화면 로드 / 이전 게시물 불러오기에서 표시
feePolicyTypeFeePolicyType수수료 정책 타입 (ACTUAL_COST: 실비, COST_PLUS_FEE: 실비+수수료, TOTAL_AMOUNT: 총액)
feeTypeFeeType수수료 유형 (PERCENT: %, FIXED: 원)
feeValueinteger수수료 값
priceRoundUpboolean가격 만원 단위 올림 여부 (레거시, priceRoundingType으로 대체)
deliveryTypestring배송 여부 (한국어 설명, DeliveryType.getDescription())
firstReviewTypesSet<SubmissionItemType>1차 검수 필수 제출물 타입
secondReviewTypesSet<SubmissionItemType>2차 검수 필수 제출물 타입
finalSubmissionTypesSet<FinalSubmissionType>최종 제출물 타입
secondaryUsageMonthsinteger2차 활용 기간 (개월). -1 = 영구활용
secondaryUsageOptionstring2차 활용 옵션
showPriceboolean가격 노출 여부
priceRoundingTypeinteger가격 만원 단위 처리 방식 (0=반올림, 1=올림, 2=없음)
tiktokUsPriceModestring미국 틱톡 랭크가(USD) 단가 모드. LOWEST_PRICE(A) / ACCEPTANCE(B), 설정 전이면 null(A 로 계산). 변경은 전용 API
adminFeedbackApprovalEnabledboolean검수의 검수 게이트 ON/OFF — 영상 라운드(VIDEO·CAPTION·HASHTAG). true면 기업 피드백이 관리자 승인 후 크리에이터에 전달. 실제 판정과 동일하게 true일 때만 ON(저장값 없으면 OFF). 어드민 게이트 토글의 현재 상태 표시에 사용
adminFeedbackApprovalScriptEnabledboolean검수의 검수 게이트 ON/OFF — 스크립트 라운드. 영상 게이트와 독립. ⚠️ 이 값이 true여도 전역 플래그 script_admin_gate_enabled가 OFF면 게이트가 걸리지 않는다(이중 게이팅)
adminSelectionApprovalEnabledboolean선정의 선정 게이트 ON/OFF. true면 기업의 선정이 관리자 승인 후 확정된다. 실제 판정과 동일하게 true일 때만 ON(저장값 없으면 OFF). 관리자 전용 필드로, 기업/크리에이터 대상 API에는 노출되지 않는다.
listModestring리스트 모드 (SELECT / EXCLUDE)
modelTypeCampaignModelType캠페인 모델 타입 (STANDARD / SECONDARY_USAGE / PERFORMANCE)
guidelineVersioninteger가이드라인 버전 (1: v1, 2: v2)
campaignSubStepCampaignSubStep캠페인 진행 상태
guidelineStatusGuidelineStatus가이드라인 상태 (REQUESTED: 요청됨, DRAFT: 초안, COMPLETED: 완성)
campaignContractTypestring계약 형식
campaignContractDescriptionstring계약 내용
cautionstring주의사항
managersarray캠페인 담당자 목록(N:M, 동등). 각 항목 { managerNo, name, phone, email, isDefault }. 담당자 미지정 시 빈 배열
guidelineCompletedAtdatetime[TASK-071] 가이드라인 완성일. 출처: MongoDB GuidelineDocument.completedAt → fallback Collab.recruitment_start_date (legacy). 가이드 미완성(DRAFT) 캠페인은 null. 운영자는 PUT API 의 같은 필드로 정정 가능.
recruitmentDaysinteger[TASK-071 Phase 3] 모집 영업일 (1-10, 기본 4). 관리자 수정 페이지에서 표시·수정
paymentVerificationobject결제 상태 정보. 항상 내려간다(null 아님). 하위 필드는 아래 표 참조
deficitLockobject80% 부족분 lock 스냅샷. 상세는 부족분 lock 조회 참조. SaaS 이전 캠페인은 engaged=false, policyEnabled=false로 고정

paymentVerification 필드

필드타입설명
paymentStatusCampaignPaymentStatusUNPAID(미결제) | PAYMENT_PENDING(결제필요) | PAID(결제됨)
isPaymentStatusSetboolean결제 상태가 명시적으로 지정된 값인지 여부. 판단 근거는 TB_CAMPAIGN_PAYMENT_VERIFICATION 행의 존재 여부
verifiedAtdatetime결제 완료 처리 시각. 미처리 시 null
verifiedAmountinteger확인된 결제 금액. 미처리 시 null
verifiedMethodPaymentMethod결제 방식. 미처리 시 null
verifiedMethodMemostring결제 방식이 OTHER 일 때의 자유 메모
verifierNamestring결제 확인 담당자 이름

isPaymentStatusSet 판단 기준

값의미paymentStatus 신뢰도
true어드민이 PATCH .../step 으로 결제 상태를 지정한 적 있음그대로 신뢰
false한 번도 지정된 적 없음. 서버가 campaignSubStep 기준 폴백 규칙으로 도출한 추측값신뢰 불가

광고주가 직접 만든 초안 캠페인(POST /ai/business/collab/draft)은 결제 상태를 지정하는 단계를 거치지 않아 isPaymentStatusSet=false 로 내려갑니다. 이때 paymentStatus 는 폴백 규칙(campaignSubStep != CAMPAIGN_PAYMENT 이면 PAID)에 따라 결제되지 않았는데도 PAID 로 표시되므로, 프런트는 isPaymentStatusSet 이 false 인 동안 paymentStatus 를 표시하지 말고 결제 상태 선택을 유도해야 합니다.

어드민이 결제 상태를 한 번 지정하면(세 값 중 무엇이든) verification 행이 생성되어 이후 조회부터 isPaymentStatusSet=true 가 됩니다.

API 테스트

On this page