v1 API 상세: 회원
마이페이지에서 회원 정보를 조회하고 수정할 때 써요. 관리자 계약인 고객 목록·고객 수정과 다른 scope를 사용해요.
GET/PUT /v1/users/:user_id는 user:user_detail·user:user_update 권한으로 상점의 아무 고객이나 읽고 고쳐요. 아래 API는 별도의 본인 프로필 scope를 요구해요. 고객 JWT를 보내면 그 회원으로 대상을 정하고, JWT 없이 가맹점 서버가 user_id·login_id를 지정할 수도 있어요. 이 경우 로그인한 본인인지 확인할 책임은 쇼핑몰 서버에 있어요.
조회
https://api.bootapi.com/v1/users/me[Basic Auth](/server/authentication) + `Bootpay-User-JWT` 또는 가맹점 서버의 `user_id`·`login_id`필요 권한: user:user_me_detail
JWT가 없으면 user_id(회원 ID 또는 external_uid)·login_id를 쿼리로 보내요. 둘 이상 보내면 같은 회원이어야 하고, JWT가 우선이에요. user_id·login_id 지정은 secretKey 인증에서만 허용해요.
{
"user": {
"user_id": "67e4b4425ec892162491d0ec",
"name": "홍길동",
"nickname": "길동",
"email": "user@example.com",
"phone": "01012345678",
"login_id": "user001",
"membership_type": 1,
"gender": 1,
"birth": "900101",
"created_at": "2026-09-01"
},
"editable_fields": ["name", "nickname", "gender", "birth"],
"profile_version": "3f2a1c8e9b4d7a06"
}json세션 조회와 달리 이름·전화·이메일을 평문으로 줘요. 수정 폼을 채우려면 마스킹된 값으로는 안 되기 때문이에요. 로그인 상태 표시만 필요하면 세션 조회를 쓰고, 마이페이지 수정 화면에서만 이 API를 불러요.
비밀번호 해시, 고객 JWT, 관리자 메모는 응답에 넣지 않아요. 이메일 가입 몰은 login_id 자리에 내부 ID가 들어가므로 null로 내려와요.
수정
https://api.bootapi.com/v1/users/me[Basic Auth](/server/authentication) + `Bootpay-User-JWT` 또는 가맹점 서버의 `user_id`·`login_id`필요 권한: user:user_me_update
JWT가 없으면 본문에 user_id(회원 ID 또는 external_uid)·login_id로 대상을 지정해요. JWT와 함께 보내면 같은 회원이어야 해요.
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
user_id |
String | 선택 | 회원 ID 또는 가맹점 회원 고유 ID(external_uid). 회원 지정용 |
login_id |
String | 선택 | 로그인 아이디로 회원을 지정. 로그인 아이디 변경용이 아니에요 |
name |
String | 선택 | 이름 (50자 이하, 빈 값 불가) |
nickname |
String | 선택 | 별명 (30자 이하). 빈 문자열을 보내면 비워요 |
gender |
String | 선택 | 성별 (-1·0·1·2) |
birth |
String | 선택 | 생년월일 앞 6자리 (YYMMDD) |
profile_version |
String | 선택 | 마지막으로 조회한 버전. 보내면 그 사이 변경 여부를 확인해요 |
보낸 필드만 반영하고 생략한 필드는 그대로 둬요. 수정 가능 필드를 하나도 보내지 않으면 아무것도 저장하지 않고 현재 프로필을 돌려줘요. 응답은 조회와 같은 형태예요.
이 API로 바꿀 수 없는 것
email·phone은 로그인·본인확인 수단이라 새 값의 소유를 먼저 증명해야 해요. 파라미터로 보내면 조용히 무시하지 않고 거절하면서 이유를 함께 돌려줘요.
{
"error_code": "API_PARAM_INVALID",
"payload": {
"rejected_params": ["email"],
"verification_required": ["email"]
}
}jsonlogin_pw·role·user_group_id·membership_type·status 같은 자격증명·권한 값도 거절해요. user_id·login_id는 회원 지정용으로 허용되지만 JWT와 다른 회원을 가리키면 403 USER_NOT_MATCH 예요.
동시 수정 (profile_version)
조회 응답의 profile_version을 그대로 PATCH에 실어 보내면, 그 사이 다른 탭이나 기기가 먼저 저장했을 때 409로 막아요. 뒤늦은 저장이 앞 저장을 덮어쓰는 것을 막는 장치예요.
{
"error_code": "USER_PROFILE_VERSION_CHANGED",
"payload": { "profile_version": "a71b0c3d5e8f2419" }
}json이 경우 다시 조회해서 최신 값을 보여준 뒤 저장해요. profile_version을 보내지 않으면 검사하지 않아요.
오류
| error_code | 상황 |
|---|---|
USER_SESSION_INVALID (420) |
JWT 누락·만료·로그아웃·탈퇴·다른 프로젝트 세션 |
USER_JWT_INVALID (419) |
서명 위조·변조·exp 경과 |
API_PARAM_INVALID |
허용하지 않는 키, 형식 위반(gender·birth) |
USER_NAME_BLANK (400) |
이름을 빈 값으로 수정 |
CUSTOMER_FIELD_TOO_LONG |
이름 50자·별명 30자 초과 |
USER_PROFILE_VERSION_CHANGED (10802) |
조회 이후 다른 곳에서 먼저 변경됨 |