Glowb Dev Docs
SaaS APIProgress Table

GET /ai/progress-table/item/{id}

캠페인 진행 항목 조회

캠페인 진행 항목 조회

기업 대시보드용 캠페인 진행 항목을 조회합니다.

HTTP 요청

GET /ai/progress-table/item/{id}
Authorization: Bearer {access_token}

Path Parameters

파라미터타입필수설명
idlong캠페인 ID

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "캠페인 진행 상황 항목 조회가 완료되었습니다.",
  "data": {
    "step": "MATCHING",
    "items": [
      {
        "id": 1,
        "creator": "인플루언서A",
        "creatorEmail": "influencer_a@example.com",
        "influenceId": 12345,
        "profileImg": "https://s3.../profile.jpg",
        "creatorLink": "https://instagram.com/influencer_a",
        "trackingNumber": "1234567890",
        "uploadUrl": "https://instagram.com/p/xxx",
        "file": null,
        "aiCheckReady": true,
        "matchingStatus": "MATCHED",
        "deliveryStatus": "DELIVERED",
        "aiCheck": "APPROVED",
        "personCheck": "PENDING",
        "campaignResult": null,
        "recommendReason": "높은 참여율",
        "uploadStatus": "UPLOADED",
        "quotePrice": 100000,
        "currentPrice": 80000,
        "collaborationNote": "특별 요청 사항",
        "reviewInfo": {
          "hasNewSubmission": false,
          "reviews": [
            {
              "reviewRound": 1,
              "reviewId": 101,
              "status": "APPROVED",
              "hasNewSubmission": false,
              "submissionItems": []
            }
          ],
          "uploadApproved": true,
          "finalSubmission": null
        },
        "followerCount": 50000,
        "avgViewCount": 10000,
        "rank": "A",
        "rankPrice": 100000,
        "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"
          }
        ],
        "contractId": 42,
        "contractStatus": "SIGNED"
      }
    ],
    "isLegacy": false,
    "totalCount": 10,
    "eliminatedCount": 2,
    "eliminatedPercentage": 20.0,
    "campaignDetails": {
      "no": "123",
      "businessId": "business_001",
      "thumbnailImagePath": "https://s3.../thumbnail.jpg",
      "productImagePath": "https://s3.../product.jpg",
      "productImagePaths": ["https://s3.../product1.jpg"],
      "snsType": "INSTAGRAM",
      "contentFormat": "REEL",
      "category": "BEAUTY",
      "campaignType": "SEEDING",
      "campaignSubStep": "CREATOR_RECRUIT",
      "guidelineStatus": "COMPLETED",
      "productName": "상품명",
      "charge": "100000",
      "currency": "KRW",
      "recruitCount": "10",
      "recruitmentStartDate": "2024-01-01 00:00:00",
      "recruitmentEndDate": "2024-01-31 23:59:59",
      "campaignContractType": "STANDARD"
    },
    "budgetSummary": {
      "totalBudget": 1000000,
      "usedCredit": 300000,
      "refundAmount": 700000,
      "lockedCount": 3,
      "status": "ACTIVE"
    },
    "guidelineCompletedAt": "2025-02-15T14:30:00"
  }
}

Response 스키마

ProgressTableWithCampaignResponse

필드명타입설명
stepstring진행 단계 ("MATCHING" | "EXECUTING")
itemsProgressItemExceptBidPriceResponse[]진행 항목 목록
isLegacyboolean레거시 여부
totalCountint전체 항목 수
eliminatedCountint탈락 항목 수
eliminatedPercentagedouble탈락률 (%)
campaignDetailsCampaignFullResponseDto캠페인 상세 정보
budgetSummaryBudgetSummaryDto캠페인 예산 요약 (SaaS 캠페인만)
guidelineCompletedAtdatetime가이드라인 완성일. 가이드라인 미완성 시 null

ProgressItemExceptBidPriceResponse

필드명타입설명
idlong항목 ID
creatorstring크리에이터 이름
creatorEmailstring크리에이터 이메일
influenceIdlong인플루언서 ID
profileImgstring프로필 이미지 URL
creatorLinkstring크리에이터 링크
trackingNumberstring운송장 번호
uploadUrlstring업로드 URL
filestring파일 URL
aiCheckReadybooleanAI 체크 준비 상태
matchingStatusstring매칭 상태
deliveryStatusstring배송 상태
aiCheckstringAI 검수 상태
personCheckstring담당자 검수 상태
campaignResultstring캠페인 결과 URL
recommendReasonstring추천 이유
uploadStatusstring업로드 상태
quotePricelong견적 가격
currentPricelong현재 가격
collaborationNotestring협업 노트
reviewInfoReviewInfo검수 정보
followerCountlong팔로워 수
avgViewCountlong평균 조회수
rankstring랭크 (A/B/C 등)
rankPriceint랭크별 가격
recentPostsPostMediaDto[]최근 게시물 미디어 (최대 3개)
contractIdlong전자계약서 ID (계약서 미발송 시 null)
contractStatusstring전자계약 상태 (DRAFT, SENT, OPENED, FILLED, OTP_VERIFIED, SIGNED). 계약서 미발송 시 null

PostMediaDto

필드명타입설명
postIdstring게시물 ID
postLinkstring게시물 링크
mediaUrlstring미디어 URL (video_url 또는 images 중 첫 번째)
mediaTypestring미디어 타입 (VIDEO 또는 IMAGE)
publishedAtdatetime게시일

recentPosts는 PostgreSQL의 post 테이블에서 조회됩니다.

  • video_url이 있으면 mediaType: VIDEO로 반환
  • video_url이 없으면 images의 첫 번째 이미지를 mediaType: IMAGE로 반환

BudgetSummaryDto (SaaS 캠페인만 반환)

필드명타입설명
totalBudgetint캠페인 총 예산 (CAMPAIGN_DEPOSIT 합계)
usedCreditint사용(LOCKED) 금액 합계
refundAmountint환급 가능 금액 (totalBudget - usedCredit)
lockedCountlong잠금된 건수
statusstring상태 ("ACTIVE")

budgetSummary는 SaaS 캠페인(collabNo >= saasNum)에서만 반환됩니다. 레거시 캠페인은 null이 반환됩니다.

guidelineCompletedAt은 가이드라인 상태가 COMPLETED이고 칸반 태스크(TB_KANBAN_TASK)에서 task_code = GUIDELINE_FINAL인 태스크의 completed_at 값입니다. 가이드라인이 완성되지 않았거나 해당 태스크가 없으면 null이 반환됩니다.

예산 관련 에러 응답

매칭 상태를 PROPOSAL로 변경할 때 예산 검증 실패 시 발생하는 에러입니다.

상태 코드에러 코드설명
400NEED_CAMPAIGN_DEPOSIT캠페인 예산이 부족합니다. 추가 입금이 필요합니다.
400INSUFFICIENT_GLOBAL_CREDIT기업 크레딧이 부족합니다. 크레딧을 충전해주세요.
403PROPOSAL_STATUS_CHANGE_NOT_ALLOWED제안 상태의 크리에이터는 기업에서 상태를 변경할 수 없습니다. 관리자에게 문의해주세요.
404BUDGET_NOT_FOUND캠페인 예산 정보를 찾을 수 없습니다.
400BUDGET_ALREADY_LOCKED이미 예산이 예약되어 있습니다.
400BUDGET_ALREADY_UNLOCKED이미 예산이 취소되었습니다.

NEED_CAMPAIGN_DEPOSIT 발생 시: 캠페인 예산 추가 입금 API (POST /ai/payments/collab/confirm)를 호출하세요.

INSUFFICIENT_GLOBAL_CREDIT 발생 시: 크레딧 충전 API (POST /ai/payments/credit/confirm)를 먼저 호출하세요.

API 테스트

On this page