Glowb Dev Docs
Admin API

Admin Dashboard API

관리자 대시보드 관리 API

Admin Dashboard API

관리자 대시보드 관리 API입니다.

Base URL: /ai/admin/dashboard

이 API는 관리자 권한이 필요합니다.

엔드포인트 목록

대시보드 관리

메서드경로설명
POST/ai/admin/dashboard대시보드 생성
GET/ai/admin/dashboard/{campaignNo}/progress캠페인 진행 상황 조회
PATCH/ai/admin/dashboard/{campaignNo}/substep캠페인 진행 상태 변경

리스트 관리

메서드경로설명
GET/ai/admin/dashboard/{campaignNo}/list리스트 관리 조회
PATCH/ai/admin/dashboard/{campaignNo}/list리스트 관리 벌크 업데이트

벌크 업데이트

메서드경로설명
PATCH/ai/admin/dashboard/{campaignNo}/bulk신청 상태 벌크 변경

유저 풀

메서드경로설명
GET/ai/admin/dashboard/{campaignNo}/user-pool유저 풀 조회

가격 협상

메서드경로설명
POST/ai/admin/dashboard/{campaignNo}/price-negotiations협업 단가 전송

API 상세

대시보드 생성

관리자가 대시보드를 생성합니다.

HTTP 요청

POST /ai/admin/dashboard
Authorization: Bearer {access_token}
Content-Type: application/json

Request Body

{
  "businessId": "business123",
  "title": "여름 뷰티 캠페인"
}

응답

성공 응답 (201 Created)

{
  "status": 201,
  "code": null,
  "message": "대시보드가 생성되었습니다.",
  "data": 123
}

캠페인 진행 상황 조회

캠페인의 진행 상황 테이블을 조회합니다. adminVisible 무관하게 전체 조회됩니다.

HTTP 요청

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

Path Parameters

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

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "진행 상황 조회 성공",
  "data": {
    "campaign": {
      "campaignNo": 123,
      "title": "여름 뷰티 캠페인"
    },
    "statistics": {
      "totalApplications": 50,
      "selected": 10,
      "rejected": 5
    },
    "applications": [...]
  }
}

리스트 관리 조회

캠페인 신청 목록을 조회합니다. 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"
    },
    "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": null,
        "averageViewCount": null,
        "currentPrice": 500000,
        "quotePrice": 600000,
        "adminMemo": "우수 크리에이터",
        "latestNegotiationId": 1,
        "latestProposedPrice": 500000,
        "latestNegotiationStatus": "PENDING",
        "negotiationRespondedAt": null,
        "contractWritten": true,
        "contractNote": "O 계약완료",
        "paymentMethod": "현금",
        "contractWrittenAt": "2025-01-20T14:00:00",
        "defaultUnitPrice": 450000
      }
    ]
  }
}

응답 필드 설명

items 배열 내 각 항목:

필드타입설명
applicationIdLong신청 ID
appliedAtLocalDateTime신청일
adminVisibleBoolean기업 대시보드 노출 여부
sourceTypeString신청 경로 (SELF_APPLIED, ADMIN_ADDED, AI_RECOMMENDED)
influenceNoInteger인플루언서 번호
influenceNameString인플루언서 이름
influenceProfileImageString프로필 이미지 URL
influenceTelString전화번호
influenceEmailString이메일
influenceRankScoreString랭크 점수
followerCountString팔로워 수 (추후 구현)
averageViewCountString평균 조회수 (추후 구현)
currentPriceLong노출가 (ApplicationMatching)
quotePriceLong기준가 (ApplicationMatching)
adminMemoString비고 (ApplicationMatching.recommendReason)
latestNegotiationIdLong최근 단가 협상 ID
latestProposedPriceLong최근 제안 가격
latestNegotiationStatusString협상 상태 (PENDING, ACCEPT, REJECT)
negotiationRespondedAtLocalDateTime협상 응답 시간
contractWrittenBoolean계약서 작성 여부
contractNoteString계약서 비고
paymentMethodString지불 방식
contractWrittenAtLocalDateTime계약서 작성 시간
defaultUnitPriceLong크리에이터 희망 단가

리스트 관리 벌크 업데이트

리스트 관리 탭에서 여러 항목을 일괄 업데이트합니다.

  • applicationId가 있으면 기존 신청을 업데이트합니다.
  • applicationId가 없고 influenceNo가 있으면 유저 풀에서 새로 추가합니다 (sourceType: ADMIN_ADDED).

HTTP 요청

PATCH /ai/admin/dashboard/{campaignNo}/list
Authorization: Bearer {access_token}
Content-Type: application/json

Path Parameters

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

Request Body

필드타입필수설명
applicationIdLong조건부기존 신청 업데이트 시 필수
influenceNoInteger조건부유저 풀에서 새로 추가 시 필수
adminVisibleBoolean아니오기업 대시보드 노출 여부
currentPriceLong아니오노출가
adminMemoString아니오비고
contractWrittenString아니오계약서 작성 여부 ("O" 포함 시 작성완료, "X" 포함 시 미작성)
paymentString아니오지불 여부 ("O", "현금", "카드" 등)
{
  "items": [
    {
      "applicationId": 35,
      "adminVisible": true,
      "currentPrice": 550000,
      "adminMemo": "우수 크리에이터, 팔로워 10만+",
      "contractWritten": "O 계약완료",
      "payment": "O"
    },
    {
      "applicationId": 36,
      "adminVisible": false,
      "currentPrice": 300000,
      "adminMemo": "보류"
    },
    {
      "influenceNo": 2466,
      "adminVisible": true,
      "currentPrice": 400000,
      "adminMemo": "유저 풀에서 추가"
    }
  ]
}

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "3건의 항목이 업데이트되었습니다.",
  "data": {
    "success": true,
    "updatedIds": [35, 36, 101],
    "failedIds": [],
    "message": "3건의 항목이 업데이트되었습니다."
  }
}

일부 실패 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "2건 성공, 1건 실패",
  "data": {
    "success": false,
    "updatedIds": [35, 36],
    "failedIds": [37],
    "message": "2건 성공, 1건 실패"
  }
}

신청 상태 벌크 변경

여러 신청의 선정 상태, 진행 단계, 관리자 노출 여부를 일괄 변경합니다.

HTTP 요청

PATCH /ai/admin/dashboard/{campaignNo}/bulk
Authorization: Bearer {access_token}
Content-Type: application/json

Request Body

{
  "applicationIds": [1, 2, 3],
  "selectionStatus": "SELECTED",
  "phase": "PRODUCT_DELIVERY",
  "adminVisible": true
}

캠페인 진행 상태 변경

캠페인의 진행 상태(SubStep)를 변경합니다.

HTTP 요청

PATCH /ai/admin/dashboard/{campaignNo}/substep?subStep={subStep}
Authorization: Bearer {access_token}

Query Parameters

파라미터타입필수설명
subStepCampaignSubStep변경할 진행 상태

CampaignSubStep 값

설명
CAMPAIGN_REVIEW캠페인 내용 검토
CAMPAIGN_PAYMENT캠페인비 결제
CAMPAIGN_GUIDELINE콘텐츠 가이드라인 작성
CREATOR_RECRUIT크리에이터 모집
CREATOR_MATCHING협업 상세 협의
CONTENT_CREATION콘텐츠 제작
CONTENT_REVIEW콘텐츠 검수
CONTENT_PUBLISH콘텐츠 발행 취합
RESULT_SUMMARY캠페인 결과 취합
CAMPAIGN_COMPLETED캠페인 완료

유저 풀 조회

해당 캠페인에 신청하지 않은 인플루언서 목록을 조회합니다. Cursor 기반 페이지네이션을 사용합니다.

HTTP 요청

GET /ai/admin/dashboard/{campaignNo}/user-pool?snsType={snsType}&category={category}&country={country}&cursor={cursor}&size={size}
Authorization: Bearer {access_token}

Query Parameters

파라미터타입필수설명
snsTypestring아니오SNS 타입 (INSTAGRAM, YOUTUBE, TIKTOK 등)
categorystring아니오카테고리
countrystring아니오국가 코드
cursorint아니오마지막 조회 influence no
sizeint아니오조회 개수 (기본 15)

협업 단가 전송 (벌크)

선택된 크리에이터들에게 단가 제안을 전송합니다.

CampaignApplication이 없으면 자동 생성(ADMIN_ADDED)되고, PriceNegotiation이 PENDING 상태로 생성됩니다.

HTTP 요청

POST /ai/admin/dashboard/{campaignNo}/price-negotiations
Authorization: Bearer {access_token}
Content-Type: application/json

Request Body

{
  "items": [
    {
      "influenceId": "influence123",
      "proposedPrice": 500000
    },
    {
      "influenceId": "influence456",
      "proposedPrice": 300000
    }
  ]
}

사용 예시

캠페인 진행 상황 조회

curl -X GET https://api.glowb.io/ai/admin/dashboard/123/progress \
  -H "Authorization: Bearer {token}"

리스트 관리 벌크 업데이트

curl -X PATCH https://api.glowb.io/ai/admin/dashboard/123/list \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {"applicationId": 1, "adminVisible": true, "currentPrice": 500000}
    ]
  }'

API 테스트

대시보드 관리

리스트 관리

유저 풀

가격 협상

On this page