Glowb Dev Docs
Admin API대리제출

POST /ai/admin/proxy-submission/applications/{applicationId}/final

관리자가 크리에이터 대신 최종제출물을 제출

최종제출물 대리제출 (관리자용)

크리에이터가 직접 제출하지 못하는 상황에서 관리자가 최종제출물을 대신 제출합니다. 크리에이터가 웹앱에서 직접 제출한 것과 동일하게 처리됩니다.

기존 POST /ai/admin/campaigns/final-submission/{applicationId}/submit 과 다릅니다

기존 관리자 API는 크리에이터 정본 로직(FinalSubmissionService)을 재사용하지 않고 별도로 구현되어 있어, 제출 표시(isSubmitted, submittedAt)와 캠페인 상태 변경만 수행합니다. 아래 후속 처리가 모두 빠집니다.

  • 2차 활용 기간 확정
  • 정산 일정·마감 산정
  • 게시 항목(계정 태그·공동작업자) 자동검수 예약
  • UPLOAD_SETTLEMENT 단계 검증

이 API는 정본을 그대로 재사용하므로 위 처리가 함께 수행됩니다.

처리 순서

  1. applicationId로 신청 조회 후 신청 소유자의 memberId 해석
  2. 클린본·최종본이 영상이면 트랜스코딩 트리거
  3. 크리에이터 정본 호출 — isResubmit 에 따라 최초 제출 또는 재제출
  4. 광고주 최종제출 알림 발행

FinalSubmissionService 는 memberId 가 신청 소유자와 일치할 때만 통과시킵니다. 관리자 토큰의 memberId 를 그대로 넘기면 막히므로, 매직링크와 동일하게 신청 자체의 소유자에서 memberId 를 꺼내 넘깁니다.

HTTP 요청

POST /ai/admin/proxy-submission/applications/{applicationId}/final
Authorization: Bearer {access_token}
Content-Type: application/json

Path Parameters

파라미터타입필수설명
applicationIdlong예대상 신청(CampaignApplication) ID

Request Body

{
  "contentLink": "https://www.instagram.com/reel/xxxxx",
  "partnershipCode": "ABC123",
  "cleanFilePath": "https://storage.googleapis.com/glowb-input/campaign/content/admin/20652/...clean.mp4",
  "finalFilePath": "https://storage.googleapis.com/glowb-input/campaign/content/admin/20652/...final.mp4",
  "isResubmit": false
}
필드명타입필수설명
contentLinkstring아니오업로드한 콘텐츠 링크
partnershipCodestring아니오파트너십 코드
cleanFilePathstring아니오클린본 파일 URL. 업로드 URL 발급의 publicUrl
finalFilePathstring아니오최종본 파일 URL
isResubmitboolean아니오true 면 재제출로 처리(기본 false)

null 인 필드는 기존 값을 유지합니다. 캠페인이 요구하는 항목은 TB_COLLAB_FINAL_SUBMISSION_TYPES 로 결정됩니다.

최초 제출과 재제출의 차이

isResubmit: falseisResubmit: true
전제UPLOAD_SETTLEMENT 단계이미 제출된 상태
2차 활용 기간최초 제출 시점으로 확정갱신하지 않음(최초 기준 유지)
정산 일정재계산하지 않음
자동검수 예약예약재예약
응답 message제출 완료 (data: null)재제출 완료 (제출물 전체)

응답

성공 응답 (200 OK) — 최초 제출

{
  "status": 200,
  "code": null,
  "message": "제출 완료",
  "data": null
}

성공 응답 (200 OK) — 재제출

{
  "status": 200,
  "code": null,
  "message": "재제출 완료",
  "data": {
    "contentLink": "https://www.instagram.com/reel/xxxxx",
    "isSubmitted": true,
    "submittedAt": "2026-09-01T17:40:00"
  }
}

에러 응답

에러도 HTTP 200으로 내려가고 실제 상태는 본문 status/code 에 담깁니다. 인증·인가 실패만 실제 401/403입니다.

상황본문 status메시지
신청 없음404신청을 찾을 수 없습니다.
신청 소유자 확인 불가404신청 소유자를 확인할 수 없습니다.
업로드/정산 단계가 아님404업로드/정산 단계에서만 최종 제작물을 제출할 수 있습니다.
재제출인데 제출물 없음404제출된 최종 제작물이 없습니다. 먼저 제출해주세요.
재제출인데 미제출 상태404아직 제출되지 않은 상태입니다. 최초 제출은 POST API를 사용해주세요.
인증 실패HTTP 401토큰이 만료되었습니다.
ADMIN 권한 아님HTTP 403권한이 없는 요청 입니다.

감사 기록

제출 주체 컬럼이 없어 DB만 보면 크리에이터 본인 제출과 구분되지 않습니다. 애플리케이션 로그로만 남습니다.

[AdminProxySubmission] 최종제출 대리제출 완료. adminId=..., applicationId=..., isResubmit=..., influenceNo=...

API 테스트

On this page