1. Auction Service

1.1. Auction Bid

1.1.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/auctions/10/bid' -i -X POST \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -H 'Authorization: Bearer token' \
    -d '{
  "biddingPrice" : 120000
}'
POST /api/v1/auctions/10/bid HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer token
Content-Length: 29
Host: localhost:8080

{
  "biddingPrice" : 120000
}

1.1.2. 요청 헤더

Name Description

Authorization

JWT 액세스 토큰 (Bearer {token})

1.1.3. 요청 파라미터

경로 파라미터
Path Parameter Description

auctionId

입찰할 경매 ID

1.1.4. 요청 본문

필드 설명
Path Type Description

biddingPrice

Number

사용자가 제시하는 입찰 금액

예시
{
  "biddingPrice" : 120000
}

1.1.5. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data

Null

응답 데이터 (없음)

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : null
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 86

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : null
}

1.2. Category Get All

1.2.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/categories' -i -X GET \
    -H 'Accept: application/json'
GET /api/v1/categories HTTP/1.1
Accept: application/json
Host: localhost:8080

1.2.2. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data

Array

전체 카테고리 목록

Required

data[].categoryId

Number

카테고리 ID

Required

data[].bigCategory

String

대분류 카테고리 명

Required

data[].smallCategory

String

소분류 카테고리 명

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : [ {
    "categoryId" : 1,
    "bigCategory" : "전자제품",
    "smallCategory" : "노트북"
  }, {
    "categoryId" : 2,
    "bigCategory" : "전자제품",
    "smallCategory" : "태블릿"
  }, {
    "categoryId" : 3,
    "bigCategory" : "패션",
    "smallCategory" : "여성 의류"
  }, {
    "categoryId" : 4,
    "bigCategory" : "패션",
    "smallCategory" : "남성 의류"
  } ]
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 476

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : [ {
    "categoryId" : 1,
    "bigCategory" : "전자제품",
    "smallCategory" : "노트북"
  }, {
    "categoryId" : 2,
    "bigCategory" : "전자제품",
    "smallCategory" : "태블릿"
  }, {
    "categoryId" : 3,
    "bigCategory" : "패션",
    "smallCategory" : "여성 의류"
  }, {
    "categoryId" : 4,
    "bigCategory" : "패션",
    "smallCategory" : "남성 의류"
  } ]
}

1.3. Product Get Bidding Products

1.3.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/products/bidding/me' -i -X GET \
    -H 'Authorization: Bearer token' \
    -H 'Accept: application/json'
GET /api/v1/products/bidding/me HTTP/1.1
Authorization: Bearer token
Accept: application/json
Host: localhost:8080

1.3.2. 요청 헤더

Name Description

Authorization

JWT 액세스 토큰 (Bearer {token})

1.3.3. 응답

필드 설명
Path Type Description Notes

page

Number

현재 페이지 번호

Required

size

Number

페이지 크기

Required

totalPages

Number

총 페이지 수

Required

totalElements

Number

총 요소 수

Required

contents[]

Array

상품 목록

Required

contents[].id

Number

상품 ID

Required

contents[].name

String

상품 이름

Required

contents[].image

String

상품 이미지 URL

Required

contents[].endAt

String

마감 일시 (ISO-8601)

Required

contents[].currentBid

Number

현재 입찰가

Required

contents[].bidPrice

Number

입찰 가격

Required

본문 예시
{
  "page" : 0,
  "size" : 10,
  "totalPages" : 1,
  "totalElements" : 2,
  "contents" : [ {
    "id" : 1,
    "name" : "상품1",
    "image" : "image1.jpg",
    "endAt" : "2025-12-16T02:09:07.903173129",
    "currentBid" : 1000,
    "bidPrice" : 1100
  }, {
    "id" : 2,
    "name" : "상품2",
    "image" : "image2.jpg",
    "endAt" : "2025-12-17T02:09:07.903229302",
    "currentBid" : 2000,
    "bidPrice" : 2100
  } ]
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 427

{
  "page" : 0,
  "size" : 10,
  "totalPages" : 1,
  "totalElements" : 2,
  "contents" : [ {
    "id" : 1,
    "name" : "상품1",
    "image" : "image1.jpg",
    "endAt" : "2025-12-16T02:09:07.903173129",
    "currentBid" : 1000,
    "bidPrice" : 1100
  }, {
    "id" : 2,
    "name" : "상품2",
    "image" : "image2.jpg",
    "endAt" : "2025-12-17T02:09:07.903229302",
    "currentBid" : 2000,
    "bidPrice" : 2100
  } ]
}

1.4. Product Get Product Info

1.4.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/products/1' -i -X GET \
    -H 'Authorization: Bearer token' \
    -H 'Accept: application/json'
GET /api/v1/products/1 HTTP/1.1
Authorization: Bearer token
Accept: application/json
Host: localhost:8080

1.4.2. 요청 헤더

Name Description

Authorization

JWT 액세스 토큰 (Bearer {token})

1.4.3. 요청 파라미터

경로 파라미터
Path Parameter Description

productId

상품 ID

1.4.4. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data.id

Number

상품 ID

Required

data.name

String

상품 이름

Required

data.description

String

상품 설명

Required

data.viewCount

Number

조회수

Required

data.registeredAt

String

등록 일시 (ISO-8601)

Required

data.image

String

상품 이미지 URL

Required

data.categoryName

String

카테고리 이름

Required

data.minPrice

Number

최소 가격

Required

data.currentBid

Number

현재 입찰가

Optional

data.endAt

String

마감 일시 (ISO-8601)

Required

data.sellerName

String

판매자 이름

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "id" : 1,
    "name" : "테스트 상품",
    "description" : "상품 설명",
    "viewCount" : 10,
    "registeredAt" : "2025-12-15T02:09:07.645261159",
    "image" : "image.jpg",
    "categoryName" : "전자제품",
    "minPrice" : 1000,
    "currentBid" : 1500,
    "endAt" : "2025-12-22T02:09:07.645362268",
    "sellerName" : "sellerName"
  }
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 438

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "id" : 1,
    "name" : "테스트 상품",
    "description" : "상품 설명",
    "viewCount" : 10,
    "registeredAt" : "2025-12-15T02:09:07.645261159",
    "image" : "image.jpg",
    "categoryName" : "전자제품",
    "minPrice" : 1000,
    "currentBid" : 1500,
    "endAt" : "2025-12-22T02:09:07.645362268",
    "sellerName" : "sellerName"
  }
}

1.5. Product Get Product Simple Info

1.5.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/products/1/simple-info' -i -X GET \
    -H 'Accept: application/json'
GET /api/v1/products/1/simple-info HTTP/1.1
Accept: application/json
Host: localhost:8080

1.5.2. 요청 파라미터

경로 파라미터
Path Parameter Description

productId

상품 ID

1.5.3. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data.name

String

상품 이름

Required

data.image

String

상품 이미지 URL

Required

data.minBidPrice

Number

최소 입찰가

Required

data.currentBidPrice

Number

현재 입찰가

Optional

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "name" : "테스트 상품",
    "image" : "image.jpg",
    "minBidPrice" : 1000,
    "currentBidPrice" : 1500
  }
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 202

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "name" : "테스트 상품",
    "image" : "image.jpg",
    "minBidPrice" : 1000,
    "currentBidPrice" : 1500
  }
}

1.6. Product Get Purchased Products

1.6.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/products/purchased/me' -i -X GET \
    -H 'Authorization: Bearer token' \
    -H 'Accept: application/json'
GET /api/v1/products/purchased/me HTTP/1.1
Authorization: Bearer token
Accept: application/json
Host: localhost:8080

1.6.2. 요청 헤더

Name Description

Authorization

JWT 액세스 토큰 (Bearer {token})

1.6.3. 응답

필드 설명
Path Type Description Notes

page

Number

현재 페이지 번호

Required

size

Number

페이지 크기

Required

totalPages

Number

총 페이지 수

Required

totalElements

Number

총 요소 수

Required

contents[]

Array

구매 완료 상품 목록

Required

contents[].id

Number

상품 ID

Required

contents[].name

String

상품 이름

Required

contents[].image

String

상품 이미지 URL

Required

contents[].finalPrice

Number

최종 구매 가격

Required

contents[].buyAt

String

구매 일시 (ISO-8601)

Required

본문 예시
{
  "page" : 0,
  "size" : 20,
  "totalPages" : 1,
  "totalElements" : 2,
  "contents" : [ {
    "id" : 1,
    "name" : "상품1",
    "image" : "image1.jpg",
    "finalPrice" : 10000,
    "buyAt" : "2025-12-15T02:09:07.538434483"
  }, {
    "id" : 2,
    "name" : "상품2",
    "image" : "image2.jpg",
    "finalPrice" : 15000,
    "buyAt" : "2025-12-15T02:09:07.538484327"
  } ]
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 383

{
  "page" : 0,
  "size" : 20,
  "totalPages" : 1,
  "totalElements" : 2,
  "contents" : [ {
    "id" : 1,
    "name" : "상품1",
    "image" : "image1.jpg",
    "finalPrice" : 10000,
    "buyAt" : "2025-12-15T02:09:07.538434483"
  }, {
    "id" : 2,
    "name" : "상품2",
    "image" : "image2.jpg",
    "finalPrice" : 15000,
    "buyAt" : "2025-12-15T02:09:07.538484327"
  } ]
}

1.7. Product Get Selling Products

1.7.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/products/selling/me' -i -X GET \
    -H 'Authorization: Bearer token' \
    -H 'Accept: application/json'
GET /api/v1/products/selling/me HTTP/1.1
Authorization: Bearer token
Accept: application/json
Host: localhost:8080

1.7.2. 요청 헤더

Name Description

Authorization

JWT 액세스 토큰 (Bearer {token})

1.7.3. 응답

필드 설명
Path Type Description Notes

page

Number

현재 페이지 번호

Required

size

Number

페이지 크기

Required

totalPages

Number

총 페이지 수

Required

totalElements

Number

총 요소 수

Required

contents[]

Array

상품 목록

Required

contents[].id

Number

상품 ID

Required

contents[].name

String

상품 이름

Required

contents[].image

String

상품 이미지 URL

Required

contents[].endAt

String

마감 일시 (ISO-8601)

Required

contents[].currentBid

Number

현재 입찰가

Required

contents[].auctionId

Number

경매 ID

Required

본문 예시
{
  "page" : 0,
  "size" : 10,
  "totalPages" : 1,
  "totalElements" : 2,
  "contents" : [ {
    "id" : 1,
    "name" : "상품1",
    "image" : "image1.jpg",
    "endAt" : "2025-12-16T02:09:07.104222782",
    "currentBid" : 1000,
    "auctionId" : 1
  }, {
    "id" : 1,
    "name" : "상품2",
    "image" : "image2.jpg",
    "endAt" : "2025-12-17T02:09:07.104277608",
    "currentBid" : 2000,
    "auctionId" : 2
  } ]
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 423

{
  "page" : 0,
  "size" : 10,
  "totalPages" : 1,
  "totalElements" : 2,
  "contents" : [ {
    "id" : 1,
    "name" : "상품1",
    "image" : "image1.jpg",
    "endAt" : "2025-12-16T02:09:07.104222782",
    "currentBid" : 1000,
    "auctionId" : 1
  }, {
    "id" : 1,
    "name" : "상품2",
    "image" : "image2.jpg",
    "endAt" : "2025-12-17T02:09:07.104277608",
    "currentBid" : 2000,
    "auctionId" : 2
  } ]
}

1.8. Product Get Sold Products

1.8.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/products/sold/me' -i -X GET \
    -H 'Authorization: Bearer token' \
    -H 'Accept: application/json'
GET /api/v1/products/sold/me HTTP/1.1
Authorization: Bearer token
Accept: application/json
Host: localhost:8080

1.8.2. 요청 헤더

Name Description

Authorization

JWT 액세스 토큰 (Bearer {token})

1.8.3. 응답

필드 설명
Path Type Description Notes

page

Number

현재 페이지 번호

Required

size

Number

페이지 크기

Required

totalPages

Number

총 페이지 수

Required

totalElements

Number

총 요소 수

Required

contents[]

Array

판매 완료 상품 목록

Required

contents[].id

Number

상품 ID

Required

contents[].name

String

상품 이름

Required

contents[].description

String

상품 설명

Required

contents[].image

String

상품 이미지 URL

Required

contents[].finalPrice

Number

최종 낙찰가 가격

Required

contents[].soldAt

String

구매 일시 (ISO-8601)

Required

본문 예시
{
  "page" : 0,
  "size" : 20,
  "totalPages" : 1,
  "totalElements" : 2,
  "contents" : [ {
    "id" : 1,
    "name" : "상품1",
    "description" : "상품 설명1",
    "image" : "image1.jpg",
    "finalPrice" : 30000,
    "soldAt" : "2025-12-15T02:09:07.75970221"
  }, {
    "id" : 2,
    "name" : "상품2",
    "description" : "상품 설명2",
    "image" : "image2.jpg",
    "finalPrice" : 45000,
    "soldAt" : "2025-12-15T02:09:07.759741459"
  } ]
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 460

{
  "page" : 0,
  "size" : 20,
  "totalPages" : 1,
  "totalElements" : 2,
  "contents" : [ {
    "id" : 1,
    "name" : "상품1",
    "description" : "상품 설명1",
    "image" : "image1.jpg",
    "finalPrice" : 30000,
    "soldAt" : "2025-12-15T02:09:07.75970221"
  }, {
    "id" : 2,
    "name" : "상품2",
    "description" : "상품 설명2",
    "image" : "image2.jpg",
    "finalPrice" : 45000,
    "soldAt" : "2025-12-15T02:09:07.759741459"
  } ]
}

1.9. Product Register Product

1.9.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/products' -i -X POST \
    -H 'Content-Type: multipart/form-data;charset=UTF-8' \
    -H 'Authorization: Bearer token' \
    -H 'Accept: application/json' \
    -F 'product=@product;type=application/json' \
    -F 'image=@image.jpg;type=image/jpeg'
POST /api/v1/products HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer token
Accept: application/json
Host: localhost:8080

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=product; filename=product
Content-Type: application/json

{"name":"테스트 상품","description":"상품 설명","categoryId":1,"startBid":1000,"endAt":"2025-12-22T02:09:05.181038321"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=image; filename=image.jpg
Content-Type: image/jpeg

dummy-image-content
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

1.9.2. 요청 헤더

Name Description

Authorization

JWT 액세스 토큰 (Bearer {token})

1.9.3. 요청 파트

Part Description

product

상품 등록 요청 JSON

image

상품 대표 이미지 파일

PRODUCT 파트
필드 설명
Path Type Description

name

String

상품 이름

description

String

상품 설명

categoryId

Number

카테고리 ID

startBid

Number

시작 입찰가

endAt

String

마감 일시 (ISO-8601)

1.9.4. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data

Null

응답 데이터 (여기서는 null)

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : null
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 86

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : null
}

1.10.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/products/search' -i -X POST \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "keyword" : "phone",
  "categoryId" : 2,
  "onlyNotSold" : true,
  "page" : 0,
  "size" : 10,
  "sortBy" : "REGISTERED_AT_DESC",
  "endAtFrom" : "2025-12-31"
}'
POST /api/v1/products/search HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 163
Host: localhost:8080

{
  "keyword" : "phone",
  "categoryId" : 2,
  "onlyNotSold" : true,
  "page" : 0,
  "size" : 10,
  "sortBy" : "REGISTERED_AT_DESC",
  "endAtFrom" : "2025-12-31"
}

1.10.2. 요청 본문

필드 설명
Path Type Description

keyword

String

검색 키워드 (공백으로 구분된 다중 키워드 가능)

categoryId

Number

카테고리 ID

onlyNotSold

Boolean

판매중인 상품만 조회할지 여부

sortBy

String

정렬 기준 (예: endAt, registeredAt)

page

Number

페이지 번호 (0부터)

size

Number

페이지 사이즈

endAtFrom

String

마감일 필터 (yyyy-MM-dd 형식)

예시
{
  "keyword" : "phone",
  "categoryId" : 2,
  "onlyNotSold" : true,
  "page" : 0,
  "size" : 10,
  "sortBy" : "REGISTERED_AT_DESC",
  "endAtFrom" : "2025-12-31"
}

1.10.3. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data.page

Number

응답 페이지 번호

Required

data.size

Number

응답 페이지 사이즈

Required

data.totalPages

Number

총 페이지 수

Required

data.totalElements

Number

총 요소 수

Required

data.contents[].id

Number

상품 ID

Required

data.contents[].image

String

상품 이미지 경로

Required

data.contents[].name

String

상품명

Required

data.contents[].registeredAt

String

등록일시

Required

data.contents[].endAt

String

종료일시

Required

data.contents[].currentBidPrice

Number

현재 입찰가 (없으면 null)

Required

data.contents[].minBidPrice

Number

최소 입찰가

Required

data.contents[].sold

Boolean

판매 여부

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "page" : 0,
    "size" : 10,
    "totalPages" : 1,
    "totalElements" : 1,
    "contents" : [ {
      "id" : 1,
      "image" : "/images/phone.jpg",
      "name" : "Smart Phone",
      "registeredAt" : "2025-01-01T10:00:00",
      "endAt" : "2025-12-31T23:59:59",
      "currentBidPrice" : 50000,
      "minBidPrice" : 10000,
      "sold" : false
    } ]
  }
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 447

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "page" : 0,
    "size" : 10,
    "totalPages" : 1,
    "totalElements" : 1,
    "contents" : [ {
      "id" : 1,
      "image" : "/images/phone.jpg",
      "name" : "Smart Phone",
      "registeredAt" : "2025-01-01T10:00:00",
      "endAt" : "2025-12-31T23:59:59",
      "currentBidPrice" : 50000,
      "minBidPrice" : 10000,
      "sold" : false
    } ]
  }
}

2. Main Service

2.1. Auth Login

2.1.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/members/login' -i -X POST \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "email" : "test@email.com",
  "password" : "Password123!"
}'
POST /api/v1/members/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 63
Host: localhost:8080

{
  "email" : "test@email.com",
  "password" : "Password123!"
}

2.1.2. 요청 본문

필드 설명
Path Type Description

email

String

로그인할 이메일

password

String

비밀번호

예시
{
  "email" : "test@email.com",
  "password" : "Password123!"
}

2.1.3. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data.accessToken

String

발급된 JWT 액세스 토큰 (Bearer 포함)

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "accessToken" : "Bearer eyJhbGciOiJIUzI1Ni..."
  }
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 138

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "accessToken" : "Bearer eyJhbGciOiJIUzI1Ni..."
  }
}

2.2. Auth Signup

2.2.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/members/signup' -i -X POST \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "email" : "newuser@email.com",
  "nickname" : "새로운유저",
  "password" : "Password123!"
}'
POST /api/v1/members/signup HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 100
Host: localhost:8080

{
  "email" : "newuser@email.com",
  "nickname" : "새로운유저",
  "password" : "Password123!"
}

2.2.2. 요청 본문

필드 설명
Path Type Description

email

String

가입할 이메일 주소

nickname

String

사용할 닉네임

password

String

사용할 비밀번호

예시
{
  "email" : "newuser@email.com",
  "nickname" : "새로운유저",
  "password" : "Password123!"
}

2.2.3. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data

Null

반환 데이터 (없음)

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : null
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 86

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : null
}

2.3. Member ChargeCredit

2.3.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/members/me/credit/charge' -i -X POST \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "amount" : 10000
}'
POST /api/v1/members/me/credit/charge HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 22
Host: localhost:8080

{
  "amount" : 10000
}

2.3.2. 요청 본문

필드 설명
Path Type Description

amount

Number

충전할 크레딧 금액

예시
{
  "amount" : 10000
}

2.3.3. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data.currentCredit

Number

충전 후 현재 보유 크레딧

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "currentCredit" : 20000
  }
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 115

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "currentCredit" : 20000
  }
}

2.4. Member GetCredit

2.4.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/members/me/credit' -i -X GET \
    -H 'Accept: application/json'
GET /api/v1/members/me/credit HTTP/1.1
Accept: application/json
Host: localhost:8080

2.4.2. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data.currentCredit

Number

현재 보유 크레딧

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "currentCredit" : 20000
  }
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 115

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "currentCredit" : 20000
  }
}

2.5. Notifications Get Unread Notifications

2.5.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/notifications/me' -i -X GET \
    -H 'Authorization: Bearer valid-token'
GET /api/v1/notifications/me HTTP/1.1
Authorization: Bearer valid-token
Host: localhost:8080

2.5.2. 요청 헤더

Name Description

Authorization

JWT 인증 토큰 (Bearer 토큰)

2.5.3. 응답

필드 설명
Path Type Description Notes

success

Boolean

API 요청 성공 여부

Required

message

String

응답 메시지

Required

data.notifications[].type

String

알림 타입 (예: BID)

Required

data.notifications[].title

String

알림 제목

Required

data.notifications[].message

String

알림 내용

Required

data.notifications[].notifiedAt

String

알림 생성 시간 (ISO 8601 형식)

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "notifications" : [ {
      "type" : "BID",
      "title" : "입찰 성공",
      "message" : "입찰에 성공했습니다.",
      "notifiedAt" : "2025-12-15T02:09:38.238457356"
    } ]
  }
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 280

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : {
    "notifications" : [ {
      "type" : "BID",
      "title" : "입찰 성공",
      "message" : "입찰에 성공했습니다.",
      "notifiedAt" : "2025-12-15T02:09:38.238457356"
    } ]
  }
}

2.6. Ranking GetHotKeywords

2.6.1. 요청 예시

$ curl 'http://localhost:8080/api/v1/rankings/search-keywords' -i -X GET \
    -H 'Accept: application/json'
GET /api/v1/rankings/search-keywords HTTP/1.1
Accept: application/json
Host: localhost:8080

2.6.2. 응답

필드 설명
Path Type Description Notes

success

Boolean

요청 성공 여부

Required

message

String

응답 메시지

Required

data[].keyword

String

검색어

Required

data[].rankNo

Number

순위

Required

본문 예시
{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : [ {
    "keyword" : "유영관",
    "rankNo" : 1
  }, {
    "keyword" : "정직한",
    "rankNo" : 2
  }, {
    "keyword" : "김석준",
    "rankNo" : 3
  }, {
    "keyword" : "백도현",
    "rankNo" : 4
  }, {
    "keyword" : "박수현",
    "rankNo" : 5
  } ]
}
HTTP 응답
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 349

{
  "success" : true,
  "message" : "요청에 성공했습니다.",
  "data" : [ {
    "keyword" : "유영관",
    "rankNo" : 1
  }, {
    "keyword" : "정직한",
    "rankNo" : 2
  }, {
    "keyword" : "김석준",
    "rankNo" : 3
  }, {
    "keyword" : "백도현",
    "rankNo" : 4
  }, {
    "keyword" : "박수현",
    "rankNo" : 5
  } ]
}