# 회원 API v1.1.1

{% hint style="info" %}
**오프사이트 캠페인의 발송** 시 사용되는 회원의 정보를 그루비에 전송하는 API 입니다.&#x20;

[회원 API ](https://docs.groobee.ai/developer-guide/api-guide/member)문서를 참고해 주세요.회원 API v1 과 v2는 혼용하여 사용할 수 없습니다.
{% endhint %}

## **연동 방식**

https 프로토콜을 이용한 Rest API

***

## **필수 값**

| 이름      | 내용                     |
| ------- | ---------------------- |
| API Key | 설정 페이지에서 발급한 API Key 값 |

***

## **요청 주소**

[https://api.groobee.io](https://api.groobee.io/)

***

## **공통 사항**

### **요청 방법**

Rest API 요청 시 Header에 x-api-key 키로 API Key를 값으로 포함해야 합니다.

```
 curl --location --request GET 'https://api.groobee.io/<요청주소>' \ 
--header 'x-api-key: <발급 받은 API Key 값>' 
```

### **응답 결과**

JSON으로 응답하며 형태는 아래를 참고해 주세요.

```
  {
    "httpStatus": {
        "code": <http status code>, 
        "reasonPhrase": <http status 내용> 
    },
    "processCode": <성공 여부>,
    "processValue": <요청한 엔드 포인트의 응답 값> 
}
```

### **processCode 코드값**

| 코드 값  | 상태 | 설명                         |
| ----- | -- | -------------------------- |
| 0     | 성공 | -                          |
| -1000 | 실패 | 요청 시 Header에 x-api-key 미존재 |
| -1001 | 실패 | 고객사 미존재                    |
| -1002 | 실패 | 고객사 미승인 상태 (승인 필요)         |
| -1003 | 실패 | 고객사 계약기간 만료                |
| -1004 | 실패 | 데이터 초과                     |
| -9997 | 실패 | 데이터가 올바르지 않습니다.            |
| -9998 | 실패 | http 관련 에러                 |
| -9999 | 실패 | 요청 API 서버 에러               |

***

## **엔드 포인트**

### **회원 공통**

**processCode 코드값**

| 코드 값  | 상태 | 설명                   |
| ----- | -- | -------------------- |
| -1005 | 실패 | 진행 중인 프로세스 있음        |
| -1006 | 실패 | 회원 ID가 올바르지 않습니다.    |
| -1007 | 실패 | 회원 전화번호가 올바르지 않습니다.  |
| -1012 | 실패 | 회원 SMS 수신동의 여부 필드 누락 |
| -1013 | 실패 | 회원 이름 길이 초과(20자 이하)  |

***

## **회원**

### **회원 정보 조회**

회원의 정보를 조회합니다.

* **요청 형태**

| Method | URI           | 요청/응답 형식 |
| ------ | ------------- | -------- |
| GET    | /v1/users/sms | JSON     |

* **매개 변수**

쿼리 스트링으로 조회하며 아래 파라미터에서 1개 이상이 필수입니다.

| Parameter Name | Description |
| -------------- | ----------- |
| memberId       | 조회 회원 ID    |
| phoneNumber    | 조회 회원 전화번호  |

* **응답 데이터**

```
  {
    "httpStatus": { 
    "code": <http status code>,
    "reasonPhrase": <http status 내용>
    },
    "processCode": <성공 여부>, 
    "processValue": [
        {
        "memberId":<검색된 회원 ID>,
        "phoneNumber": <검색된 회원 전화번호 (저장된 형식과 무관하게 010-9999-1111 와 같이 하이픈이 있는 형식)>,
        "isReceive":<검색된 회원 수신 동의 여부(true | false)>,
        "name":<검색된 회원 이름>
        }
    ]
}
```

<br>

### **회원 정보 저장/수정**

회원 정보를 저장 및 수정합니다.

{% hint style="warning" %}
한 회원에 여러 전화번호가 있을 경우 요청한 번호로 모두 변경됩니다.
{% endhint %}

* **요청 형태**

| Method | URI           | 요청/응답 형식 |
| ------ | ------------- | -------- |
| POST   | /v1/users/sms | JSON     |

* **매개 변수**

| Parameter        | Parameter Name                  | Description   | 필수 |
| ---------------- | ------------------------------- | ------------- | -- |
| users (max 1000) | memberId                        | 회원 ID         | O  |
|                  | phoneNumber                     | 회원 전화번호       | O  |
|                  | isReceive (Y = true, N = false) | 회원 수신 동의 여부   | O  |
|                  | name                            | 회원 이름(20자 이하) | X  |

* **요청 데이터**

등록할 회원 정보들을 배열로 요청합니다.

```
[ 
        {
            "memberId":<회원 ID>,
            "phoneNumber":<회원 전화번호>,
            "isReceive":<회원 수신 동의 여부>,
            "name":<회원 이름>
      }
      ...
]
```

* **응답 데이터**

성공 여부와 상관없이 processValue 키에 해당되는 값은 없습니다.

```
  {
        "httpStatus": {
          "col": <http status code>,
          "reasonPhrase": <http status 내용>
        },
        "processCode": <성공 여부>,
        "processValue": ""
  }
```

{% hint style="warning" %}

* isReceive 필드에 대한 값 미전송 시 '수신 거부' 로 응답합니다.
* isReceive가 '수신 거부' 상태일 경우 SMS와 브랜드 메시지(비친구 대상) 발송만 제한되며, 그외 캠페인은 수신 거부 여부와 관계없이 발송 가능합니다.
* 회원 정보 저장/수정 시 name 필드는에 대한 값을 미전송할 경우 데이터가 없는 상태로 응답합니다.
  {% endhint %}

### **회원 정보 삭제**

* **요청 형태**

| Method | URI           | 요청/응답 형식 |
| ------ | ------------- | -------- |
| DELETE | /v1/users/sms | JSON     |

* **매개 변수**

| Parameter        | Parameter Name | Description |
| ---------------- | -------------- | ----------- |
| users (max 1000) | memberId       | 회원 ID       |

* **요청 데이터**

등록할 회원 ID들을 배열로 요청합니다.

```
  [
	<회원 ID>, ... 
  ]
```

* **응답 데이터**

성공 여부와 상관없이 processValue 키에 해당되는 값은 없습니다.

```
  {
        "httpStatus": {
            "col": <http status code>,
            "reasonPhrase": <http status 내용>
        },
        "processCode": <성공 여부>,
        "processValue": ""
}
```

### **회원 정보 삭제 : POST 방식 (신규)**

회원 정보를 삭제합니다.

* 입력된 회원의 ID를 기준으로 요청한 회원의 정보를 모두 삭제합니다.

* POST 요청으로 수행되며, 쿼리 파라미터 'delete' 를 인자로 추가합니다.

* 삭제 시 입력되었던 회원의 정보는 복구할 수 없습니다.

* **기본 정보**

| Method | URL                                          | 인증 방식   |
| ------ | -------------------------------------------- | ------- |
| POST   | <https://api.groobee.io/v1/users/sms?delete> | API Key |

* **요청 헤더**

| 이름           | 설명                             | 필수 |
| ------------ | ------------------------------ | -- |
| x-api-key    | x-api-key: ${x-api-key}        | O  |
| Content-Type | Content-Type: application/json | O  |

* **쿼리 파라미터**

| 이름     | 타입 | 설명         | 필수 | 비고                    |
| ------ | -- | ---------- | -- | --------------------- |
| delete | -  | 삭제 명령 파라미터 | O  | 파라미터 값(value)이 없어도 동작 |

* **요청 본문**

| 이름       | 타입     | 설명          | 필수 | 비고 |
| -------- | ------ | ----------- | -- | -- |
| memberId | String | 삭제할 회원의 아이디 | O  |    |

* **응답**

회원정보 '삭제' 응답은 성공/실패 시 모두 정상 응답하며 입력받은 회원 정보의 오류가 있으면 공통 에러코드에 정의한 에러 코드를 반환합니다.

***

## **예제**

### **요청**

```
curl -X POST "https://api.groobee.io/v1/users/sms" \ 
       -H "x-api-key: ${x-api-key}" \
       -H "Content-Type": application/json \
       -d '[
            {
              "memberId": "groobee",
            },
            {
              "memberId": "plateer",
           }
         ]'
```

### **응답(성공)**

```
  { 
        "httpStatus": 
            { "code": "200",
            "reasonPhrase": "OK"
        },
        "processCode": "0", 
        "processValue": [
        ]
}
```

### **응답(실패)**

* 데이터 오류가 있을 경우 실패 응답에 실패한 데이터 및 오류코드를 함께 응답합니다.

```
{
        "httpStatus": {
            "code": "503",
            "reasonPhrase": "Service Unavailable"
        },
        "processCode": "-1006",
        "processValue": ""
}
```
