User API

인증 Header

name 설명

Authorization

API를 사용하기 위한 인증 키

회원가입

HTTP Request

POST /api/users HTTP/1.1
Content-Type: application/json
Host: localhost
Content-Length: 226

{
  "email" : "test@example.com",
  "password" : "password123!",
  "displayName" : "테스트유저",
  "city" : "서울시",
  "detailAddress" : "강남구 역삼동",
  "realName" : "홍길동",
  "phone" : "010-1234-5678"
}

Request Headers

Name Description

Content-Type

요청 컨텐츠 타입

Request Fields

Path Type Optional Description

email

String

이메일

password

String

비밀번호

displayName

String

닉네임

realName

String

실명

city

String

도시

detailAddress

String

상세주소

phone

String

전화번호

HTTP Response

HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 141

{
  "data" : {
    "userId" : 1,
    "normalCartId" : 1,
    "subscriptionCartId" : 2
  },
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}

Request Parameters

Parameter

Type

Description

Required

username

String

사용자 이름

true

password

String

비밀번호

true

email

String

이메일

true

phone

String

전화번호

false

Response Fields

Path

Type

Description

userId

String

사용자 ID

accessToken

String

접근 토큰

refreshToken

String

갱신 토큰

OAuth 추가정보 입력

HTTP Request

POST /api/users/more-info HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY3LCJpYXQiOjE3NTY3NDg2Njd9.6aOqqT9raShFsgCi4EHIzXs7oCzeAlb1iyJ_9uGt76E
Content-Type: application/json
Host: localhost
Content-Length: 160

{
  "email" : "test@test.com",
  "displayName" : "OAuth유저",
  "city" : "서울시",
  "detailAddress" : "강남구 역삼동",
  "phone" : "010-9876-5432"
}

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Content-Type

요청 컨텐츠 타입

Request Fields

Path Type Optional Description

email

String

이메일

displayName

String

닉네임

city

String

도시

detailAddress

String

상세주소

phone

String

전화번호

HTTP Response

HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY3LCJpYXQiOjE3NTY3NDg2Njd9.6aOqqT9raShFsgCi4EHIzXs7oCzeAlb1iyJ_9uGt76E
Refresh: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzczODY3LCJpYXQiOjE3NTY3NDg2Njd9.i0crrl_Wo1w4qKK03Ls40lmeb2PUXrlJk_fdI2bnUgQ
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:27 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 141

{
  "data" : {
    "userId" : 1,
    "normalCartId" : 3,
    "subscriptionCartId" : 4
  },
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}

Request Fields

Parameter

Type

Description

Required

name

String

사용자 이름

true

phone

String

전화번호

true

termsAgreed

Boolean

약관 동의 여부

true

Response Fields

Path

Type

Description

userId

String

사용자 ID

registrationStatus

String

회원가입 상태 (COMPLETED/ADDITIONAL_INFO_REQUIRED)

accessToken

String

접근 토큰 (추가정보 입력 완료 시 제공)

사용자 정보 수정

HTTP Request

PATCH /api/users/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3QyQHRlc3QuY29tIiwic3ViIjoidGVzdDJAdGVzdC5jb20iLCJleHAiOjE3NTY3NTA0NjcsImlhdCI6MTc1Njc0ODY2N30.yyNaOFfY9fD613LpNkhQsyXBF23U4LZVbG3QsVVPngM
Content-Type: application/json
Host: localhost
Content-Length: 220

{
  "email" : "test2@test.com",
  "password" : "newpassword123!",
  "displayName" : "수정된이름",
  "city" : "부산시",
  "detailAddress" : "해운대구",
  "realName" : "김철수",
  "phone" : "010-5555-5555"
}

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Content-Type

요청 컨텐츠 타입

Path Parameters

Parameter Description

userId

사용자 ID

Request Fields

Path Type Optional Description

email

String

이메일

password

String

O

비밀번호

displayName

String

닉네임

city

String

도시

detailAddress

String

상세주소

realName

String

실명

phone

String

전화번호

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:27 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 394

{
  "data" : {
    "email" : "test2@test.com",
    "displayName" : "수정된이름",
    "city" : "부산시",
    "detailAddress" : "해운대구",
    "realName" : "김철수",
    "phone" : "010-5555-5555",
    "social" : false,
    "updatedAt" : "2025-09-02T02:44:27.868299+09:00",
    "createAt" : "2025-09-02T02:44:27.782028+09:00"
  },
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}

사용자 정보 조회

HTTP Request

GET /api/users/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3QzQHRlc3QuY29tIiwic3ViIjoidGVzdDNAdGVzdC5jb20iLCJleHAiOjE3NTY3NTA0NjcsImlhdCI6MTc1Njc0ODY2N30.eROrrhmBvdNQ7CULCgS2c5_23Vd_krp1pdQK_oLpawc
Host: localhost

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Path Parameters

Parameter Description

userId

사용자 ID

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:27 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 376

{
  "data" : {
    "email" : "test3@test.com",
    "displayName" : "test3",
    "city" : "서울",
    "detailAddress" : "압구정동",
    "realName" : "name",
    "phone" : "010-2222-2222",
    "social" : false,
    "updatedAt" : "2025-09-02T02:44:27.594047+09:00",
    "createAt" : "2025-09-02T02:44:27.594046+09:00"
  },
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}

로그아웃

HTTP Request

POST /api/users/logout HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY3LCJpYXQiOjE3NTY3NDg2Njd9.6aOqqT9raShFsgCi4EHIzXs7oCzeAlb1iyJ_9uGt76E
Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1
Host: localhost

Request Headers

Name Description

Authorization

Bearer 인증 토큰

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 86

{
  "data" : "로그아웃 완료",
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}

회원탈퇴

HTTP Request

DELETE /api/users/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3Q4QHRlc3QuY29tIiwic3ViIjoidGVzdDhAdGVzdC5jb20iLCJleHAiOjE3NTY3NTA0NjcsImlhdCI6MTc1Njc0ODY2N30.F2eYscxkfdFrJqOlaZvedvh7iBqgNnj3MeZpCl9DldQ
Host: localhost

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Path Parameters

Parameter Description

userId

사용자 ID

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:27 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 82

{
  "data" : "USER_WITHDRAWAL",
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}

Cart API

Header

name 설명

Authorization

API를 사용하기 위한 인증 키

참고

id number

일반 장바구니

홀수 번호 ex) 1,3,5

구독 장바구니

짝수 번호 ex)2,4,6

HTTP Request

GET /api/carts/normal/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY1LCJpYXQiOjE3NTY3NDg2NjV9.QKL8--8vmrXc9aQNem4imjZhS-TA_oldpvkgZe5BFok
Host: localhost

Path Parameters

Parameter Description

cartId

일반 장바구니 ID

Request Headers

Name Description

Authorization

Bearer 인증 토큰

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 773

{
  "data" : {
    "cartId" : 1,
    "cartItems" : [ {
      "quantity" : 1,
      "period" : 0,
      "subscription" : false,
      "item" : {
        "itemId" : 1,
        "enterprise" : "饔៞Զ滄䝭努齌",
        "thumbnail" : "㰵绰ﺅ蚛夨ᕜ᫰玖ܻ浬寺ㄝ⍴භ⭊΅Ⴊ빅颻랤弁",
        "product" : "㐄⏚䔮땒㻩ᛞ䞝䶥触蕵좿㚍댽ꖣ↓蜓쭥ﲢ堢⒢殺ชꟷቝ辌崮蝘퟿Ꝣ䨪鉮礜",
        "originPrice" : 11000,
        "realPrice" : 0,
        "discountRate" : 10.0,
        "discountPrice" : 1000
      },
      "createdAt" : null,
      "updatedAt" : null
    } ],
    "totalItemCount" : 1,
    "totalPrice" : 10000,
    "totalDiscountPrice" : 1000,
    "expectPrice" : 9000
  },
  "createTime" : "2025‑09‑02T02:44:25+09:00"
}

Response Fields

Path Type Optional Description

data.cartId

Number

일반 장바구니 ID

data.cartItems[].quantity

Number

상품 수량

data.cartItems[].item.itemId

Number

상품 ID

data.cartItems[].item.originPrice

Number

정상 가격

data.cartItems[].item.discountPrice

Number

할인 가격

data.totalItemCount

Number

총 상품 개수

data.totalPrice

Number

총 결제 금액

data.totalDiscountPrice

Number

총 할인 금액

data.expectPrice

Number

최종 결제 금액

createTime

String

생성 시간

data.cartItems[].period

Number

주기

data.cartItems[].subscription

Boolean

구독 여부

data.cartItems[].item.enterprise

String

판매 업체

data.cartItems[].item.thumbnail

String

상품 썸네일

data.cartItems[].item.product

String

상품명

data.cartItems[].item.realPrice

Number

실제 가격

data.cartItems[].item.discountRate

Number

할인율

data.cartItems[].createdAt

Null

생성 시간

data.cartItems[].updatedAt

Null

수정 시간

일반 상품 장바구니 추가

HTTP Request

POST /api/carts/normal/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY1LCJpYXQiOjE3NTY3NDg2NjV9.QKL8--8vmrXc9aQNem4imjZhS-TA_oldpvkgZe5BFok
Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1
Host: localhost

itemId=2&quantity=1

Path Parameters

Parameter Description

cartId

일반 장바구니 ID

Name Description

Authorization

Bearer 인증 토큰

Request Parameters

Request Parameter Description

quantity

상품 수량

itemId

상품 ID

HTTP Response

HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 66

{
  "data" : 2,
  "createTime" : "2025‑09‑02T02:44:25+09:00"
}

일반 상품 장바구니 삭제

HTTP Request

DELETE /api/carts/normal/1?itemId=1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY1LCJpYXQiOjE3NTY3NDg2NjV9.QKL8--8vmrXc9aQNem4imjZhS-TA_oldpvkgZe5BFok
Host: localhost

Path Parameters

Parameter Description

cartId

일반 장바구니 ID

Request Parameters

Request Parameter Description

itemId

삭제할 상품 ID

HTTP Response

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive

일반 상품 장바구니 수정

HTTP Request

PATCH /api/carts/normal/1?itemId=1&quantity=2 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY1LCJpYXQiOjE3NTY3NDg2NjV9.QKL8--8vmrXc9aQNem4imjZhS-TA_oldpvkgZe5BFok
Host: localhost

Path Parameters

Parameter Description

cartId

일반 장바구니 ID

Request Parameters

Request Parameter Description

quantity

변경할 수량

itemId

상품 ID

HTTP Response

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive

구독 상품 장바구니 조회

HTTP Request

GET /api/carts/subscription/2 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY3LCJpYXQiOjE3NTY3NDg2Njd9.6aOqqT9raShFsgCi4EHIzXs7oCzeAlb1iyJ_9uGt76E
Host: localhost

Path Parameters

Parameter Description

cartId

구독 장바구니 ID

Request Headers

Name Description

Authorization

Bearer 인증 토큰

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 810

{
  "data" : {
    "cartId" : 2,
    "cartItems" : [ {
      "quantity" : 1,
      "period" : 30,
      "subscription" : true,
      "item" : {
        "itemId" : 1,
        "enterprise" : "㫆﯏䥅끋߆䲑쁽ཙл北9줒ṣ㝞罖蚇謓줻墾얜쎤嘯",
        "thumbnail" : "曩淲葺켛蕜⩗뉩썵猖﫮䬤땪춍鲱⚎㊲祾맋缄ꐸ墋ራ컃挌ナ핦镚",
        "product" : "뇯桤ಉ媘좍᪺㛎㾑㖶쫎뻌땮놉퇌⯬霤麱끧检玠なﻨ弡♌",
        "originPrice" : 11000,
        "realPrice" : 0,
        "discountRate" : 10.0,
        "discountPrice" : 1000
      },
      "createdAt" : null,
      "updatedAt" : null
    } ],
    "totalItemCount" : 1,
    "totalPrice" : 10000,
    "totalDiscountPrice" : 1000,
    "expectPrice" : 9000
  },
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}

Response Fields

Path Type Optional Description

data.cartId

Number

구독 장바구니 ID

data.cartItems[].quantity

Number

상품 수량

data.cartItems[].item.itemId

Number

상품 ID

data.cartItems[].item.originPrice

Number

정상 가격

data.cartItems[].item.discountPrice

Number

할인 가격

data.totalItemCount

Number

총 상품 개수

data.totalPrice

Number

총 결제 금액

data.totalDiscountPrice

Number

총 할인 금액

data.expectPrice

Number

최종 결제 금액

createTime

String

생성 시간

data.cartItems[].period

Number

구독 주기

data.cartItems[].subscription

Boolean

구독 여부

data.cartItems[].item.enterprise

String

판매 업체

data.cartItems[].item.thumbnail

String

상품 썸네일

data.cartItems[].item.product

String

상품명

data.cartItems[].item.realPrice

Number

실제 가격

data.cartItems[].item.discountRate

Number

할인율

data.cartItems[].createdAt

Null

생성 시간

data.cartItems[].updatedAt

Null

수정 시간

구독 상품 장바구니 추가

HTTP Request

POST /api/carts/subscription/2 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY3LCJpYXQiOjE3NTY3NDg2Njd9.6aOqqT9raShFsgCi4EHIzXs7oCzeAlb1iyJ_9uGt76E
Content-Type: application/json
Host: localhost
Content-Length: 78

{
  "itemId" : 2,
  "period" : 30,
  "quantity" : 1,
  "subscription" : true
}

Path Parameters

Parameter Description

cartId

구독 장바구니 ID

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Content-Type

요청 컨텐츠 타입

Request Fields

Path Type Optional Description

itemId

Number

상품 ID

period

Number

구독 주기

quantity

Number

상품 수량

subscription

Boolean

구독 여부

HTTP Response

HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 66

{
  "data" : 2,
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}

구독 상품 장바구니 삭제

HTTP Request

DELETE /api/carts/subscription/2?itemId=1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY2LCJpYXQiOjE3NTY3NDg2NjZ9.Yh7x4jcC0JN8On5W_Vre_Dsj9mXp-_xn0SZ-ykzvJkE
Host: localhost

Path Parameters

Parameter Description

cartId

구독 장바구니 ID

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Request Parameters

Request Parameter Description

itemId

삭제할 상품 ID

HTTP Response

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive

구독 상품 장바구니 수량 변경

HTTP Request

PATCH /api/carts/subscription/2/quantity?itemId=1&quantity=2 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY3LCJpYXQiOjE3NTY3NDg2Njd9.6aOqqT9raShFsgCi4EHIzXs7oCzeAlb1iyJ_9uGt76E
Host: localhost

Path Parameters

Parameter Description

cartId

구독 장바구니 ID

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Request Parameters

Request Parameter Description

quantity

변경할 수량

itemId

상품 ID

HTTP Response

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive

구독 상품 장바구니 주기 변경

HTTP Request

PATCH /api/carts/subscription/2/period?itemId=1&period=60 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY3LCJpYXQiOjE3NTY3NDg2Njd9.6aOqqT9raShFsgCi4EHIzXs7oCzeAlb1iyJ_9uGt76E
Host: localhost

Path Parameters

Parameter Description

cartId

구독 장바구니 ID

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Request Parameters

Request Parameter Description

period

변경할 구독 주기

itemId

상품 ID

HTTP Response

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive

Order API

주문 생성

HTTP Request

POST /api/orders HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY2LCJpYXQiOjE3NTY3NDg2NjZ9.Yh7x4jcC0JN8On5W_Vre_Dsj9mXp-_xn0SZ-ykzvJkE
Content-Type: application/json
Host: localhost
Content-Length: 317

{
  "userId" : 1,
  "subscription" : false,
  "orderedAtCart" : true,
  "city" : "서울시",
  "detailAddress" : "강남구 역삼동",
  "realName" : "홍길동",
  "phoneNumber" : "010-1234-5678",
  "orderPostDtoList" : [ {
    "itemId" : 1,
    "quantity" : 2,
    "period" : 0,
    "subscription" : false
  } ]
}

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Content-Type

요청 컨텐츠 타입

Request Fields

Path Type Optional Description

userId

Number

사용자 ID

subscription

Boolean

구독 여부

orderedAtCart

Boolean

장바구니에서 주문 여부

city

String

도시

detailAddress

String

상세 주소

realName

String

수령인 이름

phoneNumber

String

연락처

orderPostDtoList

Array

주문 상품 목록

orderPostDtoList[].itemId

Number

상품 ID

orderPostDtoList[].quantity

Number

수량

orderPostDtoList[].period

Number

O

구독 주기

orderPostDtoList[].subscription

Boolean

구독 여부

HTTP Response

HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1050

{
  "data" : {
    "orderId" : 3,
    "totalItems" : 1,
    "totalPrice" : 18000,
    "totalDiscountPrice" : 2000,
    "expectPrice" : 18000,
    "subscription" : false,
    "itemOrders" : [ {
      "orderItemId" : 3,
      "quantity" : 2,
      "period" : 0,
      "subscription" : false,
      "nextPaymentDay" : null,
      "item" : {
        "itemId" : 1,
        "enterprise" : "테스트 업체",
        "thumbnail" : "http://example.com/thumbnail.jpg",
        "product" : "테스트 상품",
        "originPrice" : 10000,
        "realPrice" : 0,
        "discountRate" : 0.1,
        "discountPrice" : 1000
      }
    } ],
    "orderStatus" : "REQUEST",
    "createdAt" : "2025-09-02T02:44:26.029453+09:00",
    "updatedAt" : "2025-09-02T02:44:26.029454+09:00",
    "totalQuantity" : 2,
    "receiver" : {
      "realName" : "홍길동",
      "phone" : "010-1234-5678",
      "address" : {
        "city" : "서울시",
        "detailAddress" : "강남구 역삼동"
      }
    }
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data

Object

응답 데이터

createTime

String

응답 생성 시간

구독 상품 수량 변경

HTTP Request

PATCH /api/orders/subscriptions/1?orderItemId=1&quantity=3 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY2LCJpYXQiOjE3NTY3NDg2NjZ9.Yh7x4jcC0JN8On5W_Vre_Dsj9mXp-_xn0SZ-ykzvJkE
Host: localhost

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Path Parameters

Parameter Description

orderId

주문 ID

Request Parameters

Request Parameter Description

orderItemId

주문 상품 ID

quantity

변경할 수량

HTTP Response

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive

주문 목록 조회

HTTP Request

GET /api/orders?userId=1&page=1&size=10&sort=DESC HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY2LCJpYXQiOjE3NTY3NDg2NjZ9.Yh7x4jcC0JN8On5W_Vre_Dsj9mXp-_xn0SZ-ykzvJkE
Host: localhost

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Request Parameters

Request Parameter Description

userId

사용자 ID

page

페이지 번호

size

페이지 크기

sort

정렬 방향

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 165

{
  "time" : "2025-09-02T02:44:26.225701+09:00",
  "data" : [ ],
  "pageInfo" : {
    "page" : 1,
    "size" : 0,
    "totalElements" : 0,
    "totalPages" : 1
  }
}

구독 주문 목록 조회

HTTP Request

GET /api/orders/subscriptions?userId=1&page=1&size=10&sort=DESC HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY1LCJpYXQiOjE3NTY3NDg2NjV9.QKL8--8vmrXc9aQNem4imjZhS-TA_oldpvkgZe5BFok
Host: localhost

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Request Parameters

Request Parameter Description

userId

사용자 ID

page

페이지 번호

size

페이지 크기

sort

정렬 방향

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 165

{
  "time" : "2025-09-02T02:44:25.917815+09:00",
  "data" : [ ],
  "pageInfo" : {
    "page" : 1,
    "size" : 0,
    "totalElements" : 0,
    "totalPages" : 1
  }
}

주문 상세 조회

HTTP Request

GET /api/orders/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY1LCJpYXQiOjE3NTY3NDg2NjV9.QKL8--8vmrXc9aQNem4imjZhS-TA_oldpvkgZe5BFok
Host: localhost

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Path Parameters

Parameter Description

orderId

주문 ID

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 847

{
  "data" : {
    "orderId" : 1,
    "totalItems" : 1,
    "totalPrice" : 18000,
    "totalDiscountPrice" : 2000,
    "expectPrice" : 16000,
    "orderStatus" : "REQUEST",
    "createdAt" : "2025-09-02T02:44:25.811922+09:00",
    "updatedAt" : "2025-09-02T02:44:25.811926+09:00",
    "receiver" : {
      "realName" : "홍길동",
      "phone" : "010-1234-5678",
      "address" : {
        "city" : "서울시",
        "detailAddress" : "강남구 역삼동"
      }
    },
    "totalQuantity" : 2,
    "orderItems" : [ {
      "orderItemId" : 1,
      "quantity" : 2,
      "itemId" : 1,
      "enterprise" : "테스트 업체",
      "product" : "테스트 상품",
      "originPrice" : 10000,
      "realPrice" : 9000,
      "discountRate" : 0.1,
      "discountPrice" : 1000
    } ]
  },
  "createTime" : "2025‑09‑02T02:44:25+09:00"
}

Response Fields

Path Type Optional Description

data

Object

응답 데이터

createTime

String

응답 생성 시간

Payment API

결제 요청

HTTP Request

POST /api/payments/1 HTTP/1.1
Authorization: Bearer token
Host: localhost:8080

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Path Parameters

Parameter Description

orderId

주문 ID

HTTP Response

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 192

{
  "data" : {
    "tid" : "test_tid",
    "next_redirect_pc_url" : "http://test.url",
    "createdAt" : "2025‑09‑02T02:44:26+09:00"
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data.tid

String

결제 고유 번호

data.next_redirect_pc_url

String

PC 결제 페이지 URL

data.createdAt

String

생성 시간

createTime

String

응답 생성 시간

최초 구독 결제 요청

HTTP Request

POST /api/payments/subscriptionsFirst/2 HTTP/1.1
Authorization: Bearer token
Host: localhost:8080

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Path Parameters

Parameter Description

subscriptionOrderId

구독 주문 ID

HTTP Response

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 208

{
  "data" : {
    "tid" : "subscription_tid",
    "next_redirect_pc_url" : "http://subscription.url",
    "createdAt" : "2025‑09‑02T02:44:26+09:00"
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data.tid

String

결제 고유 번호

data.next_redirect_pc_url

String

PC 결제 페이지 URL

data.createdAt

String

생성 시간

createTime

String

응답 생성 시간

결제 승인

HTTP Request

GET /api/payments/approve/1?pg_token=test_pg_token HTTP/1.1
Host: localhost:8080

Path Parameters

Parameter Description

orderId

주문 ID

Request Parameters

Request Parameter Description

pg_token

PG사 승인 토큰

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 385

{
  "data" : {
    "item_name" : "test_item_name",
    "item_code" : "test_item_code",
    "created_at" : "2021-01-01T00:00:00",
    "approved_at" : "2021-01-01T00:00:00",
    "payload" : "test_payload",
    "amount" : {
      "total" : 10000,
      "tax_free" : 0,
      "vat" : 0,
      "discount" : 0
    },
    "quantity" : 0
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data.item_name

String

O

상품명

data.item_code

String

O

상품 코드

data.created_at

String

생성 시간

data.approved_at

String

승인 시간

data.payload

Varies

O

추가 데이터

data.amount.total

Number

총 결제 금액

data.amount.tax_free

Number

비과세 금액

data.amount.vat

Number

부가세 금액

data.amount.discount

Number

할인 금액

data.quantity

Number

수량

createTime

String

응답 생성 시간

첫 구독 결제 승인

HTTP Request

GET /api/payments/approve/subscriptionsFirst/2?pg_token=subscription_token HTTP/1.1
Host: localhost:8080

Path Parameters

Parameter Description

subscriptionOrderId

주문 ID

Request Parameters

Request Parameter Description

pg_token

PG사 승인 토큰

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 385

{
  "data" : {
    "item_name" : "test_item_name",
    "item_code" : "test_item_code",
    "created_at" : "2021-01-01T00:00:00",
    "approved_at" : "2021-01-01T00:00:00",
    "payload" : "test_payload",
    "amount" : {
      "total" : 10000,
      "tax_free" : 0,
      "vat" : 0,
      "discount" : 0
    },
    "quantity" : 0
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data.item_name

String

O

상품명

data.item_code

String

O

상품 코드

data.created_at

String

생성 시간

data.approved_at

String

승인 시간

data.payload

Varies

O

추가 데이터

data.amount.total

Number

총 결제 금액

data.amount.tax_free

Number

비과세 금액

data.amount.vat

Number

부가세 금액

data.amount.discount

Number

할인 금액

data.quantity

Number

수량

createTime

String

응답 생성 시간

구독 정기 결제 승인

HTTP Request

POST /api/payments/approve/subscriptions/3 HTTP/1.1
Host: localhost:8080

Path Parameters

Parameter Description

subscriptionOrderId

주문 ID

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 385

{
  "data" : {
    "item_name" : "test_item_name",
    "item_code" : "test_item_code",
    "created_at" : "2021-01-01T00:00:00",
    "approved_at" : "2021-01-01T00:00:00",
    "payload" : "test_payload",
    "amount" : {
      "total" : 10000,
      "tax_free" : 0,
      "vat" : 0,
      "discount" : 0
    },
    "quantity" : 0
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data.item_name

String

O

상품명

data.item_code

String

O

상품 코드

data.created_at

String

생성 시간

data.approved_at

String

승인 시간

data.payload

Varies

O

추가 데이터

data.amount.total

Number

총 결제 금액

data.amount.tax_free

Number

비과세 금액

data.amount.vat

Number

부가세 금액

data.amount.discount

Number

할인 금액

data.quantity

Number

수량

createTime

String

응답 생성 시간

결제 환불

HTTP Request

POST /api/payments/refund/1 HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer token
Content-Length: 84
Host: localhost:8080

{
  "cancelAmount" : 0,
  "cancelTaxFreeAmount" : 0,
  "cancelAvailableAmount" : 0
}

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Path Parameters

Parameter Description

orderId

주문 ID

Request Fields

Path Type Optional Description

cancelAmount

Number

환불 금액

cancelTaxFreeAmount

Number

면세 값

cancelAvailableAmount

Number

환불 가능 금액

HTTP Response

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 75

{
  "data" : "complete",
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data

String

반품 요청 완료

createTime

String

응답 생성 시간

구독 취소

HTTP Request

DELETE /api/subscriptions?itemOrderId=1 HTTP/1.1
Authorization: Bearer token
Host: localhost:8080

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Request Parameters

Request Parameter Description

itemOrderId

주문 상품 ID

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 69

{
  "data" : null,
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}

Item API

Header

name 설명

Authorization

API를 사용하기 위한 인증 키

메인 페이지 상품 조회

HTTP Request

GET /api/items/main HTTP/1.1
Host: localhost

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:24 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1751

{
  "data" : {
    "discountRateItem" : [ {
      "itemId" : 1,
      "thumbnail" : "thumbnailUrl",
      "productName" : "16종혼합유산균 디에스",
      "enterprise" : "(주)씨티씨바이오",
      "mainFunction" : "[프로바이오틱스] 유산균 증식 및 유해균 억제・배변활동 원활・장 건강에 도움을 줄 수 있음",
      "baseStandard" : "1. 성상 : 고유의 향미가 있고 이미, 이취가 없는 흰노란색의 분말\n2. 프로바이오틱스 수 : 200,000,000,000(2000억) CFU/g 이상\n3. 대장균군 : 음성\n4. 납(mg/kg) : 1.0 이하\n5. 카드뮴(mg/kg) : 0.3 이하",
      "realPrice" : 9000,
      "discountRate" : 0.1,
      "discountPrice" : 1000,
      "sales" : 0,
      "starAvg" : 0.0,
      "reviewSize" : 0,
      "categories" : {
        "categoryNameSet" : [ "INTESTINE" ]
      }
    } ],
    "saleItem" : [ {
      "itemId" : 1,
      "thumbnail" : "thumbnailUrl",
      "productName" : "16종혼합유산균 디에스",
      "enterprise" : "(주)씨티씨바이오",
      "mainFunction" : "[프로바이오틱스] 유산균 증식 및 유해균 억제・배변활동 원활・장 건강에 도움을 줄 수 있음",
      "baseStandard" : "1. 성상 : 고유의 향미가 있고 이미, 이취가 없는 흰노란색의 분말\n2. 프로바이오틱스 수 : 200,000,000,000(2000억) CFU/g 이상\n3. 대장균군 : 음성\n4. 납(mg/kg) : 1.0 이하\n5. 카드뮴(mg/kg) : 0.3 이하",
      "realPrice" : 9000,
      "discountRate" : 0.1,
      "discountPrice" : 1000,
      "sales" : 0,
      "starAvg" : 0.0,
      "reviewSize" : 0,
      "categories" : {
        "categoryNameSet" : [ "INTESTINE" ]
      }
    } ]
  },
  "createTime" : "2025‑09‑02T02:44:25+09:00"
}

Response Fields

Path Type Optional Description

data.discountRateItem[].itemId

Number

상품 ID

data.discountRateItem[].thumbnail

String

상품 썸네일

data.discountRateItem[].productName

String

상품명

data.discountRateItem[].enterprise

String

제조사

data.discountRateItem[].mainFunction

String

주요기능

data.discountRateItem[].baseStandard

String

기준규격

data.discountRateItem[].realPrice

Number

실제 가격

data.discountRateItem[].discountRate

Number

할인율

data.discountRateItem[].discountPrice

Number

할인 금액

data.discountRateItem[].sales

Number

판매량

data.discountRateItem[].starAvg

Number

평균 별점

data.discountRateItem[].reviewSize

Number

리뷰 수

data.discountRateItem[].categories.categoryNameSet

Array

카테고리 목록

createTime

String

생성 시간

data.saleItem[].itemId

Number

상품 ID

data.saleItem[].thumbnail

String

상품 썸네일

data.saleItem[].productName

String

상품명

data.saleItem[].enterprise

String

제조사

data.saleItem[].mainFunction

String

주요기능

data.saleItem[].baseStandard

String

기준규격

data.saleItem[].realPrice

Number

실제 가격

data.saleItem[].discountRate

Number

할인율

data.saleItem[].discountPrice

Number

할인 금액

data.saleItem[].sales

Number

판매량

data.saleItem[].starAvg

Number

평균 별점

data.saleItem[].reviewSize

Number

리뷰 수

data.saleItem[].categories.categoryNameSet

Array

카테고리 목록

상품 상세 조회

HTTP Request

GET /api/items/1 HTTP/1.1
Host: localhost

Path Parameters

Parameter Description

itemId

상품 ID

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:24 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1714

{
  "data" : {
    "itemId" : 1,
    "thumbnail" : "thumbnailUrl",
    "descriptionImage" : "descriptionImage",
    "enterprise" : "(주)씨티씨바이오",
    "productName" : "16종혼합유산균 디에스",
    "statementNumber" : "20040017059225",
    "registeredDate" : "20220225",
    "distributionPeriod" : "제조일로부터 24개월까지",
    "sungsang" : "고유의 향미가 있고 이미, 이취가 없는 흰노란색의 분말",
    "servingUse" : "건강기능식품 원료로 사용",
    "preservePeriod" : "냉장보관(10℃이하)",
    "intake" : "- 질환이 있거나 의약품 복용 시 전문가와 상담할 것\n- 알레르기 체질 등은 개인에 따라 과민반응을 나타낼 수 있음\n- 어린이가 함부로 섭취하지 않도록 일일섭취량 방법을 지도할 것\n- 이상사례 발생 시 섭취를 중단하고 전문가와 상담할 것\n- 원료로 사용 시 개봉 후 오염 우려가 있으니 신속하게 사용하고 남은 것은 밀봉 후 냉장보관할 것",
    "mainFunction" : "[프로바이오틱스] 유산균 증식 및 유해균 억제・배변활동 원활・장 건강에 도움을 줄 수 있음",
    "baseStandard" : "1. 성상 : 고유의 향미가 있고 이미, 이취가 없는 흰노란색의 분말\n2. 프로바이오틱스 수 : 200,000,000,000(2000억) CFU/g 이상\n3. 대장균군 : 음성\n4. 납(mg/kg) : 1.0 이하\n5. 카드뮴(mg/kg) : 0.3 이하",
    "realPrice" : 9000,
    "originPrice" : 10000,
    "discountRate" : 0.1,
    "discountPrice" : 1000,
    "sales" : 0,
    "starAvg" : 0.0,
    "categories" : {
      "categoryNameSet" : [ "INTESTINE" ]
    }
  },
  "createTime" : "2025‑09‑02T02:44:25+09:00"
}

Response Fields

Path Type Optional Description

data.itemId

Number

상품 ID

data.thumbnail

String

상품 썸네일

data.descriptionImage

String

상품 상세 이미지

data.enterprise

String

제조사

data.productName

String

상품명

data.statementNumber

String

품목제조번호

data.registeredDate

String

등록일

data.distributionPeriod

String

유통기한

data.sungsang

String

성상

data.servingUse

String

용법용량

data.preservePeriod

String

보관방법

data.intake

String

섭취방법

data.mainFunction

String

주요기능

data.baseStandard

String

기준규격

data.realPrice

Number

실제 가격

data.originPrice

Number

원가

data.discountRate

Number

할인율

data.discountPrice

Number

할인 금액

data.sales

Number

판매량

data.starAvg

Number

평균 별점

data.categories.categoryNameSet

Array

카테고리 목록

createTime

String

생성 시간

할인 상품 조회

HTTP Request

GET /api/items/on-sale HTTP/1.1
Content-Type: application/json
Host: localhost
Content-Length: 81

{
  "page" : 1,
  "size" : 10,
  "sortOption" : "SALES",
  "direction" : "DESC"
}

Request Fields

Path Type Optional Description

page

Number

페이지 번호

size

Number

페이지 크기

sortOption

String

정렬 옵션 (SALES, PRICE, DISCOUNT_RATE)

direction

String

정렬 방향 (ASC, DESC)

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:24 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 948

{
  "time" : "2025-09-02T02:44:25.236899+09:00",
  "data" : [ {
    "itemId" : 1,
    "thumbnail" : "thumbnailUrl",
    "productName" : "16종혼합유산균 디에스",
    "enterprise" : "(주)씨티씨바이오",
    "mainFunction" : "[프로바이오틱스] 유산균 증식 및 유해균 억제・배변활동 원활・장 건강에 도움을 줄 수 있음",
    "baseStandard" : "1. 성상 : 고유의 향미가 있고 이미, 이취가 없는 흰노란색의 분말\n2. 프로바이오틱스 수 : 200,000,000,000(2000억) CFU/g 이상\n3. 대장균군 : 음성\n4. 납(mg/kg) : 1.0 이하\n5. 카드뮴(mg/kg) : 0.3 이하",
    "realPrice" : 9000,
    "discountRate" : 0.1,
    "discountPrice" : 1000,
    "sales" : 0,
    "starAvg" : 0.0,
    "reviewSize" : 0,
    "categories" : {
      "categoryNameSet" : [ "INTESTINE" ]
    }
  } ],
  "pageInfo" : {
    "page" : 1,
    "size" : 8,
    "totalElements" : 1,
    "totalPages" : 1
  }
}

Response Fields

Path Type Optional Description

time

String

응답 시간

data[].enterprise

String

제조사

data[].mainFunction

String

주요기능

data[].baseStandard

String

기준규격

data[].discountPrice

Number

할인 금액

data[].sales

Number

판매량

data[].starAvg

Number

평균 별점

data[].reviewSize

Number

리뷰 수

data[].categories.categoryNameSet

Array

카테고리 목록

data[].itemId

Number

상품 ID

data[].thumbnail

String

상품 썸네일

data[].productName

String

상품명

data[].realPrice

Number

실제 가격

data[].discountRate

Number

할인율

pageInfo.page

Number

현재 페이지

pageInfo.size

Number

페이지 크기

pageInfo.totalElements

Number

전체 상품 수

pageInfo.totalPages

Number

전체 페이지 수

카테고리별 상품 조회

HTTP Request

GET /api/items/categories?categoryName=INTESTINE HTTP/1.1
Content-Type: application/json
Host: localhost
Content-Length: 81

{
  "page" : 1,
  "size" : 10,
  "sortOption" : "SALES",
  "direction" : "DESC"
}

Request Fields

Path Type Optional Description

page

Number

페이지 번호

size

Number

페이지 크기

sortOption

String

정렬 옵션 (SALES, PRICE, DISCOUNT_RATE)

direction

String

정렬 방향 (ASC, DESC)

Request Parameters

Request Parameter Description

categoryName

카테고리명

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:24 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 948

{
  "time" : "2025-09-02T02:44:25.210549+09:00",
  "data" : [ {
    "itemId" : 1,
    "thumbnail" : "thumbnailUrl",
    "productName" : "16종혼합유산균 디에스",
    "enterprise" : "(주)씨티씨바이오",
    "mainFunction" : "[프로바이오틱스] 유산균 증식 및 유해균 억제・배변활동 원활・장 건강에 도움을 줄 수 있음",
    "baseStandard" : "1. 성상 : 고유의 향미가 있고 이미, 이취가 없는 흰노란색의 분말\n2. 프로바이오틱스 수 : 200,000,000,000(2000억) CFU/g 이상\n3. 대장균군 : 음성\n4. 납(mg/kg) : 1.0 이하\n5. 카드뮴(mg/kg) : 0.3 이하",
    "realPrice" : 9000,
    "discountRate" : 0.1,
    "discountPrice" : 1000,
    "sales" : 0,
    "starAvg" : 0.0,
    "reviewSize" : 0,
    "categories" : {
      "categoryNameSet" : [ "INTESTINE" ]
    }
  } ],
  "pageInfo" : {
    "page" : 1,
    "size" : 8,
    "totalElements" : 1,
    "totalPages" : 1
  }
}

Response Fields

Path Type Optional Description

time

String

응답 시간

data[].enterprise

String

제조사

data[].mainFunction

String

주요기능

data[].baseStandard

String

기준규격

data[].realPrice

Number

실제 가격

data[].discountRate

Number

할인율

data[].discountPrice

Number

할인 금액

data[].sales

Number

판매량

data[].starAvg

Number

평균 별점

data[].reviewSize

Number

리뷰 수

data[].categories.categoryNameSet

Array

카테고리 목록

data[].itemId

Number

상품 ID

data[].thumbnail

String

상품 썸네일

data[].productName

String

상품명

pageInfo.page

Number

현재 페이지

pageInfo.size

Number

페이지 크기

pageInfo.totalElements

Number

전체 상품 수

pageInfo.totalPages

Number

전체 페이지 수

HTTP Request

GET /api/items/search?keyword=%EB%94%94%EC%97%90%EC%8A%A4 HTTP/1.1
Host: localhost

Request Parameters

Request Parameter Description

keyword

검색어

low

최소 가격

high

최대 가격

sort

정렬 기준 (PRICE_L, PRICE_H, DISCOUNT_RATE_L, DISCOUNT_RATE_H)

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:24 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 947

{
  "time" : "2025-09-02T02:44:25.16963+09:00",
  "data" : [ {
    "itemId" : 1,
    "thumbnail" : "thumbnailUrl",
    "productName" : "16종혼합유산균 디에스",
    "enterprise" : "(주)씨티씨바이오",
    "mainFunction" : "[프로바이오틱스] 유산균 증식 및 유해균 억제・배변활동 원활・장 건강에 도움을 줄 수 있음",
    "baseStandard" : "1. 성상 : 고유의 향미가 있고 이미, 이취가 없는 흰노란색의 분말\n2. 프로바이오틱스 수 : 200,000,000,000(2000억) CFU/g 이상\n3. 대장균군 : 음성\n4. 납(mg/kg) : 1.0 이하\n5. 카드뮴(mg/kg) : 0.3 이하",
    "realPrice" : 9000,
    "discountRate" : 0.1,
    "discountPrice" : 1000,
    "sales" : 0,
    "starAvg" : 0.0,
    "reviewSize" : 0,
    "categories" : {
      "categoryNameSet" : [ "INTESTINE" ]
    }
  } ],
  "pageInfo" : {
    "page" : 1,
    "size" : 8,
    "totalElements" : 1,
    "totalPages" : 1
  }
}

Response Fields

Path Type Optional Description

time

String

응답 시간

data[].itemId

Number

상품 ID

data[].thumbnail

String

상품 썸네일

data[].productName

String

상품명

data[].enterprise

String

제조사

data[].mainFunction

String

주요기능

data[].baseStandard

String

기준규격

data[].realPrice

Number

실제 가격

data[].discountRate

Number

할인율

data[].discountPrice

Number

할인 금액

data[].sales

Number

판매량

data[].starAvg

Number

평균 별점

data[].reviewSize

Number

리뷰 수

data[].categories.categoryNameSet

Array

카테고리 목록

pageInfo.page

Number

현재 페이지

pageInfo.size

Number

페이지 크기

pageInfo.totalElements

Number

전체 상품 수

pageInfo.totalPages

Number

전체 페이지 수

Profile API

프로필 조회

HTTP Request

GET /profile HTTP/1.1
Host: localhost

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: text/plain;charset=UTF-8
Content-Length: 4
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive

test

헬스 체크

HTTP Request

GET /health HTTP/1.1
Host: localhost

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: text/plain;charset=UTF-8
Content-Length: 2
Date: Mon, 01 Sep 2025 17:44:25 GMT
Keep-Alive: timeout=60
Connection: keep-alive

OK

Review API

리뷰 작성

HTTP Request

POST /api/reviews HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY2LCJpYXQiOjE3NTY3NDg2NjZ9.Yh7x4jcC0JN8On5W_Vre_Dsj9mXp-_xn0SZ-ykzvJkE
Content-Type: application/json
Host: localhost
Content-Length: 134

{
  "userId" : 1,
  "itemId" : 1,
  "orderId" : 1,
  "displayName" : "test",
  "content" : "좋은 상품입니다.",
  "star" : 4.5
}

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Content-Type

요청 컨텐츠 타입

Request Fields

Path Type Optional Description

userId

Number

사용자 ID

itemId

Number

상품 ID

orderId

Number

주문 ID

displayName

String

사용자 닉네임

content

String

리뷰 내용

star

Number

별점

HTTP Response

HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 304

{
  "data" : {
    "reviewId" : 2,
    "displayName" : "test",
    "userId" : 1,
    "content" : "좋은 상품입니다.",
    "star" : 4.5,
    "createdAt" : "2025-09-02T02:44:26.661921+09:00",
    "updatedAt" : "2025-09-02T02:44:26.661921+09:00"
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

리뷰 수정

HTTP Request

PATCH /api/reviews HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY2LCJpYXQiOjE3NTY3NDg2NjZ9.Yh7x4jcC0JN8On5W_Vre_Dsj9mXp-_xn0SZ-ykzvJkE
Content-Type: application/json
Host: localhost
Content-Length: 119

{
  "userId" : 1,
  "itemId" : 1,
  "reviewId" : 1,
  "content" : "수정된 리뷰 내용입니다.",
  "star" : 5.0
}

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Content-Type

요청 컨텐츠 타입

Request Fields

Path Type Optional Description

userId

Number

사용자 ID

itemId

Number

상품 ID

reviewId

Number

리뷰 ID

content

String

수정할 리뷰 내용

star

Number

수정할 별점

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 314

{
  "data" : {
    "reviewId" : 1,
    "displayName" : "test",
    "userId" : 1,
    "content" : "수정된 리뷰 내용입니다.",
    "star" : 5.0,
    "createdAt" : "2025-09-02T02:44:26.523237+09:00",
    "updatedAt" : "2025-09-02T02:44:26.533177+09:00"
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

리뷰 삭제

HTTP Request

DELETE /api/reviews HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY2LCJpYXQiOjE3NTY3NDg2NjZ9.Yh7x4jcC0JN8On5W_Vre_Dsj9mXp-_xn0SZ-ykzvJkE
Content-Type: application/json
Host: localhost
Content-Length: 52

{
  "reviewId" : 1,
  "itemId" : 1,
  "userId" : 1
}

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Content-Type

요청 컨텐츠 타입

HTTP Response

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive

리뷰 상세 조회

HTTP Request

GET /api/reviews/1 HTTP/1.1
Host: localhost

Path Parameters

Parameter Description

reviewId

리뷰 ID

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 364

{
  "data" : {
    "reviewId" : 1,
    "itemId" : 1,
    "userId" : 1,
    "content" : "좋은 상품입니다.",
    "displayName" : "테스트유저",
    "star" : 4.5,
    "createdAt" : "2025-09-02T02:44:26.802234+09:00",
    "updatedAt" : "2025-09-02T02:44:26.802234+09:00",
    "reviewStatus" : "ACTIVE"
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

상품별 리뷰 목록 조회

HTTP Request

GET /api/reviews/items/1?page=1&size=8&sort=NEWEST HTTP/1.1
Host: localhost

Path Parameters

Parameter Description

itemId

상품 ID

Request Parameters

Request Parameter Description

page

페이지 번호

size

페이지 크기

sort

정렬 방식

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 464

{
  "time" : "2025-09-02T02:44:26.56028+09:00",
  "data" : [ {
    "reviewId" : 1,
    "itemId" : 1,
    "userId" : 1,
    "content" : "좋은 상품입니다.",
    "displayName" : "테스트유저",
    "star" : 4.5,
    "createdAt" : "2025-09-02T02:44:26.551316+09:00",
    "updatedAt" : "2025-09-02T02:44:26.551317+09:00",
    "reviewStatus" : "ACTIVE"
  } ],
  "pageInfo" : {
    "page" : 1,
    "size" : 8,
    "totalElements" : 1,
    "totalPages" : 1
  }
}

사용자별 리뷰 목록 조회

HTTP Request

GET /api/reviews/users/1?page=1&size=8&sort=NEWEST HTTP/1.1
Host: localhost

Request Parameters

Request Parameter Description

page

페이지 번호

size

페이지 크기

sort

정렬 방식

HTTP Response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 464

{
  "time" : "2025-09-02T02:44:26.68508+09:00",
  "data" : [ {
    "reviewId" : 1,
    "itemId" : 1,
    "userId" : 1,
    "content" : "좋은 상품입니다.",
    "displayName" : "테스트유저",
    "star" : 4.5,
    "createdAt" : "2025-09-02T02:44:26.678575+09:00",
    "updatedAt" : "2025-09-02T02:44:26.678577+09:00",
    "reviewStatus" : "ACTIVE"
  } ],
  "pageInfo" : {
    "page" : 1,
    "size" : 8,
    "totalElements" : 1,
    "totalPages" : 1
  }
}

Subscription API

첫 구독 결제 요청

HTTP Request

POST /api/payments/subscriptionsFirst/2 HTTP/1.1
Authorization: Bearer token
Host: localhost:8080

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Path Parameters

Parameter Description

subscriptionOrderId

구독 주문 ID

HTTP Response

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 208

{
  "data" : {
    "tid" : "subscription_tid",
    "next_redirect_pc_url" : "http://subscription.url",
    "createdAt" : "2025‑09‑02T02:44:26+09:00"
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data.tid

String

결제 고유 번호

data.next_redirect_pc_url

String

PC 결제 페이지 URL

data.createdAt

String

생성 시간

createTime

String

응답 생성 시간

첫 구독 결제 승인

HTTP Request

GET /api/payments/approve/subscriptionsFirst/2?pg_token=subscription_token HTTP/1.1
Host: localhost:8080

Path Parameters

Parameter Description

subscriptionOrderId

주문 ID

Request Parameters

Request Parameter Description

pg_token

PG사 승인 토큰

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 385

{
  "data" : {
    "item_name" : "test_item_name",
    "item_code" : "test_item_code",
    "created_at" : "2021-01-01T00:00:00",
    "approved_at" : "2021-01-01T00:00:00",
    "payload" : "test_payload",
    "amount" : {
      "total" : 10000,
      "tax_free" : 0,
      "vat" : 0,
      "discount" : 0
    },
    "quantity" : 0
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data.item_name

String

O

상품명

data.item_code

String

O

상품 코드

data.created_at

String

생성 시간

data.approved_at

String

승인 시간

data.payload

Varies

O

추가 데이터

data.amount.total

Number

총 결제 금액

data.amount.tax_free

Number

비과세 금액

data.amount.vat

Number

부가세 금액

data.amount.discount

Number

할인 금액

data.quantity

Number

수량

createTime

String

응답 생성 시간

정기 구독 결제 승인

HTTP Request

POST /api/payments/approve/subscriptions/3 HTTP/1.1
Host: localhost:8080

Path Parameters

Parameter Description

subscriptionOrderId

주문 ID

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 385

{
  "data" : {
    "item_name" : "test_item_name",
    "item_code" : "test_item_code",
    "created_at" : "2021-01-01T00:00:00",
    "approved_at" : "2021-01-01T00:00:00",
    "payload" : "test_payload",
    "amount" : {
      "total" : 10000,
      "tax_free" : 0,
      "vat" : 0,
      "discount" : 0
    },
    "quantity" : 0
  },
  "createTime" : "2025‑09‑02T02:44:26+09:00"
}

Response Fields

Path Type Optional Description

data.item_name

String

O

상품명

data.item_code

String

O

상품 코드

data.created_at

String

생성 시간

data.approved_at

String

승인 시간

data.payload

Varies

O

추가 데이터

data.amount.total

Number

총 결제 금액

data.amount.tax_free

Number

비과세 금액

data.amount.vat

Number

부가세 금액

data.amount.discount

Number

할인 금액

data.quantity

Number

수량

createTime

String

응답 생성 시간

구독 주기 변경

HTTP Request

PATCH /api/carts/subscription/2/period?itemId=1&period=60 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6IlVTRVIiLCJ1c2VybmFtZSI6InRlc3RAdGVzdC5jb20iLCJzdWIiOiJ0ZXN0QHRlc3QuY29tIiwiZXhwIjoxNzU2NzUwNDY3LCJpYXQiOjE3NTY3NDg2Njd9.6aOqqT9raShFsgCi4EHIzXs7oCzeAlb1iyJ_9uGt76E
Host: localhost

Request Headers

Name Description

Authorization

Bearer 인증 토큰

Request Parameters

Request Parameter Description

period

변경할 구독 주기

itemId

상품 ID

HTTP Response

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: SAMEORIGIN
Date: Mon, 01 Sep 2025 17:44:26 GMT
Keep-Alive: timeout=60
Connection: keep-alive

구독 취소

HTTP Request

DELETE /api/subscriptions?itemOrderId=1 HTTP/1.1
Authorization: Bearer token
Host: localhost:8080
Name Description

Authorization

Bearer 인증 토큰

Request Parameters

Request Parameter Description

itemOrderId

주문 상품 ID

HTTP Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 69

{
  "data" : null,
  "createTime" : "2025‑09‑02T02:44:27+09:00"
}