Glowb Dev Docs
SaaS API

인플루언서 SaaS API

인플루언서 계정 전용 API

인플루언서 SaaS API

인플루언서 계정에서 사용하는 API입니다.

Base URL: /ai/influence

인증 정보

항목
인증 필요
인증 방식JWT Bearer Token

엔드포인트 목록

캠페인 신청

메서드경로설명인증
GET/ai/influence/campaign/{collabId}/application/info캠페인 신청 페이지 정보 조회필요
POST/ai/influence/campaign/application캠페인 신청필요
GET/ai/influence/campaigns/applications신청 목록 조회필요
PATCH/ai/influence/campaigns/applications/{id}/contract-read계약서 읽음 처리필요
POST/ai/influence/campaigns/applications/{applicationId}/content캠페인 콘텐츠 업로드필요

마이페이지

메서드경로설명인증
GET/ai/influence/mypage마이페이지 데이터 조회필요
POST/ai/influence/mypage마이페이지 데이터 저장필요
PATCH/ai/influence/mypage마이페이지 데이터 수정필요

배송지 관리

메서드경로설명인증
POST/ai/influence/delivery-address배송지 추가필요
PUT/ai/influence/delivery-address/{id}배송지 수정필요
DELETE/ai/influence/delivery-address/{id}배송지 삭제필요

가격 협상

메서드경로설명인증
PATCH/ai/influence/price-negotiations/{negotiationId}/respond가격 협상 응답필요

API 상세

캠페인 신청 페이지 정보 조회

캠페인 신청 페이지 접속 시 필요한 정보를 조회합니다.

HTTP 요청

GET /ai/influence/campaign/{collabId}/application/info
Authorization: Bearer {access_token}

Path Parameters

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

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "성공",
  "data": {
    "applicantName": "홍길동",
    "email": "user@example.com",
    "snsAccount": {
      "platform": "INSTAGRAM",
      "username": "@influencer",
      "followers": 50000
    },
    "deliveryAddress": {
      "recipientName": "홍길동",
      "phone": "010-1234-5678",
      "address": "서울시 강남구..."
    }
  }
}

캠페인 신청

캠페인에 신청합니다.

HTTP 요청

POST /ai/influence/campaign/application
Authorization: Bearer {access_token}
Content-Type: application/json

Request Body

{
  "collabId": 123,
  "snsAccountId": 456,
  "deliveryAddressId": 789,
  "message": "안녕하세요, 관심있어서 신청합니다!",
  "proposedPrice": 500000
}

Response

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "신청 완료",
  "data": null
}

캠페인 신청 목록 조회

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

HTTP 요청

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

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "성공",
  "data": {
    "totalSettlement": 2500000,
    "applications": [
      {
        "applicationId": 1,
        "collabId": 123,
        "thumbnailImage": "https://...",
        "platform": "INSTAGRAM",
        "contentFormat": "REEL",
        "campaignName": "여름 뷰티 캠페인",
        "selectionStatus": "SELECTED",
        "selectionStatusDisplay": "선정됨",
        "isContractRead": false,
        "appliedAt": "2024-01-15T10:00:00",
        "contractDeadline": "2024-01-20T23:59:59",
        "phase": "FIRST_REVIEW",
        "reviewId": 101,
        "reviewRound": 1,
        "feedbackDeadline": "2024-01-25T23:59:59",
        "contentSubmissionDeadline": "2024-01-22T23:59:59",
        "hasNewFeedback": true,
        "isSubmitted": false,
        "needsResubmission": true,
        "hasAdditionalReviewRequest": false,
        "priceNegotiationId": 501,
        "proposedPrice": 450000,
        "negotiationOrder": 2,
        "negotiationStatus": "ACCEPT"
      },
      {
        "applicationId": 2,
        "collabId": 456,
        "thumbnailImage": "https://...",
        "platform": "YOUTUBE",
        "contentFormat": "SHORTS",
        "campaignName": "겨울 패션 캠페인",
        "selectionStatus": "SELECTED",
        "selectionStatusDisplay": "선정됨",
        "isContractRead": true,
        "appliedAt": "2024-01-10T10:00:00",
        "contractDeadline": "2024-01-15T23:59:59",
        "phase": "UPLOAD_SETTLEMENT",
        "reviewId": 202,
        "reviewRound": 2,
        "finalSubmittedAt": "2024-01-28T14:30:00",
        "reRequestTypes": "[\"CONTENT_LINK\", \"CLEAN_FILE\"]"
      }
    ]
  }
}

응답 필드 설명

공통 필드:

필드타입설명
applicationIdlong신청 ID
collabIdint캠페인 ID
thumbnailImagestring캠페인 썸네일 이미지
platformstring플랫폼 (SNS)
contentFormatstring게시물 종류 (릴스, 숏츠 등)
campaignNamestring캠페인명
selectionStatusstring선정 상태 (WAITING, SELECTED, REJECTED, PROPOSAL 등)
selectionStatusDisplaystring선정 상태 표시명
isContractReadboolean계약서 읽음 여부
appliedAtdatetime신청일
contractDeadlinedatetime계약서 작성 마감일
phasestring현재 단계 (APPLIED, CONTRACT, FIRST_REVIEW, SECOND_REVIEW, UPLOAD_SETTLEMENT, COMPLETED)

콘텐츠 제작 단계 필드 (FIRST_REVIEW, SECOND_REVIEW):

필드타입설명
reviewIdlong검수 라운드 ID
reviewRoundint검수 라운드 (1차 또는 2차)
feedbackDeadlinedatetime피드백 반영 마감일
contentSubmissionDeadlinedatetime콘텐츠 제출 마감일 (DRAFT_REVIEW 마감일)
hasNewFeedbackboolean새로운 피드백 유무
isSubmittedboolean제출물 제출 여부
needsResubmissionboolean크리에이터가 지금 수정/재제출해야 하는지 여부. true: 재제출 필요, false: 기업 검수 대기 중
hasAdditionalReviewRequestboolean추가 검수 요청이 있었는지 여부. true: 추가 검수 요청 있음 (maxFeedbackCount > 1)

업로드/정산 단계 필드 (UPLOAD_SETTLEMENT):

필드타입설명
reviewIdlong가장 최근 검수 라운드 ID (보통 2차 검수)
reviewRoundint가장 최근 검수 라운드 (1 또는 2)
finalSubmittedAtdatetime최종제출물 제출일시
reRequestTypesstring재요청 항목 목록 (JSON 배열 문자열). 예: ["CONTENT_LINK", "CLEAN_FILE", "FINAL_FILE", "PARTNERSHIP_CODE"]

reRequestTypes가 있는 경우, 인플루언서는 해당 항목을 재제출해야 합니다.

가격 협상 필드 (신청/계약 단계):

필드타입설명
priceNegotiationIdlong가격 협상 ID
proposedPricelong제안 가격
negotiationOrderint협상 순서 (1: 첫 번째 제안, 2: 두 번째 제안 등)
negotiationStatusstring협상 상태 (PENDING: 대기중, ACCEPT: 수락)

CTA 표시 로직:

  • negotiationStatusPENDING인 경우: 수락/거절 버튼 표시
  • negotiationStatusACCEPT인 경우: "최종 선정 대기중" 표시
  • negotiationStatusnull인 경우: 협상 정보 없음 (표시하지 않음)

계약서 읽음 처리

캠페인 신청 건의 계약서를 읽음 상태로 변경합니다.

HTTP 요청

PATCH /ai/influence/campaigns/applications/{id}/contract-read
Authorization: Bearer {access_token}

Path Parameters

파라미터타입필수설명
idlong신청 ID

마이페이지 데이터 조회

프로필 이미지, 이름, 전화번호, 이메일, 배송지 목록을 조회합니다.

HTTP 요청

GET /ai/influence/mypage
Authorization: Bearer {access_token}

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "성공",
  "data": {
    "profileImage": "https://...",
    "name": "홍길동",
    "phone": "010-1234-5678",
    "email": "user@example.com",
    "deliveryAddresses": [
      {
        "id": 1,
        "addressName": "집",
        "recipientName": "홍길동",
        "phone": "010-1234-5678",
        "address": "서울시 강남구...",
        "isDefault": true
      }
    ]
  }
}

마이페이지 데이터 저장/수정

프로필 이미지, 이름, 전화번호, 이메일을 저장하거나 수정합니다.

HTTP 요청

POST /ai/influence/mypage
Authorization: Bearer {access_token}
Content-Type: multipart/form-data

Request Parts

파트타입필수설명
filefile아니오프로필 이미지
dataMyPageUpdateRequestDto수정할 데이터 JSON

data JSON 예시

{
  "name": "홍길동",
  "phone": "010-1234-5678",
  "email": "user@example.com"
}

배송지 추가

새 배송지를 추가합니다.

HTTP 요청

POST /ai/influence/delivery-address
Authorization: Bearer {access_token}
Content-Type: application/json

Request Body

{
  "addressName": "집",
  "recipientName": "홍길동",
  "phone": "010-1234-5678",
  "zipCode": "12345",
  "address": "서울시 강남구 테헤란로 123",
  "addressDetail": "1층 101호",
  "isDefault": true
}

Request Body 스키마

필드명타입필수설명
addressNamestring배송지 이름
recipientNamestring받는 사람
phonestring연락처
zipCodestring우편번호
addressstring기본 주소
addressDetailstring아니오상세 주소
isDefaultboolean아니오기본 배송지 여부

배송지 수정

기존 배송지를 수정합니다.

HTTP 요청

PUT /ai/influence/delivery-address/{id}
Authorization: Bearer {access_token}
Content-Type: application/json

배송지 삭제

배송지를 삭제합니다.

HTTP 요청

DELETE /ai/influence/delivery-address/{id}
Authorization: Bearer {access_token}

캠페인 콘텐츠 업로드

캠페인 관련 이미지 또는 압축 파일을 업로드합니다.

HTTP 요청

POST /ai/influence/campaigns/applications/{applicationId}/content
Authorization: Bearer {access_token}
Content-Type: multipart/form-data

지원 포맷

종류지원 포맷
이미지jpg, png, gif, webp, heic, bmp, tiff, svg, avif, RAW
압축파일zip, tar, tar.gz, rar, 7z

여러 장의 이미지는 압축 파일(zip 등)로 업로드해주세요.


가격 협상 응답

관리자가 제안한 가격 협상에 대해 수락 또는 거절 응답합니다.

HTTP 요청

PATCH /ai/influence/price-negotiations/{negotiationId}/respond?action={action}
Authorization: Bearer {access_token}

Query Parameters

파라미터타입필수설명
actionstringaccept (수락) 또는 reject (거절)

사용 예시

캠페인 신청

curl -X POST https://api.glowb.io/ai/influence/campaign/application \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "collabId": 123,
    "snsAccountId": 456,
    "deliveryAddressId": 789,
    "message": "신청합니다!",
    "proposedPrice": 500000
  }'

배송지 추가

curl -X POST https://api.glowb.io/ai/influence/delivery-address \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "addressName": "집",
    "recipientName": "홍길동",
    "phone": "010-1234-5678",
    "zipCode": "12345",
    "address": "서울시 강남구 테헤란로 123",
    "addressDetail": "1층 101호",
    "isDefault": true
  }'

콘텐츠 업로드

curl -X POST https://api.glowb.io/ai/influence/campaigns/applications/123/content \
  -H "Authorization: Bearer {token}" \
  -F "file=@content.zip"

API 테스트

On this page