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
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
collabId | long | 예 | 캠페인 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/jsonRequest 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\"]"
}
]
}
}응답 필드 설명
공통 필드:
| 필드 | 타입 | 설명 |
|---|---|---|
applicationId | long | 신청 ID |
collabId | int | 캠페인 ID |
thumbnailImage | string | 캠페인 썸네일 이미지 |
platform | string | 플랫폼 (SNS) |
contentFormat | string | 게시물 종류 (릴스, 숏츠 등) |
campaignName | string | 캠페인명 |
selectionStatus | string | 선정 상태 (WAITING, SELECTED, REJECTED, PROPOSAL 등) |
selectionStatusDisplay | string | 선정 상태 표시명 |
isContractRead | boolean | 계약서 읽음 여부 |
appliedAt | datetime | 신청일 |
contractDeadline | datetime | 계약서 작성 마감일 |
phase | string | 현재 단계 (APPLIED, CONTRACT, FIRST_REVIEW, SECOND_REVIEW, UPLOAD_SETTLEMENT, COMPLETED) |
콘텐츠 제작 단계 필드 (FIRST_REVIEW, SECOND_REVIEW):
| 필드 | 타입 | 설명 |
|---|---|---|
reviewId | long | 검수 라운드 ID |
reviewRound | int | 검수 라운드 (1차 또는 2차) |
feedbackDeadline | datetime | 피드백 반영 마감일 |
contentSubmissionDeadline | datetime | 콘텐츠 제출 마감일 (DRAFT_REVIEW 마감일) |
hasNewFeedback | boolean | 새로운 피드백 유무 |
isSubmitted | boolean | 제출물 제출 여부 |
needsResubmission | boolean | 크리에이터가 지금 수정/재제출해야 하는지 여부. true: 재제출 필요, false: 기업 검수 대기 중 |
hasAdditionalReviewRequest | boolean | 추가 검수 요청이 있었는지 여부. true: 추가 검수 요청 있음 (maxFeedbackCount > 1) |
업로드/정산 단계 필드 (UPLOAD_SETTLEMENT):
| 필드 | 타입 | 설명 |
|---|---|---|
reviewId | long | 가장 최근 검수 라운드 ID (보통 2차 검수) |
reviewRound | int | 가장 최근 검수 라운드 (1 또는 2) |
finalSubmittedAt | datetime | 최종제출물 제출일시 |
reRequestTypes | string | 재요청 항목 목록 (JSON 배열 문자열). 예: ["CONTENT_LINK", "CLEAN_FILE", "FINAL_FILE", "PARTNERSHIP_CODE"] |
reRequestTypes가 있는 경우, 인플루언서는 해당 항목을 재제출해야 합니다.
가격 협상 필드 (신청/계약 단계):
| 필드 | 타입 | 설명 |
|---|---|---|
priceNegotiationId | long | 가격 협상 ID |
proposedPrice | long | 제안 가격 |
negotiationOrder | int | 협상 순서 (1: 첫 번째 제안, 2: 두 번째 제안 등) |
negotiationStatus | string | 협상 상태 (PENDING: 대기중, ACCEPT: 수락) |
CTA 표시 로직:
negotiationStatus가PENDING인 경우: 수락/거절 버튼 표시negotiationStatus가ACCEPT인 경우: "최종 선정 대기중" 표시negotiationStatus가null인 경우: 협상 정보 없음 (표시하지 않음)
계약서 읽음 처리
캠페인 신청 건의 계약서를 읽음 상태로 변경합니다.
HTTP 요청
PATCH /ai/influence/campaigns/applications/{id}/contract-read
Authorization: Bearer {access_token}Path Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
id | long | 예 | 신청 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-dataRequest Parts
| 파트 | 타입 | 필수 | 설명 |
|---|---|---|---|
file | file | 아니오 | 프로필 이미지 |
data | MyPageUpdateRequestDto | 예 | 수정할 데이터 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/jsonRequest Body
{
"addressName": "집",
"recipientName": "홍길동",
"phone": "010-1234-5678",
"zipCode": "12345",
"address": "서울시 강남구 테헤란로 123",
"addressDetail": "1층 101호",
"isDefault": true
}Request Body 스키마
| 필드명 | 타입 | 필수 | 설명 |
|---|---|---|---|
addressName | string | 예 | 배송지 이름 |
recipientName | string | 예 | 받는 사람 |
phone | string | 예 | 연락처 |
zipCode | string | 예 | 우편번호 |
address | string | 예 | 기본 주소 |
addressDetail | string | 아니오 | 상세 주소 |
isDefault | boolean | 아니오 | 기본 배송지 여부 |
배송지 수정
기존 배송지를 수정합니다.
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
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
action | string | 예 | accept (수락) 또는 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"