# \[엔터프라이즈] 외부 적립금 연동가이드

## 외부 적립금이란? <a href="#ec-99-b8-eb-b6-80-ec-a0-81-eb-a6-bd-ea-b8-88-ec-9d-b4-eb-9e-80-3f" id="ec-99-b8-eb-b6-80-ec-a0-81-eb-a6-bd-ea-b8-88-ec-9d-b4-eb-9e-80-3f"></a>

#### 샵바이에 입점하고자하는 고객사에서 별도의 적립금(마일리지) 혜택을 이미 가지고 있는 경우, <a href="#ec-83-b5-eb-b0-94-ec-9d-b4-ec-97-90-ec-9e-85-ec-a0-90-ed-95-98-ea-b3-a0-ec-9e-90-ed-95-98-eb-8a-94-e" id="ec-83-b5-eb-b0-94-ec-9d-b4-ec-97-90-ec-9e-85-ec-a0-90-ed-95-98-ea-b3-a0-ec-9e-90-ed-95-98-eb-8a-94-e"></a>

고객사에서 진행할 수 있는 2가지 외부 적립금 호환 방식이 있습니다.

<br>

### (방법1) 외부 적립금 전환 <a href="#eb-b0-a9-eb-b2-951-ec-99-b8-eb-b6-80-ec-a0-81-eb-a6-bd-ea-b8-88-ec-a0-84-ed-99-98" id="eb-b0-a9-eb-b2-951-ec-99-b8-eb-b6-80-ec-a0-81-eb-a6-bd-ea-b8-88-ec-a0-84-ed-99-98"></a>

#### 개념 <a href="#ea-b0-9c-eb-85-90" id="ea-b0-9c-eb-85-90"></a>

고객사 시스템의 적립금을 샵바이 시스템의 적립금으로 '전환'하여, 샵바이 내부 프로세스에 따라 쇼핑몰 고객의 적립금을 지급/차감/조회할 수 있는 개념입니다.\ <br>

#### 상세설명 <a href="#ec-83-81-ec-84-b8-ec-84-a4-eb-aa-85" id="ec-83-81-ec-84-b8-ec-84-a4-eb-aa-85"></a>

샵바이에서는 이와 관련된 server API를 제공하고 있으며, 해당 API의 호출 주체는 고객사입니다.\
쇼핑몰 고객들이 기존의 적립금을 샵바이의 적립금으로 전환할 수 있는 프론트 구현이 필요합니다.\
자세한 API 내용은 [외부 적립금 전환 가이드](https://workspace.nhn-commerce.com/support/recommendedContents/23047)를 참고하시길 바랍니다.<br>

***

### (방법2) 외부 적립금 연동 <a href="#eb-b0-a9-eb-b2-952-ec-99-b8-eb-b6-80-ec-a0-81-eb-a6-bd-ea-b8-88-ec-97-b0-eb-8f-99" id="eb-b0-a9-eb-b2-952-ec-99-b8-eb-b6-80-ec-a0-81-eb-a6-bd-ea-b8-88-ec-97-b0-eb-8f-99"></a>

본 문서에서 아래 소개 드릴 방식입니다.<br>

#### 개념 <a href="#ea-b0-9c-eb-85-90" id="ea-b0-9c-eb-85-90"></a>

고객사에서 기존에 사용하던 적립금(마일리지)를 전환 절차 없이 그대로 사용할 수 있고, 샵바이에서 고객사의 외부적립금을 연동하는 개념입니다.

#### 상세설명 <a href="#ec-83-81-ec-84-b8-ec-84-a4-eb-aa-85" id="ec-83-81-ec-84-b8-ec-84-a4-eb-aa-85"></a>

고객사에서 아래에서 안내드릴 스펙에 따라 API를 개발하여 저희 측으로 uri 등을 전달주시면, 해당 API의 호출 주체는 저희 샵바이입니다.\
(ex) 적립금 조회 시, 샵바이에서 고객사에서 개발한 API를 호출하여 고객사의 DB를 조회합니다.\ <br>

#### 주의사항 <a href="#ec-a3-bc-ec-9d-98-ec-82-ac-ed-95-a-d" id="ec-a3-bc-ec-9d-98-ec-82-ac-ed-95-a-d"></a>

※ 단, 샵바이에서 API 호출 시, 고객사 서버에서 바로 응답되지 않는 성능 이슈가 발생하지 않도록 신경 써주시길 바랍니다.\
※ 적립금이 중복으로 지급될 수 있는 케이스에 대해 확인하시길 바랍니다. (아래 적립금 지급API '제약조건' 문단 확인)\ <br>

#### 연동 프로세스 <a href="#ec-97-b0-eb-8f-99-ed-94-84-eb-a1-9c-ec-84-b8-ec-8a-a4" id="ec-97-b0-eb-8f-99-ed-94-84-eb-a1-9c-ec-84-b8-ec-8a-a4"></a>

* step 1. 아래 안내드릴 API 스펙에 따라 고객사에서 API 개발
* step 2. \[NHN커머스> 고객센터> 1:1문의]를 통해 아래 정보들을 세팅요청 해주시길 바랍니다.  [1:1문의 바로가기>](https://support.nhn-commerce.com/inquiry/list)<br>

| 항목                                 | 샘플 (예시)                                           | 설명                                                     |
| ---------------------------------- | ------------------------------------------------- | ------------------------------------------------------ |
| domain                             | [https://sample-dev.com](https://sample-dev.com/) | 외부 개발사는 개발된 도메인 https 으로 제공해야 함                        |
| 1. 적립금 지급 uri                      | /accumulations/add                                | 필수                                                     |
| 2. 적립금 차감 uri                      | /accumulations/subtract                           | 필수                                                     |
| 3. 적립금 차감 롤백 uri                   | /accumulations/subtract-rollback                  | 필수                                                     |
| 4. 사용가능 적립금 조회 uri                 | /accumulations/available-amounts                  | 필수                                                     |
| 5. 적립금 내역 조회 uri                   | /accumulations                                    | (선택)                                                   |
| 필요한 header 값                       | token : 'abc'                                     | 샵바이 -> 외부 개발사 요청 시, 인증을 위해서 필요한 http request header의 값 |
| <p>(추가)</p><p>memberMappingKey</p> | MEMBER\_ID(default), MEMBER\_NO, CI               | 맴버 맵핑 키                                                |

* step 3. 아래 NHN커머스 샵바이 ACL 추가바랍니다.
  * 리얼 환경: 103.194.111.5, 115.89.203.145
* 2024-08-26 memberMappingKey 항목 추가되었습니다.<br>
* 샘플(예시)

```json
{
    "url": "https://sample-dev.com",
    "headers": {
        "Content-Type": "application/json"
    },
    "memberMappingKey": "MEMBER_NO",
    "externalAccumulationUriGroup": {
        "addUri": "/accumulations/add",
        "searchUri": "/accumulations",
        "subtractUri": "/accumulations/subtract",
        "subtractRollbackUri": "/accumulations/subtract-rollback",
        "getAvailableAmountUri": "/accumulations/available-amounts"
    }
}
```

***

## 적립금 적립/차감/롤백 다이어그램 <a href="#ec-a0-81-eb-a6-bd-ea-b8-88-ec-a0-81-eb-a6-bd-2f-ec-b0-a8-ea-b0-90-2f-eb-a1-a4-eb-b0-b1-eb-8b-a4-ec-9" id="ec-a0-81-eb-a6-bd-ea-b8-88-ec-a0-81-eb-a6-bd-2f-ec-b0-a8-ea-b0-90-2f-eb-a1-a4-eb-b0-b1-eb-8b-a4-ec-9"></a>

### 적립금 적립 프로세스 <a href="#ec-a0-81-eb-a6-bd-ea-b8-88-ec-a0-81-eb-a6-bd-ed-94-84-eb-a1-9c-ec-84-b8-ec-8a-a4" id="ec-a0-81-eb-a6-bd-ea-b8-88-ec-a0-81-eb-a6-bd-ed-94-84-eb-a1-9c-ec-84-b8-ec-8a-a4"></a>

<figure><img src="/files/8mhwKZujYFYo6naSN9pR" alt=""><figcaption></figcaption></figure>

***

### 적립금 차감/ 롤백 프로세스 <a href="#ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-2f-eb-a1-a4-eb-b0-b1-ed-94-84-eb-a1-9c-ec-84-b8-ec-8a-a" id="ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-2f-eb-a1-a4-eb-b0-b1-ed-94-84-eb-a1-9c-ec-84-b8-ec-8a-a"></a>

<figure><img src="/files/6FqrLmz024OgUUM8xT4K" alt=""><figcaption></figcaption></figure>

***

## 1. 적립금 지급 (필수) <a href="#id-1.-ec-a0-81-eb-a6-bd-ea-b8-88-ec-a7-80-ea-b8-89-ed-95-84-ec-88-98" id="id-1.-ec-a0-81-eb-a6-bd-ea-b8-88-ec-a7-80-ea-b8-89-ed-95-84-ec-88-98"></a>

### 적립금 지급 API (개발 스펙 안내) <a href="#ec-a0-81-eb-a6-bd-ea-b8-88-ec-a7-80-ea-b8-89-api-ea-b0-9c-eb-b0-9c-ec-8a-a4-ed-8e-99-ec-95-88-eb-82" id="ec-a0-81-eb-a6-bd-ea-b8-88-ec-a7-80-ea-b8-89-api-ea-b0-9c-eb-b0-9c-ec-8a-a4-ed-8e-99-ec-95-88-eb-82"></a>

{% hint style="info" %}

* request 는 request body 로 전달
* 형태는 json
  {% endhint %}

#### ■ method <a href="#e2-96-a0-method" id="e2-96-a0-method"></a>

* POST

#### ■ request    <a href="#e2-96-a0-request" id="e2-96-a0-request"></a>

| attribute                                     | name                       | required | description                                                           | type                                  |
| --------------------------------------------- | -------------------------- | -------- | --------------------------------------------------------------------- | ------------------------------------- |
| memberKey                                     | 회원 연계 키                    | 필수       | <p>연동시 사용한 유형의 값<br></p><p>(MEMBER\_ID,MEMBER\_NO,CI)</p>             | String                                |
| amount                                        | 적립금액                       | 필수       | 적립금                                                                   | Long                                  |
| reason                                        | 적립 세부내역 사유                 | 필수       |                                                                       | String                                |
| reasonType                                    | 적립금 지급 사유                  | 필수       | enum 형식                                                               | String                                |
| expiredDateTime                               | 적립금 만료일                    | 필수       |                                                                       | LocalDateTime : 'yyyy-MM-dd HH:mm:ss' |
| mappingKey                                    | 적립키                        | 필수       | <p>롤백용으로 <br>사용하는 값</p><p></p><p>주문번호, 리뷰번호, 주문옵션 번호 또는 "0" 으로 전달</p> | String                                |
| <p>(추가) additionalMappingKey.orderNo<br></p>  | <p>추가정보<br>(연관 주문번호)</p>   | 선택       | 추가 연동키                                                                | Int(nullable)                         |
| <p>(추가) additionalMappingKey.reviewNo<br></p> | <p>추가정보<br>(연관 상품리뷰번호)</p> | 선택       | 추가 연동키                                                                | Int(nullable)                         |
| (추가) additionalMappingKey.orderOptionNo       | <p>추가정보<br>(연관 주문옵션번호)</p> | 선택       | 추가 연동키                                                                | Int(nullable)                         |

* 2023-07-24 reasonType 항목 추가되었습니다.&#x20;
* 2024-01-24 additionalMappingKey.orderNo, additionalMappingKey.reviewNo,additionalMappingKey.orderOptionNo 항목 추가됩니다. (2/20 배포완료)

#### ※ reasonType 코드 값 설명 <a href="#e2-96-a0-response" id="e2-96-a0-response"></a>

* 적립 - 적립 - 상품 주문 적립 (구매확정)\
  ADD\_AFTER\_PAYMENT
* 적립 - 적립 - 교환/추가결제 적립 (교환대상 가격 > 원주문 상품가격)\
  ADD\_AFTER\_REPLACE\_PAYMENT
* 적립 - 사이트 활동 적립 - 상품평 작성 완료\
  ADD\_POSTING
* 적립 - 수동적립\
  ADD\_MANUAL
* 적립 - 회원가입시 자동 적립\
  ADD\_SIGNUP
* 적립 - 생일축하 적립\
  ADD\_BIRTHDAY
* 적립 - 회원등급 적립\
  ADD\_GRADE
* 적립 - 등급 혜택 즉시 지급\
  ADD\_GRADE\_BENEFIT

***

#### ■ response <a href="#e2-96-a0-response" id="e2-96-a0-response"></a>

#### 성공인 경우 <a href="#ec-84-b1-ea-b3-b5-ec-9d-b8-ea-b2-bd-ec-9a-b0" id="ec-84-b1-ea-b3-b5-ec-9d-b8-ea-b2-bd-ec-9a-b0"></a>

| attribute | name   | required | description | type   |
| --------- | ------ | -------- | ----------- | ------ |
| no        | 지급 key | 필수       | 적립 연계키      | String |

#### 실패인 경우 <a href="#ec-8b-a4-ed-8c-a8-ec-9d-b8-ea-b2-bd-ec-9a-b0" id="ec-8b-a4-ed-8c-a8-ec-9d-b8-ea-b2-bd-ec-9a-b0"></a>

* http code 400 으로 전달
* 보통의 경우 errorMessage로 전달된 실패사유를 사용자에게 노출하거나 로그로 남깁니다.
* 아래와 같은 형태의 response body 로 에러 코드와 메시지를 전달

```json
{
"errorCode" : "실패코드",
"errorMessage" : "실패사유"
}
```

### 제약조건 <a href="#ec-a0-9c-ec-95-bd-ec-a1-b0-ea-b1-b4" id="ec-a0-9c-ec-95-bd-ec-a1-b0-ea-b1-b4"></a>

※ `생일자 적립금 지급`, `등급 적립금 지급` 정기 지급 시, 일 배치(daily batch)로 적립금을 지급합니다.\
단, 해당 정기지급은 `mappingKey`가 0으로 등록되어 있어 외부적립금 사용 시 중복 지급될 수 있습니다.

만약 '[적립금 전환 방식](https://shopby.works/support/recommendedContents/23047)'으로 NHN커머스 샵바이의 적립금을 사용할 경우,  적립금 지급 번호와 사유를 내부 코드로 관리하여 중복지급을 제외할 수 있으나\
본 문서에서 안내드리는 '외부 적립금 연동 방식' 을 사용할 경우, 지급코드를 별도로 관리하지 않기 때문에 중복 지급 될 수 있습니다.

(예시) 중복지급 될 수 있는 케이스\
&#x20;: \[고객이 1/1을 생일로 등록]-> \[1/1 일 배치를 통해 생일 적립금 지급]-> \[1/2에 고객이 생일을 1/3으로 변경]-> \[1/3 일 배치에서 생일 적립금 중복 지급]\ <br>

### 참고사항 <a href="#ec-b0-b8-ea-b3-a0-ec-82-ac-ed-95-a-d" id="ec-b0-b8-ea-b3-a0-ec-82-ac-ed-95-a-d"></a>

`적립금 차감 API` 및 `적립금 차감 롤백 API`는 존재하나,\
`적립금 적립 API`에 대한 `적립금 적립 롤백 API` 는 제공하지 않는 점 참고부탁드립니다.

따라서 이미 적립된 적립금을 차감하기 위해서는, 아래 문서에서 소개 드릴 `적립금 차감 API`를 개발하시길 바랍니다.

***

## 2. 적립금 차감 (필수) <a href="#id-2.-ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-ed-95-84-ec-88-98" id="id-2.-ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-ed-95-84-ec-88-98"></a>

### 적립금 차감 API (개발 스펙 안내) <a href="#ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-api-ea-b0-9c-eb-b0-9c-ec-8a-a4-ed-8e-99-ec-95-88-eb-82" id="ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-api-ea-b0-9c-eb-b0-9c-ec-8a-a4-ed-8e-99-ec-95-88-eb-82"></a>

{% hint style="info" %}

* request 는 request body 로 전달
* 형태는 json
  {% endhint %}

#### ■ method <a href="#e2-96-a0-method" id="e2-96-a0-method"></a>

* POST

#### ■ request <a href="#e2-96-a0-request" id="e2-96-a0-request"></a>

| attribute                          | name                       | required | description                                                       | type             |
| ---------------------------------- | -------------------------- | -------- | ----------------------------------------------------------------- | ---------------- |
| memberKey                          | 회원 연계 키                    | 필수       | <p>연동시 사용한 유형의 값<br></p><p>(MEMBER\_ID,MEMBER\_NO,CI)</p>         | String           |
| amount                             | 차감금액                       | 필수       | 적립금                                                               | Long ( 양수 )      |
| reason                             | 차감 사유                      | 필수       |                                                                   | String           |
| <p>reasonType<br></p>              | 직립금 차감 사유                  | 필수       | <p>enum 형식<br></p>                                                | String           |
| mappingKey                         | 차감키                        | 필수       | <p>롤백용으로 사용하는 값</p><p></p><p>주문번호, 리뷰번호, 주문옵션 번호 또는 "0" 으로 전달</p> | String           |
| additionalMappingKey.orderNo       | <p>추가정보<br>(연관 주문번호)</p>   | 선택       | 롤백용\*                                                             | Int(nullable)    |
| additionalMappingKey.reviewNo      | <p>추가정보<br>(연관 상품리뷰번호)</p> | 선택       | 롤백용\*                                                             | Int(nullable)    |
| additionalMappingKey.orderOptionNo | <p>추가정보<br>(연관 주문옵션번호)</p> | 선택       | 롤백용\*                                                             | Int(nullable)    |
| (추가) orderExtraData                | 주문추가정보(JsonString)         | 선택       | 주문 예약단계에서 shop api(url링크)에서 입력한 ExtraData를 그대로 바이패스               | String(nullable) |

* 2024-02-20 request > orderExtraData 항목이 신규 추가됩니다.&#x20;
* 참고사항 (\*)\
  구매확정 후 반품 시, 이미 지급된 적립금 정보 확인을 위해 `적립금 차감 API`의 request 항목이 위와 같이 추가되었습니다.\
  외부적립금 연동 방식을 사용 중인 고객사의 경우, 새로 추가된 데이터에 대응 가능한 구조로 변경하시길 바랍니다.
* 2023-08-10 reasonType 항목 업데이트 되었습니다.&#x20;

#### ※ reasonType 코드 값 설명 <a href="#e2-96-a0-response" id="e2-96-a0-response"></a>

* 차감 - 사용 - 상품 주문 시 적립금 사용 (결제완료)\
  SUB\_PAYMENT\_USED
* 차감 - 사용 - 교환상품 추가 결제 시 적립금 사용 (추가결제 완료)\
  SUB\_EXTRA\_PAYMENT\_USED
* 차감 - 적립취소 - 상품평 삭제\
  SUB\_DELETE\_POSTING
* 차감 - 수동차감\
  SUB\_MANUAL\
  \ <br>
* 샘플 (예시)

<pre class="language-json" data-overflow="wrap"><code class="lang-json">{"amount" : 100,
<strong>"reason" : "테스트 차감",
</strong>"memberKey" : "test@abc.com",
"mappingKey" : "2022080117000000001",
"additionalMappingKey" : {
    "orderNo" : "2022080117000000001",
    "reviewNo" : "3",
    "orderOptionNo" : "2"
    }
}
</code></pre>

#### ■ response <a href="#e2-96-a0-response" id="e2-96-a0-response"></a>

성공인 경우

| attribute | name         | required | description | type   |
| --------- | ------------ | -------- | ----------- | ------ |
| no        | 차감롤백을 위한 key | 필수       | 연계키         | String |

***

## 3. 적립금 차감 롤백 (필수) <a href="#id-3.-ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-eb-a1-a4-eb-b0-b1-ec-84-a0-ed-83-9d" id="id-3.-ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-eb-a1-a4-eb-b0-b1-ec-84-a0-ed-83-9d"></a>

### 적립금 차감 롤백 API (개발 스펙 안내) <a href="#ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-eb-a1-a4-eb-b0-b1-api-ea-b0-9c-eb-b0-9c-ec-8a-a4-ed-8e" id="ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-eb-a1-a4-eb-b0-b1-api-ea-b0-9c-eb-b0-9c-ec-8a-a4-ed-8e"></a>

{% hint style="info" %}

* request 는 request body 로 전달
* 형태는 json
* 불가능한 경우 적립으로 처리 ( <mark style="background-color:red;">※ 이 경우 적립금 유효기간은 유지되지 않음</mark> )
  {% endhint %}

#### ■ method <a href="#e2-96-a0-method" id="e2-96-a0-method"></a>

* POST

#### ■ request <a href="#e2-96-a0-request" id="e2-96-a0-request"></a>

| attribute     | name                                    | required | description                                                   | type          |
| ------------- | --------------------------------------- | -------- | ------------------------------------------------------------- | ------------- |
| no            | 차감 롤백을 위한 key                           | 필수       | <p>차감 시, 받은 response.no 값<br>전달<br></p><p>없는경우<br>주문번호 전달</p> | String        |
| mappingKey    | 차감롤백을 위한 mapping key                    | 필수       | <p>취소된 <br>주문번호 전달</p>                                        | String        |
| amount        | <p>취소금액  <br>(롤백금액)</p>                 | 필수       |                                                               | Int           |
| reason        | 롤백 사유                                   | 필수       |                                                               | String        |
| lastSubPayAmt | 남은 적립금                                  | 선택       | <p>부분 취소 시, <br>남은 적립금액</p>                                   | Int(nullable) |
| memberKey     | 연동시 사용한 유형의 값(MEMBER\_ID,MEMBER\_NO,CI) |          |                                                               | String        |

* 2024-08-26 lastSubPayAmt 항목 추가되었습니다.

{% hint style="success" %} <mark style="color:red;">**롤백 케이스 별 amount, lastSubPayAmt 예시**</mark>

* **case1. 전체 취소 시**
  * amount: 1,000
  * lastSubPayAmt: 1,000
* **case2. 100 point 부분 취소 시**
  * amount: 100
  * lastSubPayAmt: 1,000
    {% endhint %}

#### ■ response <a href="#e2-96-a0-response" id="e2-96-a0-response"></a>

#### 성공인 경우 <a href="#ec-84-b1-ea-b3-b5-ec-9d-b8-ea-b2-bd-ec-9a-b0" id="ec-84-b1-ea-b3-b5-ec-9d-b8-ea-b2-bd-ec-9a-b0"></a>

* http code 200

#### 실패인 경우 <a href="#ec-8b-a4-ed-8c-a8-ec-9d-b8-ea-b2-bd-ec-9a-b0" id="ec-8b-a4-ed-8c-a8-ec-9d-b8-ea-b2-bd-ec-9a-b0"></a>

* http code 400
* 아래와 같은 형태의 response body 로 에러 코드와 메시지를 전달

{% code overflow="wrap" %}

```json
{
"errorCode" : "실패코드",
"errorMessage" : "실패사유"
}

```

{% endcode %}

***

## 4. 사용가능 적립금 조회 (필수) <a href="#id-3.-ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-eb-a1-a4-eb-b0-b1-ec-84-a0-ed-83-9d" id="id-3.-ec-a0-81-eb-a6-bd-ea-b8-88-ec-b0-a8-ea-b0-90-eb-a1-a4-eb-b0-b1-ec-84-a0-ed-83-9d"></a>

### 사용가능 적립금 조회 API (개발 스펙 안내) <a href="#ec-82-ac-ec-9a-a9-ea-b0-80-eb-8a-a5-ec-a0-81-eb-a6-bd-ea-b8-88-ec-a1-b0-ed-9a-8c-api-ea-b0-9c-eb-b0" id="ec-82-ac-ec-9a-a9-ea-b0-80-eb-8a-a5-ec-a0-81-eb-a6-bd-ea-b8-88-ec-a1-b0-ed-9a-8c-api-ea-b0-9c-eb-b0"></a>

{% hint style="info" %}

* request 는 request param으로 전달
* response 형태는 json
  {% endhint %}

#### ■ method <a href="#e2-96-a0-method" id="e2-96-a0-method"></a>

* GET

#### ■ request (parameter) <a href="#e2-96-a0-request" id="e2-96-a0-request"></a>

| attribute       | name                           | required | description                                               | type                                          |
| --------------- | ------------------------------ | -------- | --------------------------------------------------------- | --------------------------------------------- |
| memberKey       | 회원 연계 키                        | 필수       | <p>연동시 사용한 유형의 값<br></p><p>(MEMBER\_ID,MEMBER\_NO,CI)</p> | String                                        |
| expireStartYmdt | 만료조회 시작일(디폴트 : 오늘 - 30일)       | 선택       |                                                           | LocalDateTime(format : 'yyyy-MM-dd HH:mm:ss') |
| expireEndYmdt   | <p>만료조회 종료일 <br>(디폴트 : 오늘)</p> | 선택       |                                                           | LocalDateTime(format : 'yyyy-MM-dd HH:mm:ss') |

#### ■ response <a href="#e2-96-a0-response" id="e2-96-a0-response"></a>

#### 성공인 경우 <a href="#ec-84-b1-ea-b3-b5-ec-9d-b8-ea-b2-bd-ec-9a-b0" id="ec-84-b1-ea-b3-b5-ec-9d-b8-ea-b2-bd-ec-9a-b0"></a>

| attribute     | name         | required | description                                                                                                        | type           |
| ------------- | ------------ | -------- | ------------------------------------------------------------------------------------------------------------------ | -------------- |
| amount        | 사용 가능한 총 적립금 | 필수       |                                                                                                                    | Long           |
| expiresAmount | 만료예정 적립금     | 선택       | <p>조회기간(expireStartYmdt \~ expireEndYmdt) <br>동안 만료될 금액<br><br>(만료일이 expireStartYmdt보다 크고, expireEndYmdt보다 작음)</p> | Long(nullable) |

#### 실패인 경우 <a href="#ec-8b-a4-ed-8c-a8-ec-9d-b8-ea-b2-bd-ec-9a-b0" id="ec-8b-a4-ed-8c-a8-ec-9d-b8-ea-b2-bd-ec-9a-b0"></a>

* http code 400
* 아래와 같은 형태의 response body 로 에러 코드와 메시지를 전달

```json
{
"errorCode" : "실패코드",
"errorMessage" : "실패사유"
}
```

***

## 5. 적립금 내역 조회 (선택) <a href="#id-5.-ec-a0-81-eb-a6-bd-ea-b8-88-eb-82-b4-ec-97-a-d-ec-a1-b0-ed-9a-8c-ec-84-a0-ed-83-9d" id="id-5.-ec-a0-81-eb-a6-bd-ea-b8-88-eb-82-b4-ec-97-a-d-ec-a1-b0-ed-9a-8c-ec-84-a0-ed-83-9d"></a>

### 적립금 내역 조회 API (개발 스펙 안내) <a href="#ec-a0-81-eb-a6-bd-ea-b8-88-eb-82-b4-ec-97-a-d-ec-a1-b0-ed-9a-8c-api-ea-b0-9c-eb-b0-9c-ec-8a-a4-ed-8e" id="ec-a0-81-eb-a6-bd-ea-b8-88-eb-82-b4-ec-97-a-d-ec-a1-b0-ed-9a-8c-api-ea-b0-9c-eb-b0-9c-ec-8a-a4-ed-8e"></a>

{% hint style="info" %}

* request 는 request param으로 전달
* response 형태는 json
  {% endhint %}

#### ■ method <a href="#e2-96-a0-method" id="e2-96-a0-method"></a>

* GET

#### ■ request (parameter) <a href="#e2-96-a0-request" id="e2-96-a0-request"></a>

| attribute     | name         | required | description                                                    | type                                          |
| ------------- | ------------ | -------- | -------------------------------------------------------------- | --------------------------------------------- |
| startDateTime | 검색 시작일       | 필수       |                                                                | LocalDateTime(format : 'yyyy-MM-dd HH:mm:ss') |
| endDateTime   | 검색 종료일       | 필수       |                                                                | LocalDateTime(format : 'yyyy-MM-dd HH:mm:ss') |
| searchType    | 검색 유형        | 필수       | 지급일 기준(REGISTERED),만료일 기준(EXPIRED)                             |                                               |
| type          | 검색 조건(지급/차감) | 선택       | <p>전체("null") - default, <br>지급("ADD"), <br>차감("SUBTRACT")</p> | String                                        |
| memberKey     | 회원 연계 키      | 선택       | null 이면 전체                                                     | String(nullable)                              |
| page          | 페이지 번호       | 필수       | 조회할 페이징 번호 (default 0)                                         |                                               |
| size          | 페이지 사이즈      | 필수       | <p>페이지당 조회할 content 개수 <br>( default 100 )</p>                 |                                               |

#### ■ response <a href="#e2-96-a0-response" id="e2-96-a0-response"></a>

#### 성공인 경우 <a href="#ec-84-b1-ea-b3-b5-ec-9d-b8-ea-b2-bd-ec-9a-b0" id="ec-84-b1-ea-b3-b5-ec-9d-b8-ea-b2-bd-ec-9a-b0"></a>

| attribute-level1 | attribute-level2 | name                           | required | description                  | type                                          |
| ---------------- | ---------------- | ------------------------------ | -------- | ---------------------------- | --------------------------------------------- |
| totalCount       | -                | <p>전체 데이터<br>건수</p>            | 선택       |                              | Int                                           |
| contents         | no               | 적립금 번호                         | 필수       | PK                           | Int                                           |
| contents         | memberKey        | 회원 연계 키                        | 필수       | 연계키                          | String                                        |
| contents         | type             | <p>지급/차감/<br>지급롤백/<br>차감롤백</p> | 필수       | 적립금                          | String                                        |
| contents         | amount           | 적립금액                           | 필수       | 적립금                          | Long                                          |
| contents         | reason           | 사유                             | 필수       |                              | String                                        |
| contents         | registerDateTime | 등록일                            | 필수       |                              | LocalDateTime(format : 'yyyy-MM-dd HH:mm:ss') |
| contents         | expiredDateTime  | 적립금만료일                         | 필수       |                              | LocalDateTime(format : 'yyyy-MM-dd HH:mm:ss') |
| contents         | mappingKey       | 적립키                            | 필수       | 롤백용                          | String(nullable)                              |
| contents         | totalAmount      | 적립/차감시점 잔여 적립금                 | 선택       |                              | Long(nullable)                                |
| contents         | extraData        | 추가 정보                          | 선택       | json 형태로 front에 추가적으로 노출할 정보 | Map\<String,Object> (nullable)                |

* 샘플(예시)

{% code overflow="wrap" %}

```json
{
  "totalCount" : 15,
  "contents" : [
     {
       "no" : "1",
        "memberKey" : "abc",
        "type" : "지급",
        "amount" : 100,
        "reason" : "상품평 작성 적립",
        "registerDateTime" : "2021-01-01 13:12:30",
        "expiredDateTime" : "2022-01-01 13:12:30",
        "mappingKey" : "20210501123456123",
        "totalAmount" : 1200,
        "extraData" : {
             "a" : "b",
             "C" : "D"
         }
     }
  ]
}
```

{% endcode %}

#### 실패인 경우 <a href="#ec-8b-a4-ed-8c-a8-ec-9d-b8-ea-b2-bd-ec-9a-b0" id="ec-8b-a4-ed-8c-a8-ec-9d-b8-ea-b2-bd-ec-9a-b0"></a>

* http code 400
* 아래와 같은 형태의 response body 로 에러 코드와 메시지를 전달

{% code overflow="wrap" %}

```json
{
"errorCode" : "실패코드",
"errorMessage" : "실패사유"
}
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://workspace-help.nhn-commerce.com/contents/recommended/prm_mileage_guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
