{ "openapi": "3.1.0", "info": { "title": "🔗 RealMatch API", "description": "RealMatch API 명세서입니다.", "version": "1.0.0" }, "servers": [ { "url": "https://api.realmatch.co.kr/" } ], "security": [ { "JWT Authentication": [] } ], "tags": [ { "name": "Brand-Campain", "description": "브랜드의 캠페인 API" }, { "name": "Chat", "description": "채팅 REST API" }, { "name": "Business", "description": "비즈니스 API" }, { "name": "Authentication", "description": "사용자 인증 API" }, { "name": "Attachment", "description": "첨부파일 REST API" }, { "name": "Campaign", "description": "캠페인 API" }, { "name": "test", "description": "테스트용 API" }, { "name": "Tag", "description": "태그 조회 API" }, { "name": "Match", "description": "크리에이터-브랜드 매칭 API" }, { "name": "Brand", "description": "브랜드 API" }, { "name": "user", "description": "유저 관련 API" } ], "paths": { "/api/v1/users/me/edit": { "get": { "tags": [ "user" ], "summary": "회원 정보 변경 기본 조회 API By 고경수", "description": "내 정보 수정에 필요한 정보를 조회합니다.", "operationId": "getMyEditInfo", "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMyEditInfoResponseDto" } } } } } }, "post": { "tags": [ "user" ], "summary": "회원정보 변경 API By 고경수", "description": "사용자의 닉네임, 주소, 상세주소를 수정합니다.", "operationId": "updateMyInfo", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MyEditInfoRequestDto" } } }, "required": true }, "responses": { "200": { "description": "수정 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseVoid" } } } }, "400": { "description": "잘못된 요청", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseVoid" } } } }, "404": { "description": "유저를 찾을 수 없음", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseVoid" } } } } } } }, "/api/v1/matches": { "post": { "tags": [ "Match" ], "summary": "크리에이터 매칭 분석 by 정윤철", "description": "크리에이터 정보를 기반으로 매칭 분석 결과와 추천 브랜드 목록을 반환합니다.\nuserType, typeTag, highMatchingBrandList를 포함합니다.\n", "operationId": "match", "requestBody": { "description": "크리에이터 매칭 요청 정보", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MatchRequestDto" }, "examples": { "뷰티 크리에이터 예시": { "summary": "뷰티 중심 크리에이터", "description": "뷰티 크리에이터 예시", "value": { "beauty": { "interestStyleTags": [1, 2], "prefferedFunctionTags": [6, 7], "skinTypeTags": 12, "skinToneTags": 13, "makeupStyleTags": 2 }, "fashion": { "interestStyleTags": [16, 17], "preferredItemTags": [22, 23], "preferredBrandTags": [27, 28], "heightTag": 72, "weightTypeTag": 94, "topSizeTag": 108, "bottomSizeTag": 178 }, "content": { "sns": { "url": "https://www.instagram.com/vivi", "mainAudience": { "genderTags": [221, 222], "ageTags": [223, 224] }, "averageAudience": { "videoLengthTags": [228, 229], "videoViewsTags": [232, 233] } }, "typeTags": [236, 237], "toneTags": [245, 246], "prefferedInvolvementTags": [251, 252], "prefferedCoverageTags": [255, 256] } } } } } }, "required": true }, "responses": { "200": { "description": "매칭 분석 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMatchResponseDto" } } } } } } }, "/api/v1/chat/rooms": { "get": { "tags": [ "Chat" ], "summary": "채팅방 목록 조회 API By 여채현", "description": "status 기준으로 채팅방 목록을 조회합니다.\nsearch가 있으면 상대방 이름(닉네임) 또는 메시지 내용으로 검색합니다 (부분 일치, 대소문자 무시).\n정렬은 항상 lastMessageAt desc, roomId desc 기준입니다.\ncursor는 lastMessageAt|roomId 포맷을 그대로 재사용하세요.\n메시지가 없는 방은 목록에서 제외됩니다.\n", "operationId": "getRoomList", "parameters": [ { "name": "status", "in": "query", "description": "채팅방 필터 상태 (LATEST: 최신순, COLLABORATING: 협업중)", "required": false, "schema": { "type": "string", "enum": [ "LATEST", "COLLABORATING" ] } }, { "name": "cursor", "in": "query", "description": "페이지네이션 커서 (lastMessageAt|roomId 형식)", "required": false, "schema": { "type": "string" } }, { "name": "size", "in": "query", "description": "페이지 크기 (기본값: 20)", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } }, { "name": "search", "in": "query", "description": "검색어 (상대방 이름 또는 메시지 내용, 미입력 시 전체 목록)", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "채팅방 목록 조회 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomListResponse" } } } }, "COMMON401_1": { "description": "인증이 필요합니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomListResponse" } } } } } }, "post": { "tags": [ "Chat" ], "summary": "채팅방 생성/조회 API By 여채현", "description": "brandId, creatorId 기준으로 1:1 채팅방을 생성하거나 기존 방을 반환합니다.\n생성 직후 방 정보를 내려주며, 필요 시 상세 헤더는 별도 조회로 보완합니다.\n", "operationId": "createOrGetRoom", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChatRoomCreateRequest" } } }, "required": true }, "responses": { "200": { "description": "채팅방 생성/조회 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomCreateResponse" } } } }, "COMMON400_1": { "description": "잘못된 요청입니다. (요청 데이터 검증 실패)", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomCreateResponse" } } } }, "COMMON401_1": { "description": "인증이 필요합니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomCreateResponse" } } } }, "CHAT400_2": { "description": "채팅방 생성 요청이 올바르지 않습니다. (brandId/creatorId가 null이거나 동일한 경우)", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomCreateResponse" } } } }, "CHAT403_2": { "description": "채팅방 멤버가 아닙니다. (요청한 사용자가 brandId나 creatorId가 아닌 경우)", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomCreateResponse" } } } } } } }, "/api/v1/campaigns/{campaignId}/apply": { "post": { "tags": [ "Business" ], "summary": "캠페인 지원 API by 박지영", "description": "해당 캠페인을 지원합니다.\n같은 캠페인에 중복으로 지원할 수 없습니다.\n", "operationId": "applyCampaign", "parameters": [ { "name": "campaignId", "in": "path", "description": "캠페인 ID", "required": true, "schema": { "type": "integer", "format": "int64" }, "example": 1 } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CampaignApplyRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseString" } } } } } } }, "/api/v1/campaigns/proposal/{campaignProposalID}/re-request": { "post": { "tags": [ "Business" ], "summary": "캠페인 제안 수정(다시 제안하기) API by 박지영", "description": "내가 제안했던 것을 다시 제안하는 API 입니다.\n/api/v1/campaigns/proposal/request에서 생성했던 제안을 수정해서 다시 제안할 때, 해당 API를 사용해주세요.\n\ncampaignProposalId는 /api/v1/campaigns/collaborations/me에서 확인해주세요.\n(masterJWT로 조회 불가능 API, 크리에이터/브랜드 계정으로 로그인 필요)\n", "operationId": "modifyCampaignProposal", "parameters": [ { "name": "campaignProposalID", "in": "path", "description": "캠페인 Proposal ID", "required": true, "schema": { "type": "integer", "format": "int64" }, "example": 1 } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CampaignProposalRequestDto" }, "examples": { "CampaignProposalRequestExample": { "summary": "캠페인 수정 요청 예시", "description": "CampaignProposalRequestExample", "value": { "brandId": 1, "creatorId": 1, "campaignId": null, "campaignName": "비플레인 선크림 리뷰 캠페인", "description": "비플레인 선크림을 체험하고 솔직한 리뷰 콘텐츠를 제작해주세요.", "formats": [ { "id": 1 } ], "categories": [ { "id": 11, "customValue": "성분 분석 리뷰" }, { "id": 5 } ], "tones": [ { "id": 12 } ], "involvements": [ { "id": 21 } ], "usageRanges": [ { "id": 26 } ], "rewardAmount": 100000, "productId": 5, "startDate": "2025-03-29", "endDate": "2025-04-01" } } } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseString" } } } } } } }, "/api/v1/campaigns/proposal/request": { "post": { "tags": [ "Business" ], "summary": "캠페인 제안 생성 API by 박지영", "description": "크리에이터가 브랜드에 캠페인을 제안합니다.\n\n신규 캠페인인 경우 campaignId null 을 보내주세요.\n기존 캠페인인 경우 campaignId을 보내주세요.\n\n기타인 경우 customValue를 포함해서 보내주세요.\n", "operationId": "createCampaignProposal", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CampaignProposalRequestDto" }, "examples": { "CampaignProposalRequestExample": { "summary": "캠페인 제안 요청 예시", "description": "CampaignProposalRequestExample", "value": { "brandId": 1, "creatorId": 1, "campaignId": null, "campaignName": "비플레인 선크림 리뷰 캠페인", "description": "비플레인 선크림을 체험하고 솔직한 리뷰 콘텐츠를 제작해주세요.", "formats": [ { "id": 1 } ], "categories": [ { "id": 11, "customValue": "성분 분석 리뷰" } ], "tones": [ { "id": 12 }, { "id": 13 } ], "involvements": [ { "id": 20 } ], "usageRanges": [ { "id": 25 } ], "rewardAmount": 200000, "productId": 5, "startDate": "2025-03-01", "endDate": "2025-03-15" } } } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseString" } } } } } } }, "/api/v1/brands": { "get": { "tags": [ "Brand" ], "summary": "브랜드 전체 목록 조회 (페이징) by 이예림", "description": "등록된 모든 브랜드의 리스트를 페이징하여 반환합니다.", "operationId": "getAllBrands", "parameters": [ { "name": "page", "in": "query", "description": "Zero-based page index (0..N)", "required": false, "schema": { "type": "integer", "default": 0, "minimum": 0 } }, { "name": "size", "in": "query", "description": "The size of the page to be returned", "required": false, "schema": { "type": "integer", "default": 10, "minimum": 1 } }, { "name": "sort", "in": "query", "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", "required": false, "schema": { "type": "array", "items": { "type": "string" } } } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponsePageBrandListResponseDto" } } } } } }, "post": { "tags": [ "Brand" ], "summary": "브랜드 생성 by 이예림", "description": "새로운 브랜드를 등록합니다.", "operationId": "createBrand", "requestBody": { "description": "생성할 브랜드 정보", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BrandCreateRequestDto" }, "example": { "brandName": "비플레인", "industryType": "BEAUTY", "logoUrl": "https://cdn.your-service.com/brands/beplain/logo.png", "simpleIntro": "천연 유래 성분으로 민감 피부를 위한 저자극 스킨케어 브랜드", "detailIntro": "티끌없는 순수 히알루론산™으로 피부속부터 촉촉한 #수분세럼\n민감성 피부도 부담 없이 사용할 수 있는 저자극·천연재료 기반의 뷰티 브랜드입니다.", "homepageUrl": "https://www.beplain.co.kr", "brandCategory": [ "스킨케어", "메이크업" ], "brandSkinCareTag": { "skinType": [ "건성", "지성", "복합성" ], "mainFunction": [ "수분/보습", "진정" ] }, "brandMakeUpTag": { "skinType": [ "건성", "민감성" ], "brandMakeUpStyle": [ "내추럴", "글로우" ] } } } }, "required": true }, "responses": { "200": { "description": "생성 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseBrandCreateResponseDto" } } } }, "400": { "description": "잘못된 요청", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponse" } } } } } } }, "/api/v1/brands/{brandId}/like": { "post": { "tags": [ "Brand" ], "summary": "브랜드 좋아요 토글 by 이예림", "description": "브랜드 ID로 좋아요를 추가하거나 취소합니다.", "operationId": "likeBrand", "parameters": [ { "name": "brandId", "in": "path", "description": "좋아요 토글할 브랜드의 ID", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "토글 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseListBrandLikeResponseDto" } } } }, "404": { "description": "존재하지 않는 브랜드", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponse" } } } } } } }, "/api/v1/auth/signup": { "post": { "tags": [ "Authentication" ], "summary": "추가 정보 회원가입 API By 고경수", "description": "소셜 로그인 후, 닉네임, 생년월일, 역할(CREATOR/BRAND), 약관 동의 등 필수 정보를 입력하여 최종적으로 서비스를 이용할 수 있는 권한을 부여하는 API입니다.", "operationId": "signup", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SignupCompleteRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseOAuthTokenResponse" } } } } } } }, "/api/v1/auth/refresh": { "post": { "tags": [ "Authentication" ], "summary": "액세스 토큰 재발급 API By 고경수", "description": "리프레시 토큰을 사용하여 새로운 액세스 토큰을 발급받습니다.", "operationId": "refresh", "parameters": [ { "name": "RefreshToken", "in": "header", "description": "Bearer {RefreshToken}", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseOAuthTokenResponse" } } } } } } }, "/api/v1/attachments": { "post": { "tags": [ "Attachment" ], "summary": "첨부파일 업로드 API", "description": "첨부 파일을 업로드하고 메타 정보를 반환합니다.\n- IMAGE: png, jpeg(jpg)만 허용\n- FILE: pdf, doc, docx만 허용\n", "operationId": "uploadAttachment", "parameters": [ { "name": "attachmentType", "in": "query", "description": "첨부 파일 타입 (IMAGE 또는 FILE)", "required": true, "schema": { "type": "string", "enum": [ "IMAGE", "FILE" ] } }, { "name": "usage", "in": "query", "description": "용도 (CHAT: 채팅첨부, PUBLIC: 브랜드/캠페인 등 공개자산)", "required": true, "schema": { "type": "string", "enum": [ "CHAT", "PUBLIC" ] } } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "file": { "type": "string", "format": "binary", "description": "업로드할 파일" } }, "required": [ "file" ] } } } }, "responses": { "200": { "description": "첨부파일 업로드 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } }, "COMMON400_1": { "description": "잘못된 요청입니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } }, "COMMON401_1": { "description": "인증이 필요합니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } }, "ATTACHMENT400_1": { "description": "유효하지 않은 파일입니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } }, "ATTACHMENT400_2": { "description": "유효하지 않은 파일명입니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } }, "ATTACHMENT400_3": { "description": "유효하지 않은 파일 크기입니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } }, "ATTACHMENT400_4": { "description": "파일 크기가 제한을 초과했습니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } }, "ATTACHMENT400_5": { "description": "지원하지 않는 이미지 형식입니다. (png, jpeg만 허용)", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } }, "ATTACHMENT400_7": { "description": "지원하지 않는 첨부파일 형식입니다. (pdf, doc, docx만 허용)", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } }, "ATTACHMENT500_1": { "description": "파일 업로드에 실패했습니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseAttachmentUploadResponse" } } } } } } }, "/api/v1/users/me/feature": { "get": { "tags": [ "user" ], "summary": "내 특성 조회 API By 고경수", "description": "로그인한 사용자의 특성 정보를 조회합니다. (하드코딩)", "operationId": "getMyFeature", "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMyFeatureResponseDto" } } } } } }, "patch": { "tags": [ "user" ], "summary": "내 특성 수정 API By 고경수", "description": "로그인한 사용자의 특성 정보를 수정합니다. (하드코딩)", "operationId": "updateMyFeature", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MyFeatureUpdateRequestDto" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseVoid" } } } } } } }, "/api/v1/campaigns/proposal/{campaignProposalId}/approve": { "patch": { "tags": [ "Business" ], "summary": "받은 캠페인 제안 수락 API by 박지영", "description": "제안 받은 사람이 제안을 수락하는 API입니다.\n/api/v1/campaigns/proposal/{campaignProposalId}에서 status가 MATCH로 변경되었다면 성공입니다.\n", "operationId": "approveCampaignProposal", "parameters": [ { "name": "campaignProposalId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseString" } } } } } } }, "/api/v1/brands/{brandId}": { "get": { "tags": [ "Brand" ], "summary": "브랜드 상세 조회 by 이예림", "description": "브랜드 ID로 상세 정보를 조회합니다.", "operationId": "getBrandDetail", "parameters": [ { "name": "brandId", "in": "path", "description": "조회할 브랜드의 ID", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "조회 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseListBrandDetailResponseDto" } } } }, "404": { "description": "존재하지 않는 브랜드", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponse" } } } } } }, "delete": { "tags": [ "Brand" ], "summary": "브랜드 삭제 by 이예림", "description": "브랜드 ID로 브랜드를 삭제합니다. (소프트 삭제)", "operationId": "deleteBrand", "parameters": [ { "name": "brandId", "in": "path", "description": "삭제할 브랜드의 ID", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "204": { "description": "삭제 성공" }, "404": { "description": "존재하지 않는 브랜드", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponse" } } } } } }, "patch": { "tags": [ "Brand" ], "summary": "브랜드 정보 수정 by 이예림", "description": "특정 브랜드의 정보를 수정합니다.", "operationId": "updateBrand", "parameters": [ { "name": "brandId", "in": "path", "description": "수정할 브랜드의 ID", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "requestBody": { "description": "수정할 브랜드 정보", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BrandUpdateRequestDto" } } }, "required": true }, "responses": { "204": { "description": "수정 성공" }, "404": { "description": "존재하지 않는 브랜드", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponse" } } } } } } }, "/api/v1/users/me": { "get": { "tags": [ "user" ], "summary": "마이페이지 메인 조회 API By 고경수", "description": "로그인한 사용자의 마이페이지 정보를 조회합니다.", "operationId": "getMyPage", "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMyPageResponseDto" } } } } } } }, "/api/v1/users/me/social-login": { "get": { "tags": [ "user" ], "summary": "소셜 로그인 연동 정보 조회 API By 고경수", "description": "현재 사용자의 소셜 로그인 연동 상태를 조회합니다. 카카오, 네이버, 구글 계정의 연동 여부를 확인할 수 있습니다.", "operationId": "getSocialLoginInfo", "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMyLoginResponseDto" } } } } } } }, "/api/v1/users/me/scrap": { "get": { "tags": [ "user" ], "summary": "내 찜 목록 조회 API By 고경수", "description": "찜한 브랜드 또는 캠페인 목록을 조회합니다. GUEST 권한이거나 매칭 테스트 기록이 없으면 접근할 수 없습니다. (하드코딩)", "operationId": "getMyScrap", "parameters": [ { "name": "type", "in": "query", "description": "찜 타입 (brand 또는 campaign)", "required": true, "schema": { "type": "string" }, "example": "brand" }, { "name": "sort", "in": "query", "description": "정렬 기준", "required": false, "schema": { "type": "string", "default": "matchingRate" }, "example": "matchingRate" } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMyScrapResponseDto" } } } } } } }, "/api/v1/users/me/profile-card": { "get": { "tags": [ "user" ], "summary": "마이페이지 프로필 카드 조회 API By 고경수", "description": "로그인한 사용자의 마이페이지 프로필 카드 정보를 조회합니다. (하드코딩 - 프로필 카드 데이터 삽입 안했습니다!!)", "operationId": "getMyProfileCard", "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMyProfileCardResponseDto" } } } } } } }, "/api/v1/tags/{tagType}": { "get": { "tags": [ "Tag" ], "summary": "태그 타입별 조회 by 정윤철", "description": "지정된 태그 타입의 목록을 카테고리별로 조회합니다.", "operationId": "getTagsByType", "parameters": [ { "name": "tagType", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseTagResponse" } } } } } } }, "/api/v1/tags/fashion": { "get": { "tags": [ "Tag" ], "summary": "패션 태그 조회 by 정윤철", "description": "패션 태그 목록을 카테고리별로 조회합니다.", "operationId": "getFashionTags", "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseTagResponse" } } } } } } }, "/api/v1/tags/content": { "get": { "tags": [ "Tag" ], "summary": "컨텐츠 태그 조회 by 정윤철", "description": "컨텐츠 태그 목록을 조회합니다.", "operationId": "getContentTags", "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseContentTagResponse" } } } } } } }, "/api/v1/tags/beauty": { "get": { "tags": [ "Tag" ], "summary": "뷰티 태그 조회 by 정윤철", "description": "뷰티 태그 목록을 카테고리별로 조회합니다.", "operationId": "getBeautyTags", "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseTagResponse" } } } } } } }, "/api/v1/matches/campaigns": { "get": { "tags": [ "Match" ], "summary": "매칭 캠페인 목록 조회 및 검색 by 정윤철", "description": "JWT 토큰의 사용자 ID를 기반으로 매칭 캠페인 목록을 검색하거나 매칭 캠페인 목록을 조회합니다.\n\n검색: keyword를 입력하면 캠페인명(title)만 검색합니다. (브랜드명, 설명 등은 검색 대상 제외)\n\n정렬 옵션:\n- MATCH_SCORE: 매칭률 순 (동점 시 인기순 우선)\n- POPULARITY: 인기 순 (좋아요 수)\n- REWARD_AMOUNT: 금액 순 (원고료 높은 순)\n- D_DAY: 마감 순 (마감 임박순)\n\n카테고리 필터: ALL(전체), FASHION(패션), BEAUTY(뷰티)\n\n페이지네이션: page(0부터 시작), size(기본 20)\n", "operationId": "getMatchingCampaigns", "parameters": [ { "name": "keyword", "in": "query", "description": "캠페인명 검색어 (캠페인 title만 검색)", "required": false, "schema": { "type": "string" } }, { "name": "sortBy", "in": "query", "description": "정렬 기준 (MATCH_SCORE, POPULARITY, REWARD_AMOUNT, D_DAY)", "required": false, "schema": { "type": "string", "default": "MATCH_SCORE", "enum": [ "MATCH_SCORE", "POPULARITY", "REWARD_AMOUNT", "D_DAY" ] } }, { "name": "category", "in": "query", "description": "카테고리 필터 (ALL, FASHION, BEAUTY)", "required": false, "schema": { "type": "string", "default": "ALL", "enum": [ "ALL", "FASHION", "BEAUTY" ] } }, { "name": "tags", "in": "query", "description": "태그 필터 (예: 스킨케어, 미니멀)", "required": false, "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "page", "in": "query", "description": "페이지 번호 (0부터 시작)", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "description": "페이지 크기 (기본 20, 최대 50)", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "캠페인 목록 조회 및 검색 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMatchCampaignResponseDto" } } } } } } }, "/api/v1/matches/brands": { "get": { "tags": [ "Match" ], "summary": "매칭 브랜드 목록 조회 by 정윤철", "description": "JWT 토큰의 사용자 ID를 기반으로 매칭률이 높은 브랜드 목록을 조회합니다.\n정렬 옵션: MATCH_SCORE(매칭률 순), POPULARITY(인기순), NEWEST(신규순)\n카테고리 필터: ALL(전체), FASHION(패션), BEAUTY(뷰티)\n태그 필터: 뷰티/패션 관련 태그로 필터링\n", "operationId": "getMatchingBrands", "parameters": [ { "name": "sortBy", "in": "query", "description": "정렬 기준 (MATCH_SCORE, POPULARITY, NEWEST)", "required": false, "schema": { "type": "string", "default": "MATCH_SCORE", "enum": [ "MATCH_SCORE", "POPULARITY", "NEWEST" ] } }, { "name": "category", "in": "query", "description": "카테고리 필터 (ALL, FASHION, BEAUTY)", "required": false, "schema": { "type": "string", "default": "ALL", "enum": [ "ALL", "FASHION", "BEAUTY" ] } }, { "name": "tags", "in": "query", "description": "태그 필터 (예: 스킨케어, 미니멀)", "required": false, "schema": { "type": "array", "items": { "type": "string" } } } ], "responses": { "200": { "description": "브랜드 목록 조회 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMatchBrandResponseDto" } } } } } } }, "/api/v1/chat/rooms/{roomId}": { "get": { "tags": [ "Chat" ], "summary": "채팅방 헤더 조회 API By 여채현", "description": "채팅방 헤더에 필요한 상대 정보와 상태 값을 반환합니다.\n협업중 여부, 협업 요약 바 등 UI 구성에 필요한 필드를 포함합니다.\n", "operationId": "getChatRoomDetailWithOpponent", "parameters": [ { "name": "roomId", "in": "path", "description": "채팅방 ID", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "채팅방 헤더 조회 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomDetailResponse" } } } }, "COMMON401_1": { "description": "인증이 필요합니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomDetailResponse" } } } }, "CHAT404_1": { "description": "채팅방을 찾을 수 없습니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomDetailResponse" } } } }, "CHAT403_2": { "description": "채팅방 멤버가 아닙니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomDetailResponse" } } } }, "CHAT403_3": { "description": "이미 나간 채팅방입니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatRoomDetailResponse" } } } } } } }, "/api/v1/chat/rooms/{roomId}/messages": { "get": { "tags": [ "Chat" ], "summary": "채팅 메시지 조회 API By 여채현", "description": "messageId desc 기준으로 메시지를 조회합니다.\ncursor는 해당 id보다 작은 메시지를 조회하는 기준입니다.\n렌더링 기준은 messageType이며, 타입별 필드는 배타적으로 사용됩니다.\n", "operationId": "getMessages", "parameters": [ { "name": "roomId", "in": "path", "description": "채팅방 ID", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "cursor", "in": "query", "description": "페이지네이션 커서 (messageId 형식)", "required": false, "schema": { "type": "string" } }, { "name": "size", "in": "query", "description": "페이지 크기 (기본값: 20)", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } } ], "responses": { "200": { "description": "채팅 메시지 조회 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatMessageListResponse" } } } }, "COMMON401_1": { "description": "인증이 필요합니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatMessageListResponse" } } } }, "CHAT404_1": { "description": "채팅방을 찾을 수 없습니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatMessageListResponse" } } } }, "CHAT403_2": { "description": "채팅방 멤버가 아닙니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatMessageListResponse" } } } }, "CHAT403_3": { "description": "이미 나간 채팅방입니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseChatMessageListResponse" } } } } } } }, "/api/v1/campaigns/{campaignId}": { "get": { "tags": [ "Campaign" ], "summary": "캠페인 상세 정보 조회 API by 박지영", "description": "캠페인 상세 정보를 조회합니다.\n\nformats : 형식,\ncategories : 종류,\ntones : 톤,\ninvolvements : 관여도,\nusageRanges : 활용 범위 ,\n", "operationId": "getCampaignDetail", "parameters": [ { "name": "campaignId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseCampaignDetailResponse" } } } } } } }, "/api/v1/campaigns/{campaignId}/apply/me": { "get": { "tags": [ "Business" ], "summary": "내가 지원한 캠페인 상세 조회 API by 박지영", "description": "내가 지원한 캠페인의 상세 조회입니다.\ncampaign_ID를 보내주세요.\n\nREVIEWING : 검토중\nMATCHED : 수락\nREJECTED : 거절\n", "operationId": "getMyApplyCampaignDetails", "parameters": [ { "name": "campaignId", "in": "path", "description": "캠페인 ID", "required": true, "schema": { "type": "integer", "format": "int64" }, "example": 1 } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CampaignApplyDetailResponse" } } } } } } }, "/api/v1/campaigns/proposal/{campaignProposalId}": { "get": { "tags": [ "Business" ], "summary": "캠페인 제안 상세 조회 API by 박지영", "description": "한 건의 캠페인 제안 상세 정보를 조회합니다.\n\ncampaignProposalId는 /api/v1/campaigns/collaborations/me에서 확인해주세요.\n(masterJWT로 조회 불가능 API, 크리에이터/브랜드 계정으로 로그인 필요)\n\n\u003C태그\u003E\nformats : 형식\ncategories : 종류\ntones : 톤\ninvolvements : 관여도\nusageRanges : 활용 범위\n", "operationId": "getProposalDetail", "parameters": [ { "name": "campaignProposalId", "in": "path", "description": "캠페인 Proposal ID", "required": true, "schema": { "type": "integer", "format": "int64" }, "example": 1 } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseCampaignProposalDetailResponse" } } } } } } }, "/api/v1/campaigns/collaborations/me": { "get": { "tags": [ "Business" ], "summary": "나의 캠페인 조회 API by 박지영", "description": "내가 지원, 제안 보냄, 제안 받음을 한 모든 캠페인 내역을 조회합니다.\n사용자와 연관된 캠페인을 조회할 때는 해당 api를 사용해주세요. (부족한 정보가 있다면 말해주세요. 응답에 추가하겠습니다.\n쿼리 스트링으로 아래의 옵션들을 선택할 수 있습니다.\n\n1) 참여 타입\n- APPLIED : 지원\n- SENT : 제안 보냄\n- RECEIVED : 제안 받음\n\n* 지원은 proposalId가 null입니다.\n* 신규 캠페인에 제안하거나/받은 경우 campaignId가 null이고, 기존 캠페인에 제안하거나/받은 경우 campaignId가 존재합니다.\n\n2) 상태\nREVIEWING : 검토중\nMATCHED : 매칭됨\nREJECTED : 거절\n\n3) 날짜\nstartDate : 제작 시작 날짜\nendDate : 제작 마감 날짜\n", "operationId": "getMyCollaborations", "parameters": [ { "name": "type", "in": "query", "description": "참여 타입 (APPLIED, SENT, RECEIVED)", "required": false, "schema": { "type": "string", "enum": [ "APPLIED", "SENT", "RECEIVED" ] } }, { "name": "status", "in": "query", "description": "상태 (REVIEWING, MATCHED, REJECTED)", "required": false, "schema": { "type": "string", "enum": [ "NONE", "REVIEWING", "MATCHED", "REJECTED" ] } }, { "name": "startDate", "in": "query", "description": "제작 시작 날짜", "required": false, "schema": { "type": "string", "format": "date" } }, { "name": "endDate", "in": "query", "description": "제작 마감 날짜", "required": false, "schema": { "type": "string", "format": "date" } } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseListCollaborationResponse" } } } } } } }, "/api/v1/brands/{brandId}/sponsor-products": { "get": { "tags": [ "Brand" ], "summary": "브랜드 협찬 가능 제품 리스트 조회 by 이예림", "description": "특정 브랜드의 협찬 가능 제품 목록을 조회합니다.", "operationId": "getSponsorProducts", "parameters": [ { "name": "brandId", "in": "path", "description": "브랜드 ID", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseListSponsorProductListResponseDto" } } } } } } }, "/api/v1/brands/{brandId}/sponsor-products/{productId}": { "get": { "tags": [ "Brand" ], "summary": "협찬 가능 제품 상세 조회 by 이예림", "description": "브랜드의 특정 협찬 가능 제품 상세 정보를 조회합니다.", "operationId": "getSponsorProductDetail", "parameters": [ { "name": "brandId", "in": "path", "description": "브랜드 ID", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "productId", "in": "path", "description": "제품 ID", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "조회 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseSponsorProductDetailResponseDto" } } } }, "400": { "description": "잘못된 요청", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponse" } } } }, "404": { "description": "리소스를 찾을 수 없음", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponse" } } } } } } }, "/api/v1/brands/{brandId}/existing-campaigns": { "get": { "tags": [ "Brand-Campain" ], "summary": "브랜드의 기존 캠페인 제안 목록 조회 API by 박지영", "description": "브랜드의 기존 캠페인 목록을 조회합니다.\n\n캠페인 제안(기존 캠페인 선택) 시 사용되는 API입니다.\n", "operationId": "getExistingCampaigns", "parameters": [ { "name": "brandId", "in": "path", "description": "브랜드 ID", "required": true, "schema": { "type": "integer", "format": "int64" }, "example": 1 } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseBrandExistingCampaignResponse" } } } } } } }, "/api/v1/brands/{brandId}/campaigns": { "get": { "tags": [ "Brand-Campain" ], "summary": "브랜드의 캠페인 내역 조회 API by 박지영", "description": "브랜드의 캠페인을 조회합니다.\n\n마지막으로 조회된 캠페인의 id를 cursor로 사용하는 페이징 방식입니다.\n- 최초 조회 시 cursor 없이 요청합니다.\n- 이후 조회 시 응답으로 받은 nextCursor 값을 cursor로 전달합니다.\n- 정렬 조건 : UPCOMING /RECRUITING → 모집 시작 날짜 기준, CLOSED → 모집 끝나는 날짜 기준\n\n캠페인 모집 상태는 다음 중 하나로 응답됩니다.\n- UPCOMING : 모집 예정\n- CLOSED : 완료\n❗️ (수정사항 260201 : 진행중은 따로 조회한다고 PM 님께 답변 받아서, 진행 중 상태를 제외했습니다. ❗️\n", "operationId": "getBrandCampaigns", "parameters": [ { "name": "brandId", "in": "path", "description": "브랜드 ID", "required": true, "schema": { "type": "integer", "format": "int64" }, "example": 1 }, { "name": "cursor", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64" } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 5 } } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseBrandCampaignSliceResponse" } } } } } } }, "/api/v1/brands/{brandId}/campaigns/recruiting": { "get": { "tags": [ "Brand-Campain" ], "summary": "브랜드의 진행 중인 캠페인 조회 API by 박지영", "description": "해당 브랜드의 현재 모집 중인 캠페인 목록을 조회합니다. (Day 남은 일수 포함)\n\n- 모집 상태가 RECRUITING 인 캠페인만 조회됩니다.\n- 브랜드 홈 상단 '진행 중인 캠페인' 영역에 사용됩니다.\n", "operationId": "getRecruitingCampaigns", "parameters": [ { "name": "brandId", "in": "path", "description": "브랜드 ID", "required": true, "schema": { "type": "integer", "format": "int64" }, "example": 1 } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseBrandRecruitingCampaignResponse" } } } } } } }, "/api/v1/brands/user/{userId}": { "get": { "tags": [ "Brand" ], "summary": "유저 ID로 브랜드 ID 조회 by 이예림", "description": "유저 ID에 해당하는 브랜드 ID를 조회합니다.", "operationId": "getBrandIdByUserId", "parameters": [ { "name": "userId", "in": "path", "description": "조회할 유저의 ID", "required": true, "schema": { "type": "integer", "format": "int64" } } ], "responses": { "200": { "description": "조회 성공", "content": { "/": { "schema": { "type": "integer", "format": "int64" } } } }, "404": { "description": "존재하지 않는 유저 또는 브랜드", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponse" } } } } } } }, "/api/v1/brands/filters": { "get": { "tags": [ "Brand" ], "summary": "브랜드 필터 옵션 조회 by 이예림", "description": "브랜드 필터링에 사용될 옵션들을 조회합니다.", "operationId": "getBrandFilters", "responses": { "200": { "description": "조회 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseListBrandFilterResponseDto" } } } } } } }, "/api/test": { "get": { "tags": [ "test" ], "summary": "api 테스트 확인", "description": "테스트용 api입니다.\n만약 이 api가 통과하지 않는다면, SecurityConfig에 url을 추가해야합니다.\n\n인증이 필요없다면, PERMIT_ALL_URL_ARRAY에 추가하고,\n인증이 필요하다면, REQUEST_AUTHENTICATED_ARRAY에 추가해주세요.\n", "operationId": "test", "responses": { "200": { "description": "테스트 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseString" } } } } } } }, "/api/test-auth": { "get": { "tags": [ "test" ], "summary": "api 권한 테스트 확인", "description": "테스트용 api입니다.\nSwagger에서 Authorize에 토큰을 입력한 후 사용해야 정상 작동합니다.\n", "operationId": "testAuth", "responses": { "200": { "description": "테스트 성공", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseString" } } } }, "COMMON401_1": { "description": "인증이 필요합니다.", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseString" } } } } } } }, "/api/login/success": { "get": { "tags": [ "test" ], "operationId": "loginSuccess", "parameters": [ { "name": "accessToken", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "refreshToken", "in": "query", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "$ref": "#/components/schemas/CustomResponseMapStringString" } } } } } } }, "/api/api/user/info": { "get": { "tags": [ "test" ], "summary": "마스터 jwt 인증 확인", "description": "마스터 jwt 테스트용 api입니다.\nSwagger에서 Authorize에 마스터 Jwt를 입력한 후 사용해야 정상 작동합니다.\n", "operationId": "getUserInfo", "responses": { "200": { "description": "OK", "content": { "/": { "schema": { "type": "object" } } } } } } } }, "components": { "schemas": { "MyEditInfoRequestDto": { "type": "object", "properties": { "nickname": { "type": "string", "minLength": 1 }, "address": { "type": "string", "minLength": 1 }, "detailAddress": { "type": "string", "minLength": 1 } }, "required": [ "address", "detailAddress", "nickname" ] }, "CustomResponseVoid": { "type": "object", "properties": { "isSuccess": { "type": "boolean" }, "code": { "type": "string" }, "message": { "type": "string" }, "result": {
}
}
},
"AverageAudienceDto": {
"type": "object",
"properties": {
"videoLengthTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"videoViewsTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"BeautyDto": {
"type": "object",
"properties": {
"interestStyleTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"prefferedFunctionTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"skinTypeTags": {
"type": "integer",
"format": "int32"
},
"skinToneTags": {
"type": "integer",
"format": "int32"
},
"makeupStyleTags": {
"type": "integer",
"format": "int32"
}
}
},
"ContentDto": {
"type": "object",
"properties": {
"sns": {
"$ref": "#/components/schemas/SnsDto"
},
"typeTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"toneTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"prefferedInvolvementTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"prefferedCoverageTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"FashionDto": {
"type": "object",
"properties": {
"interestStyleTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"preferredItemTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"preferredBrandTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"heightTag": {
"type": "integer",
"format": "int32"
},
"weightTypeTag": {
"type": "integer",
"format": "int32"
},
"topSizeTag": {
"type": "integer",
"format": "int32"
},
"bottomSizeTag": {
"type": "integer",
"format": "int32"
}
}
},
"MainAudienceDto": {
"type": "object",
"properties": {
"genderTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
},
"ageTags": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
"MatchRequestDto": {
"type": "object",
"properties": {
"beauty": {
"$ref": "#/components/schemas/BeautyDto"
},
"fashion": {
"$ref": "#/components/schemas/FashionDto"
},
"content": {
"$ref": "#/components/schemas/ContentDto"
}
}
},
"SnsDto": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"mainAudience": {
"$ref": "#/components/schemas/MainAudienceDto"
},
"averageAudience": {
"$ref": "#/components/schemas/AverageAudienceDto"
}
}
},
"BrandDto": {
"type": "object",
"properties": {
"brandId": {
"type": "integer",
"format": "int64"
},
"brandName": {
"type": "string"
},
"logoUrl": {
"type": "string"
},
"matchingRatio": {
"type": "integer",
"format": "int32"
}
}
},
"CustomResponseMatchResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/MatchResponseDto"
}
}
},
"HighMatchingBrandListDto": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"format": "int32"
},
"brands": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrandDto"
}
}
}
},
"MatchResponseDto": {
"type": "object",
"properties": {
"username": {
"type": "string"
},
"userType": {
"type": "string"
},
"userTypeImage": {
"type": "string"
},
"typeTag": {
"type": "array",
"items": {
"type": "string"
}
},
"highMatchingBrandList": {
"$ref": "#/components/schemas/HighMatchingBrandListDto"
}
}
},
"ChatRoomCreateRequest": {
"type": "object",
"properties": {
"brandId": {
"type": "integer",
"format": "int64"
},
"creatorId": {
"type": "integer",
"format": "int64"
}
},
"required": [
"brandId",
"creatorId"
]
},
"ChatRoomCreateResponse": {
"type": "object",
"properties": {
"roomId": {
"type": "integer",
"format": "int64"
},
"roomKey": {
"type": "string"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"CustomResponseChatRoomCreateResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/ChatRoomCreateResponse"
}
}
},
"CampaignApplyRequest": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"maxLength": 1000,
"minLength": 0
}
},
"required": [
"reason"
]
},
"CustomResponseString": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"type": "string"
}
}
},
"CampaignContentTagRequest": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"customValue": {
"type": "string"
}
},
"required": [
"id"
]
},
"CampaignProposalRequestDto": {
"type": "object",
"properties": {
"brandId": {
"type": "integer",
"format": "int64"
},
"creatorId": {
"type": "integer",
"format": "int64"
},
"campaignId": {
"type": "integer",
"format": "int64"
},
"campaignName": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string",
"minLength": 1
},
"formats": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignContentTagRequest"
},
"minItems": 1
},
"categories": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignContentTagRequest"
},
"minItems": 1
},
"tones": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignContentTagRequest"
},
"minItems": 1
},
"involvements": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignContentTagRequest"
},
"minItems": 1
},
"usageRanges": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignContentTagRequest"
},
"minItems": 1
},
"rewardAmount": {
"type": "integer",
"format": "int32"
},
"productId": {
"type": "integer",
"format": "int64"
},
"startDate": {
"type": "string",
"format": "date"
},
"endDate": {
"type": "string",
"format": "date"
}
},
"required": [
"brandId",
"campaignName",
"categories",
"creatorId",
"description",
"endDate",
"formats",
"involvements",
"productId",
"rewardAmount",
"startDate",
"tones",
"usageRanges"
]
},
"BrandClothingTagDto": {
"type": "object",
"properties": {
"brandType": {
"type": "array",
"items": {
"type": "string"
}
},
"brandStyle": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"BrandCreateRequestDto": {
"type": "object",
"properties": {
"brandName": {
"type": "string"
},
"industryType": {
"type": "string",
"enum": [
"BEAUTY",
"FASHION"
]
},
"logoUrl": {
"type": "string"
},
"simpleIntro": {
"type": "string"
},
"detailIntro": {
"type": "string"
},
"homepageUrl": {
"type": "string"
},
"brandCategory": {
"type": "array",
"items": {
"type": "string"
}
},
"brandSkinCareTag": {
"$ref": "#/components/schemas/BrandSkinCareTagDto"
},
"brandMakeUpTag": {
"$ref": "#/components/schemas/BrandMakeUpTagDto"
},
"brandClothingTag": {
"$ref": "#/components/schemas/BrandClothingTagDto"
}
}
},
"BrandMakeUpTagDto": {
"type": "object",
"properties": {
"skinType": {
"type": "array",
"items": {
"type": "string"
}
},
"brandMakeUpStyle": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"BrandSkinCareTagDto": {
"type": "object",
"properties": {
"skinType": {
"type": "array",
"items": {
"type": "string"
}
},
"mainFunction": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"CustomResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
}
}
},
"BrandCreateResponseDto": {
"type": "object",
"properties": {
"brandId": {
"type": "integer",
"format": "int64"
}
}
},
"CustomResponseBrandCreateResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/BrandCreateResponseDto"
}
}
},
"BrandLikeResponseDto": {
"type": "object",
"properties": {
"brandIsLiked": {
"type": "boolean"
}
}
},
"CustomResponseListBrandLikeResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrandLikeResponseDto"
}
}
}
},
"SignupCompleteRequest": {
"type": "object",
"properties": {
"nickname": {
"type": "string",
"description": "닉네임",
"example": "홍길동"
},
"birth": {
"type": "string",
"format": "date",
"description": "생년월일",
"example": "1995-05-20"
},
"gender": {
"type": "string",
"description": "성별",
"enum": [
"MALE",
"FEMALE",
"NONE"
],
"example": "MALE"
},
"role": {
"type": "string",
"description": "회원 역할",
"enum": [
"ADMIN",
"GUEST",
"BRAND",
"CREATOR"
],
"example": "CREATOR"
},
"terms": {
"type": "array",
"example": [
{
"type": "AGE",
"agreed": true
},
{
"type": "SERVICE_TERMS",
"agreed": true
},
{
"type": "PRIVACY_COLLECTION",
"agreed": true
},
{
"type": "PRIVACY_THIRD_PARTY",
"agreed": true
}
],
"items": {
"$ref": "#/components/schemas/TermAgreementDto",
"description": "약관 동의 상세"
}
},
"signupPurposeIds": {
"type": "array",
"description": "가입 목적 ID 리스트",
"example": [1, 2, 3, 6],
"items": {
"type": "integer",
"format": "int64"
}
},
"contentCategoryIds": {
"type": "array",
"description": "관심 콘텐츠 카테고리 ID 리스트",
"example": [1, 2],
"items": {
"type": "integer",
"format": "int64"
}
}
}
},
"TermAgreementDto": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "약관 이름",
"enum": [
"AGE",
"SERVICE_TERMS",
"PRIVACY_COLLECTION",
"PRIVACY_THIRD_PARTY",
"MARKETING_PRIVACY_COLLECTION",
"MARKETING_NOTIFICATION"
],
"example": "AGE"
},
"agreed": {
"type": "boolean",
"description": "동의 여부",
"example": true
}
}
},
"CustomResponseOAuthTokenResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/OAuthTokenResponse"
}
}
},
"OAuthTokenResponse": {
"type": "object",
"properties": {
"accessToken": {
"type": "string"
},
"refreshToken": {
"type": "string"
}
}
},
"AttachmentUploadResponse": {
"type": "object",
"properties": {
"attachmentId": {
"type": "integer",
"format": "int64"
},
"attachmentType": {
"type": "string",
"enum": [
"IMAGE",
"FILE"
]
},
"contentType": {
"type": "string"
},
"originalName": {
"type": "string"
},
"fileSize": {
"type": "integer",
"format": "int64"
},
"accessUrl": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"UPLOADED",
"READY",
"FAILED",
"DELETE_PENDING"
]
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"CustomResponseAttachmentUploadResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/AttachmentUploadResponse"
}
}
},
"BeautyTypeUpdate": {
"type": "object",
"properties": {
"skinType": {
"type": "array",
"items": {
"type": "string"
}
},
"skinBrightness": {
"type": "array",
"items": {
"type": "string"
}
},
"makeupStyle": {
"type": "array",
"items": {
"type": "string"
}
},
"interestCategories": {
"type": "array",
"items": {
"type": "string"
}
},
"interestFunctions": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"ContentsTypeUpdate": {
"type": "object",
"properties": {
"snsUrl": {
"type": "string"
},
"viewerGender": {
"type": "array",
"items": {
"type": "string"
}
},
"viewerAge": {
"type": "array",
"items": {
"type": "string"
}
},
"avgVideoLength": {
"type": "string"
},
"avgViews": {
"type": "string"
},
"contentFormats": {
"type": "array",
"items": {
"type": "string"
}
},
"contentTones": {
"type": "array",
"items": {
"type": "string"
}
},
"desiredInvolvement": {
"type": "array",
"items": {
"type": "string"
}
},
"desiredUsageScope": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"FashionTypeUpdate": {
"type": "object",
"properties": {
"height": {
"type": "string"
},
"bodyShape": {
"type": "string"
},
"topSize": {
"type": "string"
},
"bottomSize": {
"type": "string"
},
"interestFields": {
"type": "array",
"items": {
"type": "string"
}
},
"interestStyles": {
"type": "array",
"items": {
"type": "string"
}
},
"interestBrands": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"MyFeatureUpdateRequestDto": {
"type": "object",
"properties": {
"beautyType": {
"$ref": "#/components/schemas/BeautyTypeUpdate"
},
"fashionType": {
"$ref": "#/components/schemas/FashionTypeUpdate"
},
"contentsType": {
"$ref": "#/components/schemas/ContentsTypeUpdate"
}
}
},
"BrandUpdateRequestDto": {
"type": "object",
"properties": {
"brandName": {
"type": "string"
},
"logoUrl": {
"type": "string"
},
"simpleIntro": {
"type": "string"
},
"detailIntro": {
"type": "string"
},
"homepageUrl": {
"type": "string"
},
"brandCategory": {
"type": "array",
"items": {
"type": "string"
}
},
"brandSkinCareTag": {
"$ref": "#/components/schemas/BrandSkinCareTagDto"
},
"brandMakeUpTag": {
"$ref": "#/components/schemas/BrandMakeUpTagDto"
},
"brandClothingTag": {
"$ref": "#/components/schemas/BrandClothingTagDto"
}
}
},
"CustomResponseMyPageResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/MyPageResponseDto"
}
}
},
"MyPageResponseDto": {
"type": "object",
"properties": {
"nickname": {
"type": "string"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"profileImageUrl": {
"type": "string"
},
"hasMatchingTest": {
"type": "boolean"
}
}
},
"CustomResponseMyLoginResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/MyLoginResponseDto"
}
}
},
"MyLoginResponseDto": {
"type": "object",
"properties": {
"result": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SocialLoginInfo"
}
}
}
},
"SocialLoginInfo": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"KAKAO",
"NAVER",
"GOOGLE"
]
},
"isLinked": {
"type": "boolean"
}
}
},
"BrandScrap": {
"type": "object",
"properties": {
"brandId": {
"type": "integer",
"format": "int64"
},
"brandName": {
"type": "string"
},
"brandLogo": {
"type": "string"
},
"matchingRate": {
"type": "integer",
"format": "int32"
},
"hashtags": {
"type": "array",
"items": {
"type": "string"
}
},
"isScraped": {
"type": "boolean"
}
}
},
"CampaignScrap": {
"type": "object",
"properties": {
"campaignId": {
"type": "integer",
"format": "int64"
},
"brandName": {
"type": "string"
},
"campaignTitle": {
"type": "string"
},
"brandLogo": {
"type": "string"
},
"matchingRate": {
"type": "integer",
"format": "int32"
},
"reward": {
"type": "integer",
"format": "int32"
},
"dDay": {
"type": "integer",
"format": "int32"
},
"currentApplicants": {
"type": "integer",
"format": "int32"
},
"totalRecruits": {
"type": "integer",
"format": "int32"
},
"isScraped": {
"type": "boolean"
}
}
},
"CustomResponseMyScrapResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/MyScrapResponseDto"
}
}
},
"MyScrapResponseDto": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"totalCount": {
"type": "integer",
"format": "int32"
},
"brandList": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrandScrap"
}
},
"campaignList": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignScrap"
}
}
}
},
"BeautyType": {
"type": "object",
"properties": {
"skinType": {
"type": "array",
"items": {
"type": "string"
}
},
"skinBrightness": {
"type": "string"
},
"makeupStyle": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"ContentsType": {
"type": "object",
"properties": {
"gender": {
"type": "string"
},
"age": {
"type": "string"
},
"averageLength": {
"type": "string"
},
"averageView": {
"type": "string"
}
}
},
"CustomResponseMyProfileCardResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/MyProfileCardResponseDto"
}
}
},
"FashionType": {
"type": "object",
"properties": {
"height": {
"type": "integer",
"format": "int32"
},
"bodyType": {
"type": "string"
},
"upperSize": {
"type": "string"
},
"bottomSize": {
"type": "integer",
"format": "int32"
}
}
},
"MatchingResult": {
"type": "object",
"properties": {
"creatorType": {
"type": "string"
},
"fitBrand": {
"type": "string"
}
}
},
"MyProfileCardResponseDto": {
"type": "object",
"properties": {
"nickname": {
"type": "string"
},
"gender": {
"type": "string"
},
"age": {
"type": "integer",
"format": "int32"
},
"interests": {
"type": "array",
"items": {
"type": "string"
}
},
"snsAccount": {
"type": "string"
},
"matchingResult": {
"$ref": "#/components/schemas/MatchingResult"
},
"myType": {
"$ref": "#/components/schemas/MyType"
}
}
},
"MyType": {
"type": "object",
"properties": {
"beautyType": {
"$ref": "#/components/schemas/BeautyType"
},
"fashionType": {
"$ref": "#/components/schemas/FashionType"
},
"contentsType": {
"$ref": "#/components/schemas/ContentsType"
}
}
},
"CustomResponseMyFeatureResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/MyFeatureResponseDto"
}
}
},
"MyFeatureResponseDto": {
"type": "object",
"properties": {
"creatorType": {
"type": "string"
},
"beautyType": {
"$ref": "#/components/schemas/BeautyType"
},
"fashionType": {
"$ref": "#/components/schemas/FashionType"
},
"contentsType": {
"$ref": "#/components/schemas/ContentsType"
}
}
},
"CustomResponseMyEditInfoResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/MyEditInfoResponseDto"
}
}
},
"MyEditInfoResponseDto": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"nickname": {
"type": "string"
},
"address": {
"type": "string"
},
"detailAddress": {
"type": "string"
},
"socialType": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"CustomResponseTagResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/TagResponse"
}
}
},
"TagItem": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
}
}
},
"TagResponse": {
"type": "object",
"properties": {
"tagType": {
"type": "string"
},
"categories": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItem"
}
}
}
}
},
"ContentTagResponse": {
"type": "object",
"properties": {
"viewerGenders": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"viewerAges": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"avgVideoLengths": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"avgVideoViews": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"formats": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"categories": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"tones": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"involvements": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"usageRanges": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
}
}
},
"CustomResponseContentTagResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/ContentTagResponse"
}
}
},
"TagItemResponse": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
}
}
},
"CampaignDto": {
"type": "object",
"properties": {
"brandId": {
"type": "integer",
"format": "int64"
},
"brandName": {
"type": "string"
},
"brandLogoUrl": {
"type": "string"
},
"brandMatchingRatio": {
"type": "integer",
"format": "int32"
},
"brandIsLiked": {
"type": "boolean"
},
"brandIsRecruiting": {
"type": "boolean"
},
"campaignManuscriptFee": {
"type": "integer",
"format": "int32"
},
"campaignName": {
"type": "string"
},
"campaignDDay": {
"type": "integer",
"format": "int32"
},
"campaignTotalRecruit": {
"type": "integer",
"format": "int32"
},
"campaignTotalCurrentRecruit": {
"type": "integer",
"format": "int32"
}
}
},
"CustomResponseMatchCampaignResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/MatchCampaignResponseDto"
}
}
},
"MatchCampaignResponseDto": {
"type": "object",
"properties": {
"brands": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignDto"
}
},
"count": {
"type": "integer",
"format": "int32"
}
}
},
"CustomResponseMatchBrandResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/MatchBrandResponseDto"
}
}
},
"MatchBrandResponseDto": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"format": "int32"
},
"brands": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrandDto"
}
}
}
},
"ChatRoomCardResponse": {
"type": "object",
"properties": {
"roomId": {
"type": "integer",
"format": "int64"
},
"opponentUserId": {
"type": "integer",
"format": "int64"
},
"opponentName": {
"type": "string"
},
"opponentProfileImageUrl": {
"type": "string"
},
"isCollaborating": {
"type": "boolean"
},
"lastMessagePreview": {
"type": "string"
},
"lastMessageType": {
"type": "string",
"enum": [
"TEXT",
"IMAGE",
"FILE",
"SYSTEM"
]
},
"lastMessageAt": {
"type": "string",
"format": "date-time"
},
"unreadCount": {
"type": "integer",
"format": "int64"
}
}
},
"ChatRoomListResponse": {
"type": "object",
"properties": {
"totalUnreadCount": {
"type": "integer",
"format": "int64"
},
"rooms": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChatRoomCardResponse"
}
},
"nextCursor": {
"type": "string"
},
"hasNext": {
"type": "boolean"
}
}
},
"CustomResponseChatRoomListResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/ChatRoomListResponse"
}
}
},
"CampaignSummaryResponse": {
"type": "object",
"properties": {
"campaignId": {
"type": "integer",
"format": "int64"
},
"campaignTitle": {
"type": "string"
},
"sponsorProducts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignSummarySponsorProductResponse"
}
}
}
},
"CampaignSummarySponsorProductResponse": {
"type": "object",
"properties": {
"productId": {
"type": "integer",
"format": "int64"
},
"productName": {
"type": "string"
},
"thumbnailImageUrl": {
"type": "string"
}
}
},
"ChatRoomDetailResponse": {
"type": "object",
"properties": {
"roomId": {
"type": "integer",
"format": "int64"
},
"opponentUserId": {
"type": "integer",
"format": "int64"
},
"opponentName": {
"type": "string"
},
"opponentProfileImageUrl": {
"type": "string"
},
"isCollaborating": {
"type": "boolean"
},
"campaignSummary": {
"$ref": "#/components/schemas/CampaignSummaryResponse"
}
}
},
"CustomResponseChatRoomDetailResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/ChatRoomDetailResponse"
}
}
},
"AttachmentInfoResponse": {
"type": "object",
"properties": {
"attachmentId": {
"type": "integer",
"format": "int64"
},
"attachmentType": {
"type": "string",
"enum": [
"IMAGE",
"FILE"
]
},
"contentType": {
"type": "string"
},
"originalName": {
"type": "string"
},
"fileSize": {
"type": "integer",
"format": "int64"
},
"accessUrl": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"UPLOADED",
"READY",
"FAILED",
"DELETE_PENDING"
]
}
}
},
"ChatMessageListResponse": {
"type": "object",
"properties": {
"messages": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChatMessageResponse"
}
},
"nextCursor": {
"type": "string"
},
"hasNext": {
"type": "boolean"
}
}
},
"ChatMessageResponse": {
"type": "object",
"properties": {
"messageId": {
"type": "integer",
"format": "int64"
},
"roomId": {
"type": "integer",
"format": "int64"
},
"senderId": {
"type": "integer",
"format": "int64"
},
"senderType": {
"type": "string",
"enum": [
"USER",
"SYSTEM"
]
},
"messageType": {
"type": "string",
"enum": [
"TEXT",
"IMAGE",
"FILE",
"SYSTEM"
]
},
"content": {
"type": "string"
},
"attachment": {
"$ref": "#/components/schemas/AttachmentInfoResponse"
},
"systemMessage": {
"$ref": "#/components/schemas/ChatSystemMessageResponse"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"clientMessageId": {
"type": "string"
}
}
},
"ChatSystemMessagePayload": {
},
"ChatSystemMessageResponse": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "integer",
"format": "int32"
},
"kind": {
"type": "string",
"enum": [
"PROPOSAL_CARD",
"PROPOSAL_STATUS_NOTICE",
"MATCHED_CAMPAIGN_CARD"
]
},
"payload": {
"$ref": "#/components/schemas/ChatSystemMessagePayload"
}
}
},
"CustomResponseChatMessageListResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/ChatMessageListResponse"
}
}
},
"CampaignDetailResponse": {
"type": "object",
"properties": {
"campaignId": {
"type": "integer",
"format": "int64"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"preferredSkills": {
"type": "string"
},
"schedule": {
"type": "string"
},
"videoSpec": {
"type": "string"
},
"product": {
"type": "string"
},
"rewardAmount": {
"type": "integer",
"format": "int64"
},
"startDate": {
"type": "string",
"format": "date"
},
"endDate": {
"type": "string",
"format": "date"
},
"recruitStartDate": {
"type": "string",
"format": "date-time"
},
"recruitEndDate": {
"type": "string",
"format": "date-time"
},
"quota": {
"type": "integer",
"format": "int32"
},
"contentTags": {
"$ref": "#/components/schemas/ContentTagResponse"
}
}
},
"CustomResponseCampaignDetailResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/CampaignDetailResponse"
}
}
},
"CampaignApplyDetailResponse": {
"type": "object",
"properties": {
"campaignId": {
"type": "integer",
"format": "int64"
},
"campaignTitle": {
"type": "string"
},
"campaignReason": {
"type": "string"
},
"proposalStatus": {
"type": "string",
"enum": [
"NONE",
"REVIEWING",
"MATCHED",
"REJECTED"
]
}
}
},
"CampaignContentTagResponse": {
"type": "object",
"properties": {
"formats": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"categories": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"tones": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"involvements": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
},
"usageRanges": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TagItemResponse"
}
}
}
},
"CampaignProposalDetailResponse": {
"type": "object",
"properties": {
"proposalId": {
"type": "integer",
"format": "int64"
},
"brandId": {
"type": "integer",
"format": "int64"
},
"creatorId": {
"type": "integer",
"format": "int64"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"rewardAmount": {
"type": "integer",
"format": "int64"
},
"productId": {
"type": "integer",
"format": "int64"
},
"startDate": {
"type": "string",
"format": "date"
},
"endDate": {
"type": "string",
"format": "date"
},
"status": {
"type": "string"
},
"refusalReason": {
"type": "string"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"contentTags": {
"$ref": "#/components/schemas/CampaignContentTagResponse"
}
}
},
"CustomResponseCampaignProposalDetailResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/CampaignProposalDetailResponse"
}
}
},
"CollaborationResponse": {
"type": "object",
"properties": {
"campaignId": {
"type": "integer",
"format": "int64"
},
"proposalId": {
"type": "integer",
"format": "int64"
},
"brandName": {
"type": "string"
},
"thumbnailUrl": {
"type": "string"
},
"title": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"NONE",
"REVIEWING",
"MATCHED",
"REJECTED"
]
},
"startDate": {
"type": "string",
"format": "date"
},
"endDate": {
"type": "string",
"format": "date"
},
"type": {
"type": "string",
"enum": [
"APPLIED",
"SENT",
"RECEIVED"
]
}
}
},
"CustomResponseListCollaborationResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CollaborationResponse"
}
}
}
},
"BrandListResponseDto": {
"type": "object",
"properties": {
"brandId": {
"type": "integer",
"format": "int64"
},
"brandName": {
"type": "string"
},
"logoUrl": {
"type": "string"
},
"industryType": {
"type": "string"
}
}
},
"CustomResponsePageBrandListResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/PageBrandListResponseDto"
}
}
},
"PageBrandListResponseDto": {
"type": "object",
"properties": {
"totalPages": {
"type": "integer",
"format": "int32"
},
"totalElements": {
"type": "integer",
"format": "int64"
},
"pageable": {
"$ref": "#/components/schemas/PageableObject"
},
"numberOfElements": {
"type": "integer",
"format": "int32"
},
"size": {
"type": "integer",
"format": "int32"
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrandListResponseDto"
}
},
"number": {
"type": "integer",
"format": "int32"
},
"sort": {
"$ref": "#/components/schemas/SortObject"
},
"first": {
"type": "boolean"
},
"last": {
"type": "boolean"
},
"empty": {
"type": "boolean"
}
}
},
"PageableObject": {
"type": "object",
"properties": {
"pageSize": {
"type": "integer",
"format": "int32"
},
"paged": {
"type": "boolean"
},
"unpaged": {
"type": "boolean"
},
"pageNumber": {
"type": "integer",
"format": "int32"
},
"offset": {
"type": "integer",
"format": "int64"
},
"sort": {
"$ref": "#/components/schemas/SortObject"
}
}
},
"SortObject": {
"type": "object",
"properties": {
"unsorted": {
"type": "boolean"
},
"sorted": {
"type": "boolean"
},
"empty": {
"type": "boolean"
}
}
},
"BrandDetailResponseDto": {
"type": "object",
"properties": {
"userId": {
"type": "integer",
"format": "int64"
},
"brandName": {
"type": "string"
},
"brandTag": {
"type": "array",
"items": {
"type": "string"
}
},
"brandDescription": {
"type": "string"
},
"brandMatchingRatio": {
"type": "integer",
"format": "int32"
},
"brandIsLiked": {
"type": "boolean"
},
"brandCategory": {
"type": "array",
"items": {
"type": "string"
}
},
"brandSkinCareTag": {
"$ref": "#/components/schemas/BrandSkinCareTagDto"
},
"brandMakeUpTag": {
"$ref": "#/components/schemas/BrandMakeUpTagDto"
}
}
},
"CustomResponseListBrandDetailResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrandDetailResponseDto"
}
}
}
},
"CustomResponseListSponsorProductListResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SponsorProductListResponseDto"
}
}
}
},
"SponsorProductListResponseDto": {
"type": "object",
"description": "협찬 가능 제품 리스트 응답 DTO",
"properties": {
"id": {
"type": "integer",
"format": "int64",
"description": "협찬 제품 ID"
},
"name": {
"type": "string",
"description": "제품명"
},
"thumbnailImageUrl": {
"type": "string",
"description": "제품 대표 이미지 URL"
},
"totalCount": {
"type": "integer",
"format": "int32",
"description": "총 모집 인원 (또는 제공 가능 수량)"
},
"currentCount": {
"type": "integer",
"format": "int32",
"description": "현재 신청 인원 (또는 소진 수량)"
}
}
},
"ActionDto": {
"type": "object",
"properties": {
"canProposeCampaign": {
"type": "boolean"
},
"proposeCampaignCtaText": {
"type": "string"
}
}
},
"CustomResponseSponsorProductDetailResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/SponsorProductDetailResponseDto"
}
}
},
"SponsorInfoDto": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SponsorItemDto"
}
},
"shippingType": {
"type": "string"
}
}
},
"SponsorItemDto": {
"type": "object",
"properties": {
"itemId": {
"type": "integer",
"format": "int64"
},
"availableType": {
"type": "string"
},
"availableQuantity": {
"type": "integer",
"format": "int32"
},
"availableSize": {
"type": "integer",
"format": "int32"
},
"sizeUnit": {
"type": "string"
}
}
},
"SponsorProductDetailResponseDto": {
"type": "object",
"properties": {
"brandId": {
"type": "integer",
"format": "int64"
},
"brandName": {
"type": "string"
},
"productId": {
"type": "integer",
"format": "int64"
},
"productName": {
"type": "string"
},
"productDescription": {
"type": "string"
},
"productImageUrls": {
"type": "array",
"items": {
"type": "string"
}
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"sponsorInfo": {
"$ref": "#/components/schemas/SponsorInfoDto"
},
"action": {
"$ref": "#/components/schemas/ActionDto"
}
}
},
"BrandExistingCampaignResponse": {
"type": "object",
"properties": {
"campaigns": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignItem"
}
}
}
},
"CampaignItem": {
"type": "object",
"properties": {
"campaignId": {
"type": "integer",
"format": "int64"
},
"title": {
"type": "string"
}
}
},
"CustomResponseBrandExistingCampaignResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/BrandExistingCampaignResponse"
}
}
},
"BrandCampaignResponseDto": {
"type": "object",
"properties": {
"campaignId": {
"type": "integer",
"format": "int64"
},
"title": {
"type": "string"
},
"recruitStartDate": {
"type": "string",
"format": "date"
},
"recruitEndDate": {
"type": "string",
"format": "date"
},
"status": {
"type": "string",
"enum": [
"UPCOMING",
"RECRUITING",
"CLOSED"
]
}
}
},
"BrandCampaignSliceResponse": {
"type": "object",
"properties": {
"campaigns": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrandCampaignResponseDto"
}
},
"hasNext": {
"type": "boolean"
}
}
},
"CustomResponseBrandCampaignSliceResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/BrandCampaignSliceResponse"
}
}
},
"BrandRecruitingCampaignResponse": {
"type": "object",
"properties": {
"campaigns": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CampaignCard"
}
}
}
},
"CampaignCard": {
"type": "object",
"properties": {
"campaignId": {
"type": "integer",
"format": "int64"
},
"brandName": {
"type": "string"
},
"title": {
"type": "string"
},
"recruitQuota": {
"type": "integer",
"format": "int32"
},
"rewardAmount": {
"type": "integer",
"format": "int64"
},
"imageUrl": {
"type": "string"
},
"dday": {
"type": "integer",
"format": "int32"
}
}
},
"CustomResponseBrandRecruitingCampaignResponse": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"$ref": "#/components/schemas/BrandRecruitingCampaignResponse"
}
}
},
"BeautyFilterDto": {
"type": "object",
"properties": {
"category": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CategoryDto"
}
},
"function": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FunctionDto"
}
},
"skinType": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SkinTypeDto"
}
},
"makeUpStyle": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MakeUpStyleDto"
}
}
}
},
"BrandFilterResponseDto": {
"type": "object",
"properties": {
"beautyFilter": {
"$ref": "#/components/schemas/BeautyFilterDto"
}
}
},
"CategoryDto": {
"type": "object",
"properties": {
"categoryId": {
"type": "integer",
"format": "int32"
},
"categoryName": {
"type": "string"
}
}
},
"CustomResponseListBrandFilterResponseDto": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BrandFilterResponseDto"
}
}
}
},
"FunctionDto": {
"type": "object",
"properties": {
"functionId": {
"type": "integer",
"format": "int32"
},
"functionName": {
"type": "string"
}
}
},
"MakeUpStyleDto": {
"type": "object",
"properties": {
"makeUpId": {
"type": "integer",
"format": "int32"
},
"makeUpName": {
"type": "string"
}
}
},
"SkinTypeDto": {
"type": "object",
"properties": {
"skinId": {
"type": "integer",
"format": "int32"
},
"skinName": {
"type": "string"
}
}
},
"CustomResponseMapStringString": {
"type": "object",
"properties": {
"isSuccess": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"result": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
},
"securitySchemes": {
"JWT Authentication": {
"type": "http",
"name": "Authorization",
"scheme": "bearer",
"bearerFormat": "JWT"
}
}
} }