Glowb Dev Docs
Admin APIAdmin Dashboard API

GET /ai/admin/dashboard/{campaignNo}/list

리스트 관리 조회

리스트 관리 조회

캠페인 신청 목록을 조회합니다. adminVisible 값과 무관하게 전체 신청을 조회합니다.

캠페인 정보, 인플루언서 정보, 매칭 정보, 단가 협상 상태, 계약서 정보를 모두 포함합니다.

HTTP 요청

GET /ai/admin/dashboard/{campaignNo}/list
Authorization: Bearer {access_token}

Path Parameters

파라미터타입필수설명
campaignNolong캠페인 번호

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "리스트 관리 조회 성공",
  "data": {
    "campaign": {
      "no": "123",
      "businessId": "business123",
      "thumbnailImagePath": "https://...",
      "productImagePath": "https://...",
      "snsType": "INSTAGRAM",
      "contentFormat": "REELS",
      "category": "BEAUTY",
      "campaignType": "PRODUCT",
      "campaignSubStep": "CREATOR_MATCHING",
      "productName": "여름 뷰티 캠페인",
      "charge": "500000",
      "currency": "KRW",
      "recruitCount": "10",
      "recruitmentStartDate": "2025-01-01 00:00:00",
      "recruitmentEndDate": "2025-01-31 00:00:00",
      "showPrice": true,
      "listMode": "MANUAL"
    },
    "remainBusinessCredit": 1500000,
    "bizName": "글로우비 주식회사",
    "veteranPercentage": 42.8,
    "items": [
      {
        "applicationId": 35,
        "appliedAt": "2025-01-15T10:30:00",
        "adminVisible": true,
        "sourceType": "SELF_APPLIED",
        "influenceNo": 123,
        "influenceName": "크리에이터A",
        "influenceProfileImage": "https://...",
        "influenceTel": "010-1234-5678",
        "influenceEmail": "creator@email.com",
        "influenceRankScore": "A",
        "followerCount": "15200",
        "averageViewCount": "3500",
        "currentPrice": 500000,
        "quotePrice": 600000,
        "adminMemo": "우수 크리에이터",
        "latestNegotiationId": 1,
        "latestProposedPrice": 500000,
        "latestNegotiationStatus": "PENDING",
        "negotiationRespondedAt": null,
        "contractWritten": true,
        "contractNote": "O 계약완료",
        "paymentMethod": "현금",
        "contractWrittenAt": "2025-01-20T14:00:00",
        "matchScore": 0.87,
        "autoCategories": ["뷰티", "스킨케어", "리뷰"],
        "defaultUnitPrice": 450000,
        "previouslyCollaborated": true,
        "recentPosts": [
          {
            "postId": "abc123",
            "postLink": "https://instagram.com/p/abc123",
            "mediaUrl": "https://video.cdninstagram.com/...",
            "mediaType": "VIDEO",
            "publishedAt": "2025-01-20T14:30:00Z"
          },
          {
            "postId": "def456",
            "postLink": "https://instagram.com/p/def456",
            "mediaUrl": "https://scontent.cdninstagram.com/...",
            "mediaType": "IMAGE",
            "publishedAt": "2025-01-18T10:00:00Z"
          }
        ]
      }
    ]
  }
}

응답 필드 설명

data 객체

필드타입설명
campaignObject캠페인 정보
remainBusinessCreditInteger기업 잔여 크레딧
bizNameString기업명
veteranPercentageDouble고인물% — 신청자 중 고인물 크리에이터 비율 (소수점 1자리). 70% 이상이면 추가 모집 필요 신호
itemsArray신청 목록

items 배열 내 각 항목

필드타입설명
applicationIdLong신청 ID
appliedAtLocalDateTime신청일
adminVisibleBoolean기업 대시보드 노출 여부
sourceTypeString신청 경로 (SELF_APPLIED, ADMIN_ADDED, AI_RECOMMENDED)
influenceNoInteger인플루언서 번호
influenceNameString인플루언서 이름
influenceProfileImageString프로필 이미지 URL
influenceTelString전화번호
influenceEmailString이메일
influenceRankScoreString랭크 점수
followerCountString팔로워 수. Instagram OAuth 연동 데이터(SocialAccount) 우선, 없으면 크롤링 데이터(PostgreSQL)에서 조회
averageViewCountString평균 조회수. Instagram OAuth 연동 데이터 우선, 없으면 크롤링 데이터에서 조회. 네이버 플랫폼은 avgViews, 그 외는 reelsAvgViews 사용
currentPriceLong글특가 (광고주에게 노출되는 가격). 기준가 x (1 + 수수료율) 만원올림
quotePriceLong기존가 (기준 가격). 글특가 x 1.5 만원올림
matchScoreDoubleAI 매칭 점수 (벡터 코사인 유사도, 0~1). TB_APPLICATION_MATCHING.match_score에서 조회
autoCategoriesArray<String>AI 자동 카테고리 목록. PostgreSQL influencer_profile.auto_category_categories, 구분 파싱
adminMemoString비고 (ApplicationMatching.recommendReason)
latestNegotiationIdLong최근 단가 협상 ID
latestProposedPriceLong최근 제안 가격
latestNegotiationStatusString협상 상태 (PENDING, ACCEPT, REJECT)
negotiationRespondedAtLocalDateTime협상 응답 시간
contractWrittenBoolean계약서 작성 여부
contractNoteString계약서 비고
paymentMethodString지불 방식
contractWrittenAtLocalDateTime계약서 작성 시간
defaultUnitPriceLong크리에이터 희망 단가
previouslyCollaboratedBoolean같은 브랜드와 기협업 여부 (이전 캠페인에서 SELECTED된 적 있음)
recentPostsArray<PostMediaDto>최근 게시물 미디어 (최대 3개)

recentPosts 배열 내 각 항목 (PostMediaDto)

필드타입설명
postIdString게시물 ID
postLinkString게시물 링크
mediaUrlString미디어 URL (video_url 또는 images 중 첫 번째)
mediaTypeString미디어 타입 (VIDEO 또는 IMAGE)
publishedAtOffsetDateTime게시일

recentPosts 조회 로직

  • PostgreSQL의 post 테이블에서 account_link로 최근 게시물 3개를 조회합니다.
  • video_url이 있으면 mediaType: VIDEO로 반환
  • video_url이 없으면 images의 첫 번째 이미지를 mediaType: IMAGE로 반환

기협업자 (previouslyCollaborated) 판별 로직

  • 같은 기업(businessId)의 다른 캠페인에서 SELECTED 상태였던 크리에이터이면 true
  • 현재 캠페인의 SELECTED는 제외 (자기 자신 캠페인)
  • 한 브랜드가 여러 캠페인을 운영하는 경우, 이전 캠페인 중 하나라도 SELECTED였으면 기협업자로 표시

고인물% (veteranPercentage) 계산 로직

  • 고인물 정의: 현재 모집 중인 캠페인(CREATOR_RECRUIT, CREATOR_MATCHING) 중 70% 이상에 직접 신청(SELF_APPLIED) 한 크리에이터
  • 고인물%: 해당 캠페인 신청자 중 고인물 크리에이터가 차지하는 비율
  • ADMIN_ADDED, AI_RECOMMENDED로 추가된 건은 고인물 판별 대상에서 제외
  • 고인물% ≥ 70% → 추가 모집 필요 신호

API 테스트

On this page