Glowb Dev Docs
Admin APIAdmin Campaign API

POST /ai/admin/campaigns/{campaignNo}/terminate

캠페인 강제 종료 (관리자 전용)

캠페인 강제 종료

진행 중인 캠페인을 관리자 권한으로 강제 종료합니다. 계약 조항에 따라 최초 입금액의 20%를 착수금으로 귀속시키고, 잔여 금액을 기업 글로벌 크레딧으로 환급합니다.

본 API는 관리자 전용입니다. 진행 중인 신청/계약/콘텐츠 데이터는 그대로 유지되며, 캠페인 단계만 CAMPAIGN_COMPLETED로 전환됩니다. 별도의 종료 사유 필드는 기록되지 않습니다.

HTTP 요청

POST /ai/admin/campaigns/{campaignNo}/terminate
Authorization: Bearer {access_token}

요청 본문은 없습니다. 처리자(adminId)는 JWT의 인증 컨텍스트에서 자동으로 추출됩니다.

Path Parameters

파라미터타입필수설명
campaignNoInteger캠페인 번호 (SaaS 이후 캠페인만 지원)

처리 흐름

  1. 유효성 검증
    • 캠페인 존재 확인
    • 레거시 캠페인(SaaS 이전) 거부
    • 이미 CAMPAIGN_COMPLETED 상태인 캠페인 거부
  2. 착수금 귀속 계산최초 CAMPAIGN_DEPOSIT 입금액 × 20%
  3. LOCKED 예산 전부 해제TB_CAMPAIGN_BUDGET의 LOCKED 행을 UNLOCKED로 변경
  4. 환급금 계산max(0, 총 입금액 − 착수금)
  5. 회계 기록
    • CAMPAIGN_FORFEIT 트랜잭션 (회계 마커, 잔액 변동 없음)
    • 환급금이 양수일 때만 CAMPAIGN_REFUND 트랜잭션 + 기업 크레딧 증가
  6. 상태 전환campaign_sub_step = CAMPAIGN_COMPLETED, campaign_completed_at = 현재 시각 (최초 전환 시에만)
  7. 슬랙 알림 발송 — 실패해도 트랜잭션에는 영향 없음

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "캠페인이 강제 종료되었습니다.",
  "data": {
    "collabNo": 1234,
    "initialDeposit": 5000000,
    "totalBudget": 5500000,
    "forfeitAmount": 1000000,
    "refundAmount": 4500000,
    "unlockedBudgetCount": 3,
    "remainCreditAfter": 4800000
  }
}

응답 필드

필드타입설명
collabNoInteger캠페인 번호
initialDepositInteger최초 입금액 (CAMPAIGN_DEPOSIT 첫 건의 금액)
totalBudgetInteger총 입금액 (CAMPAIGN_DEPOSIT 합계, 추가입금 포함)
forfeitAmountInteger착수금 귀속 금액 (initialDeposit × 20%)
refundAmountInteger기업 크레딧으로 환급된 금액
unlockedBudgetCountInteger해제된 LOCKED 예산 행 수
remainCreditAfterInteger환급 후 기업 잔여 크레딧

에러 응답

상태 코드code사례
400LEGACY_CAMPAIGN_NOT_SUPPORTEDSaaS 이전 캠페인
400ALREADY_TERMINATED이미 CAMPAIGN_COMPLETED 상태
400INVALID_DATA기업 정보 누락 등
404INVALID_COLLAB캠페인 없음
401인증 실패

정책 배경

기업과의 계약서 본문에는 다음 조항이 포함됩니다 (BusinessContractPdfService 참고):

영상 제작 캠페인 신청 시, 총예산의 20%를 착수금으로 선차감합니다. 캠페인이 정상 진행될 경우 해당 금액은 크레딧 사용분으로 자동 전환되나, "갑"의 사정으로 캠페인이 미진행 또는 최초 캠페인 설정 예산의 80% 이하가 사용될 경우 해당 착수금은 "을"의 행정 및 준비 비용으로 귀속되어 환불되지 않습니다.

본 API는 위 조항을 시스템화한 것으로, 모집 시작 이전의 단순 결제 취소(POST /campaign/{collabNo}/cancel, 100% 환불)와는 구분됩니다.

진행 중인 인플루언서 대금 정산은 본 흐름의 범위 밖이며 별도 운영 절차로 처리합니다.

API 테스트

On this page