Glowb Dev Docs
SaaS API인플루언서 SaaS

GET /ai/influence/campaigns/applications

캠페인 신청 목록 조회

캠페인 신청 목록 조회

인플루언서가 신청한 캠페인 목록을 조회합니다. 선정 대기, 선정, 미선정 7일 이내 건을 포함합니다.

HTTP 요청

GET /ai/influence/campaigns/applications
Authorization: Bearer {access_token}

응답 구조 — 가이드라인 버전별 폴리모픽

applications 리스트는 두 종류의 항목이 섞여 내려옵니다. 항목의 guidelineVersion 으로 분기하세요.

guidelineVersion항목 형태일정 필드
v1~v3flat (기존 구조 그대로)top-level 에 feedbackDeadline / contentSubmissionDeadline / scriptReviewDeadline / contentReviewDeadline / uploadDeadline / uploadApprovalDeadline
v4 이상nested (영역별 그룹핑)schedule 블록 (카드 표시값 + 원시 마감일)

[TASK-071] v4 항목은 카드 UI 영역별로 campaign / contract / negotiation / review / finalSubmission / delivery / schedule 블록으로 정리됩니다. v1~v3 항목은 수정 이전의 flat 구조를 그대로 유지합니다. 한 크리에이터가 v3·v4 캠페인을 동시에 보유하면 두 형태가 한 응답에 섞입니다.


@JsonInclude(NON_NULL) 적용 — v4 항목은 현재 단계에 해당 없는 블록/필드가 응답에서 생략됩니다 (예: 신청/계약 단계엔 review / finalSubmission 없음).

응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "성공",
  "data": {
    "totalBalance": 2500000,
    "applications": [
      // ── v1~v3 항목 (flat) ──
      {
        "applicationId": 1,
        "collabId": 123,
        "thumbnailImage": "https://...",
        "platform": "INSTAGRAM",
        "contentFormat": "REEL",
        "campaignName": "여름 뷰티 캠페인",
        "currency": "KRW",
        "nation": "KR",
        "selectionStatus": "SELECTED",
        "selectionStatusDisplay": "선정됨",
        "isContractRead": false,
        "contractId": 42,
        "contractStatus": "SIGNED",
        "hasAllDocuments": false,
        "missingDocumentTypes": ["IDENTIFICATION", "BANK_ACCOUNT_COPY"],
        "appliedAt": "2024-01-15T10:00:00",
        "contractDeadline": "2024-01-20T23:59:59",
        "totalReviewCount": 2,
        "phase": "FIRST_REVIEW",
        "guidelineVersion": 2,
        "deliveryType": "DELIVERY",
        "hasDeliveryAddress": true,
        "shippingDelayed": true,
        "trackingNumber": "589498233426",
        "courierCode": "kr.cjlogistics",
        "courierName": "CJ대한통운",
        "providedOptions": [
          {
            "optionId": 1,
            "title": "색상",
            "selectionType": "SINGLE",
            "sortOrder": 0,
            "choices": [
              { "choiceId": 11, "value": "아이보리", "sortOrder": 0, "selected": true  },
              { "choiceId": 12, "value": "그레이",   "sortOrder": 1, "selected": false }
            ]
          }
        ],
        "reviewId": 101,
        "previousReviewId": null,
        "reviewRound": 1,
        "hasNewFeedback": true,
        "isSubmitted": false,
        "needsResubmission": true,
        "hasAdditionalReviewRequest": false,
        "approvedWithFeedback": false,
        "creatorAddonTotalAmount": 70000,
        "feedbackDeadline": "2024-01-25T23:59:59",
        "contentSubmissionDeadline": "2024-01-22T23:59:59",
        "scriptReviewDeadline": "2024-01-24T23:59:59",
        "contentReviewDeadline": null,
        "uploadDeadline": null,
        "uploadApprovalDeadline": null,
        "priceNegotiationId": 501,
        "proposedPrice": 450000,
        "negotiationOrder": 2,
        "negotiationStatus": "ACCEPT",
        "latestNegotiationStatus": "ACCEPT"
      },
      // ── v4 항목 (nested) ──
      {
        "applicationId": 2,
        "appliedAt": "2024-01-10T10:00:00",
        "selectionStatus": "SELECTED",
        "selectionStatusDisplay": "선정됨",
        "phase": "FIRST_REVIEW",
        "guidelineVersion": 4,
        "campaign": {
          "collabId": 456,
          "thumbnailImage": "https://...",
          "platform": "INSTAGRAM",
          "contentFormat": "REEL",
          "campaignName": "겨울 패션 캠페인",
          "currency": "KRW",
          "nation": "JP"
        },
        "contract": {
          "isContractRead": true,
          "contractId": 55,
          "contractStatus": "SIGNED",
          "contractDeadline": "2024-01-15T23:59:59",
          "hasAllDocuments": true,
          "missingDocumentTypes": null
        },
        "negotiation": {
          "priceNegotiationId": 601,
          "proposedPrice": 500000,
          "negotiationOrder": 1,
          "negotiationStatus": "ACCEPT",
          "latestNegotiationStatus": "ACCEPT"
        },
        "review": {
          "reviewId": 202,
          "previousReviewId": null,
          "reviewRound": 1,
          "totalReviewCount": 2,
          "hasNewFeedback": false,
          "isSubmitted": true,
          "needsResubmission": false,
          "hasAdditionalReviewRequest": false,
          "approvedWithFeedback": false
        },
        "creatorAddonTotalAmount": 70000,
        "delivery": {
          "deliveryType": "DELIVERY",
          "hasDeliveryAddress": true,
          "shippingDelayed": false,
          "trackingNumber": null,
          "courierCode": null,
          "courierName": null,
          "providedOptions": []
        },
        "schedule": {
          "activePhase": "SCRIPT_REVIEW_DEADLINE",
          "label": "검수일정",
          "displayType": "REVIEW_ESTIMATE",
          "placeholderText": null,
          "estimateText": "스크립트 제출 후 약 2영업일 소요(예상)",
          "deadline": null,
          "dDay": null,
          "triggerFired": true,
          "triggerType": "TRIGGER_SCRIPT_SUBMITTED",
          "triggeredAt": "2024-01-18T09:00:00",
          "reviewing": true,
          "reviewDelayed": false,
          "feedbackDeadline": "2024-01-22T23:59:59",
          "contentSubmissionDeadline": null,
          "scriptReviewDeadline": "2024-01-20T23:59:59",
          "contentReviewDeadline": null,
          "uploadDeadline": null,
          "uploadApprovalDeadline": null
        }
      }
    ]
  }
}

최상위 응답 (data)

필드타입설명
totalBalancelong총 정산금 (해당 인플루언서의 정산 잔액 합계)
applicationsarray신청 항목 목록 (v1~v3 flat / v4 nested 혼재)

v1~v3 항목 필드 (flat)

기존 구조 그대로입니다. 주요 필드:

필드타입설명
applicationIdlong신청 ID
collabIdint캠페인 ID
thumbnailImage / platform / contentFormat / campaignNamestring캠페인 기본 정보
currencystring화폐 단위 (예: KRW, USD). 제안가/정산금 등 금액의 통화
nationstring캠페인 국가 코드 (ISO 3166-1 alpha-2, 예: KR/VN/JP). 원본값(코드·한글명 혼재)을 정규화해 내려줌. 미지정 시 null
selectionStatus / selectionStatusDisplaystring선정 상태 (WAITING/SELECTED/RESERVED/REJECTED/ELIMINATED/PROPOSAL) + 표시명
isContractReadboolean계약서 읽음 여부
contractId / contractStatuslong / string전자계약서 ID / 상태 (DRAFT~SIGNED). 미발송 시 null
hasAllDocuments / missingDocumentTypesboolean / string[]필수 서류 첨부 여부 / 미첨부 타입 (SIGNED에서만)
appliedAt / contractDeadlinedatetime신청일 / 계약서 작성 마감일
totalReviewCountint총 검수 횟수 (1: 1회검수, 2: 2회검수)
phasestring현재 단계 (APPLICATION_CONTRACT, FIRST_REVIEW, SECOND_REVIEW, UPLOAD_SETTLEMENT)
guidelineVersionint분기 키. v1~v3 이면 이 flat 구조
creatorAddonTotalAmountlong | null크리에이터 지급 예정 추가금 누적 합계(원). 유료 검수로 발생한 추가 지급액을 신청 단위로 모두 더한 값(예: 스크립트 2만 + 영상 5만 = 70000). 캠페인 카드 누적 표시용이며, 검수 단계가 끝난 뒤에도 계속 내려갑니다. 없으면 null. 라운드별 개별 금액은 검수 라운드별 제출물 조회creatorAddonAmount 참고
deliveryTypestring캠페인 배송 유형 (DELIVERY / NO_DELIVERY / VISIT_REQUIRED)
hasDeliveryAddress / shippingDelayed / providedOptions배송지 매핑 / 배송 지연(캠페인 단위) / 제공 옵션
trackingNumber / courierCode / courierNamestring운송장 정보. 광고주 미입력 시 모두 null배송 정보 표시 규칙 참고
reviewId / previousReviewId / reviewRoundlong / int검수 라운드 정보
hasNewFeedback / isSubmitted / needsResubmission / hasAdditionalReviewRequest / approvedWithFeedbackboolean검수 상태 플래그
feedbackDeadline / contentSubmissionDeadline / scriptReviewDeadline / contentReviewDeadline / uploadDeadline / uploadApprovalDeadlinedatetimeflat 마감일 (v4는 schedule 블록으로 이전)
reRequestTypes / finalSubmittedAt / isFinalSubmitted / contentLink / partnershipCode / cleanFilePath / finalFilePath업로드/정산 단계 필드
priceNegotiationId / proposedPrice / negotiationOrder / negotiationStatus / latestNegotiationStatus가격 협상 정보

v4 항목 필드 (nested)

top-level 에는 식별/상태/분기 키만 두고, 나머지는 영역별 블록으로 묶습니다.

top-level

필드타입설명
applicationIdlong신청 ID
appliedAtdatetime신청일
selectionStatus / selectionStatusDisplaystring선정 상태 + 표시명
phasestring현재 단계
guidelineVersionint분기 키. v4 이상이면 이 nested 구조
creatorAddonTotalAmountlong | null크리에이터 지급 예정 추가금 누적 합계(원). v3와 동일하며 top-level입니다(review 블록 아님 — 검수 단계가 끝나면 review 블록이 비므로 카드 표시가 끊기지 않도록). 라운드별 개별 금액은 검수 라운드별 제출물 조회creatorAddonAmount 참고

campaign — 캠페인 기본 정보

필드설명
collabId / thumbnailImage / platform / contentFormat / campaignName캠페인 ID / 썸네일 / 플랫폼 / 게시물 종류 / 캠페인명
currency화폐 단위 (예: KRW, USD). 제안가/정산금 등 금액의 통화
nation캠페인 국가 코드 (ISO 3166-1 alpha-2, 예: KR/VN/JP). 원본값을 정규화해 내려줌. 미지정 시 생략(NON_NULL)

contract — 계약 정보 + 서류

필드설명
isContractRead / contractId / contractStatus / contractDeadline계약서 읽음 / ID / 상태 / 작성 마감일
hasAllDocuments / missingDocumentTypes필수 서류 첨부 여부 / 미첨부 타입 (SIGNED에서만)

negotiation — 가격 협상

필드설명
priceNegotiationId / proposedPrice / negotiationOrder협상 ID / 제안 가격 / 순서
negotiationStatus / latestNegotiationStatus협상 상태 (PENDING/ACCEPT) / 최신 상태

review — 검수 정보 (제작 단계)

필드설명
reviewId / previousReviewId / reviewRound / totalReviewCount검수 라운드 정보
hasNewFeedback / isSubmitted / needsResubmission / hasAdditionalReviewRequest / approvedWithFeedback검수 상태 플래그

finalSubmission — 최종 제출/업로드 (UPLOAD_SETTLEMENT 단계)

필드설명
reRequestTypes재요청 항목 JSON 배열 문자열
finalSubmittedAt / isFinalSubmitted최종제출 일시 / 여부
contentLink / partnershipCode / cleanFilePath / finalFilePath콘텐츠 링크 / 파트너십 코드 / 클린본·최종본 경로

delivery — 배송 정보 + 제공 옵션

필드설명
deliveryType / hasDeliveryAddress / shippingDelayed배송 유형(DELIVERY / NO_DELIVERY / VISIT_REQUIRED) / 배송지 매핑 / 배송 지연(캠페인 단위)
trackingNumber / courierCode / courierName운송장 정보. 광고주 미입력 시 모두 null배송 정보 표시 규칙 참고
providedOptions캠페인 제공 옵션 (정의 + 본인 선택). 제공 옵션 개요 참고

배송 정보 표시 규칙

배송형(deliveryTypeDELIVERY) 캠페인 카드에서 운송장 영역을 그리는 규칙입니다. v1~v3는 top-level, v4는 delivery 블록에 동일한 3개 필드가 내려옵니다.

trackingNumber카드 표시
null"배송을 준비중이에요" — 광고주가 아직 운송장을 입력하지 않은 상태
값 있음courierName + trackingNumber (예: CJ대한통운 589498233426)

courierName은 서버가 완성해서 내려주므로 프론트에서 택배사 코드를 한글명으로 매핑할 필요가 없습니다.

상황courierCodecourierName
지원 9개 택배사kr.cjlogisticsCJ대한통운
기타 (광고주 자유입력)OTHER천일택배 (광고주가 입력한 값)
운송장 미입력nullnull

courierCodekr.로 시작하는 건만 10분 주기 자동 배송조회 대상입니다. 기타 택배사는 운송장 번호만 표시되고 상태가 자동으로 갱신되지 않습니다. 자세한 동작은 배송 관리 개요 참고.

schedule 블록 (v4 전용)

[TASK-071] 카드 일정 영역. 서버가 카드 표시값(라벨/표시타입/문구/D-day/검수상태)까지 계산해 내려줍니다.

필드타입설명
activePhasestring카드가 현재 가리키는 마감 단계
labelstring라벨. 제출 단계는 스크립트 제출 마감일 / 영상 제출 마감일, 재제출 사이클이면 스크립트 수정본 제출 마감일 / 영상 수정본 제출 마감일. 검수 대기중이면 검수일정, 업로드/정산 단계면 업로드 허용일
displayTypestringRELATIVE_PLACEHOLDER(트리거 전 회색 상대문구) / ABSOLUTE_DATE(실제 일자+D-day) / REVIEW_ESTIMATE(검수 예상)
placeholderTextstringRELATIVE_PLACEHOLDER 문구. 예: 배송완료 후 3일 이내(배송형) / 계약 완료 후 4일 이내(비배송형)
estimateTextstringREVIEW_ESTIMATE 문구. 예: 스크립트 제출 후 약 2영업일 소요(예상) / 영상 제출 후 약 2영업일 소요(예상)
deadlinedatetimeABSOLUTE_DATE 일 때 확정 마감일
dDayintABSOLUTE_DATE 일 때 D-day (오늘=0, 지났으면 음수)
triggerFiredboolean마감이 트리거로 확정됐는지 (회색 placeholder → 실제 일자 전환)
triggerTypestring이 마감을 확정시킨 트리거 종류 (예: TRIGGER_1A_DELIVERY_INPUT). 미발동 시 null
triggeredAtdatetime트리거 발동 시각 (미발동 시 null)
reviewingboolean검수중 여부 (제출 완료 후 검수 대기)
reviewDelayedboolean검수 지연 여부. 본인 ApplicationSchedule 의 검수 마감(제출일 + 2영업일)을 넘겼는데 검수가 안 끝난 경우 true. 해당 일정 row 가 없으면 false. 카드에 "브랜드는 아직 검수중! 조금 더 기다려주세요" 노출
feedbackDeadline / contentSubmissionDeadline / scriptReviewDeadline / contentReviewDeadline / uploadDeadline / uploadApprovalDeadlinedatetime원시 마감일 (상세/모달용)

카드 일정 영역 렌더링 (Figma 2026.05.26):

  • displayType=RELATIVE_PLACEHOLDERplaceholderText(회색). 배송형은 운송장 입력(Trigger 1-A) 전, 비배송형은 계약 서명완료(Trigger 1-B) 전.
  • displayType=ABSOLUTE_DATElabel + deadline(mm월 dd일) + (D-{dDay}).
  • displayType=REVIEW_ESTIMATE검수일정 + estimateText. reviewDelayed=true면 지연 안내 추가.
  • 광고주에게 재제출 요청을 받은 상태면 label수정본 이 붙습니다 (예: 영상 수정본 제출 마감일). 마감일은 재제출 요청 시점 기준으로 재산정되어 같은 제출 마감 필드에 담깁니다.
  • triggerType 전체 값은 개별 일정 API 참고.

보조 로직 (Callout)

필수 서류 판단 (SIGNED 상태): 신분증(IDENTIFICATION) 또는 사업자등록증(BUSINESS_REGISTRATION) 1개 이상 + 통장사본(BANK_ACCOUNT_COPY) 1개 이상. hasAllDocuments=false면 서류 보완 UI 표시. 업로드는 PUT /ai/contract/{contractId}/documents?type={type}.

가격 협상 CTA: negotiationStatus=PENDING → 수락/거절 버튼, ACCEPT → "최종 선정 대기중", null → 표시 안 함.

reRequestTypes(또는 finalSubmission.reRequestTypes)가 있으면 인플루언서는 해당 항목을 재제출해야 합니다.

API 테스트

On this page