고객

본인 프로필

관리자 고객 API 없이 마이페이지를 만들어요.

v1 API 상세: 회원

마이페이지에서 회원 정보를 조회하고 수정할 때 써요. 관리자 계약인 고객 목록·고객 수정과 다른 scope를 사용해요.

왜 따로 있나요

GET/PUT /v1/users/:user_id는 user:user_detail·user:user_update 권한으로 상점의 아무 고객이나 읽고 고쳐요. 아래 API는 별도의 본인 프로필 scope를 요구해요. 고객 JWT를 보내면 그 회원으로 대상을 정하고, JWT 없이 가맹점 서버가 user_id·login_id를 지정할 수도 있어요. 이 경우 로그인한 본인인지 확인할 책임은 쇼핑몰 서버에 있어요.

조회

GEThttps://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로 내려와요.

수정

PATCHhttps://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"]
  }
}json

login_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) 조회 이후 다른 곳에서 먼저 변경됨