하위 프로젝트의 결제 설정을 리셀러가 잠그거나 푼다. 잠기면 가맹점은 부트페이 관리자 화면에서 결제수단을 켜고 끄거나, 테스트 모드(샌드박스)를 바꾸거나, 연동 값(MID 등)을 저장할 수 없다.
핵심 요약
- 잠금은 프로젝트(
app_id) 하나에 걸린다. 그 프로젝트의 모든 결제수단에 적용된다.
- 가맹점은 이 잠금을 풀 수 없다. 가맹점 화면에는 "리셀러가 잠가 둔 결제 설정"이라고 보이고, 바꾸려면 리셀러에게 문의하라고 안내된다.
- 가맹점도 자기 화면에서 따로 잠글 수 있다(가맹점 잠금). 두 잠금은 서로 다른 값이다 — 이 API 는 리셀러 잠금만 바꾸고, 가맹점 잠금이 켜져 있어도 리셀러 잠금을 바꿀 수 있다.
- 리셀러 API 는 두 잠금과 상관없이 동작한다. PG 리소스 갱신(결제수단 추가·연동 값 갱신·켜기·끄기)은 리셀러 잠금이나 가맹점 잠금이 켜져 있어도 그대로 된다.
- 지금 잠금 상태는 결제수단 목록·프로젝트 조회 응답의
payment_setting_lock 으로도 볼 수 있다.
- 리셀러 관리자 콘솔의 하위 가맹점 상세 화면에서도 프로젝트마다 잠그고 풀 수 있다.
API 정보
PUThttps://api.bootpay.co.kr/v2/reseller/seller/app/:app_id/payment-lockBasic Auth (리셀러 계정 키)
요청 파라미터
| 파라미터 |
타입 |
필수 |
설명 |
app_id |
String |
필수 |
하위 프로젝트의 app_id (URL 경로) |
locked |
Boolean |
필수 |
true 잠금, false 풀기. 다른 값은 PARAMS_INVALID |
코드 예제
import fetch from 'node-fetch'
const RESELLER_AUTH = 'Basic ' + Buffer
.from(`${process.env.BOOTPAY_RESELLER_CLIENT_KEY}:${process.env.BOOTPAY_RESELLER_SECRET_KEY}`)
.toString('base64')
const appId = '65a1c0ab8f1b5b00367a0010'
const res = await fetch(`https://api.bootpay.co.kr/v2/reseller/seller/app/${appId}/payment-lock`, {
method: 'PUT',
headers: { 'Authorization': RESELLER_AUTH, 'Content-Type': 'application/json' },
body: JSON.stringify({ locked: true })
})
const { payment_setting_lock } = await res.json()
console.log(payment_setting_lock.reseller_locked) // truejavascript
import base64, os, requests
auth = 'Basic ' + base64.b64encode(
f"{os.environ['BOOTPAY_RESELLER_CLIENT_KEY']}:{os.environ['BOOTPAY_RESELLER_SECRET_KEY']}".encode()
).decode()
res = requests.put(
'https://api.bootpay.co.kr/v2/reseller/seller/app/65a1c0ab8f1b5b00367a0010/payment-lock',
headers={'Authorization': auth},
json={'locked': True}
)
print(res.json()['payment_setting_lock'])python
RESELLER_AUTH=$(printf '%s' "$BOOTPAY_RESELLER_CLIENT_KEY:$BOOTPAY_RESELLER_SECRET_KEY" | base64)
curl -X PUT "https://api.bootpay.co.kr/v2/reseller/seller/app/65a1c0ab8f1b5b00367a0010/payment-lock" \
-H "Authorization: Basic $RESELLER_AUTH" \
-H "Content-Type: application/json" \
-d '{"locked": true}'bash
응답
{
"app_id": "65a1c0ab8f1b5b00367a0010",
"payment_setting_lock": {
"seller_locked": false,
"seller_changed_at": null,
"reseller_locked": true,
"reseller_changed_at": "2026-10-29T15:00:00+09:00"
}
}json
| 필드 |
타입 |
필수 |
설명 |
app_id |
String |
필수 |
프로젝트 식별자 |
payment_setting_lock |
Object |
필수 |
결제 설정 잠금 상태 |
seller_locked |
Boolean |
필수 |
가맹점이 자기 화면에서 켠 잠금. 이 API 로는 바뀌지 않는다 |
seller_changed_at |
String |
선택 |
가맹점 잠금을 마지막으로 켜거나 끈 시각 |
reseller_locked |
Boolean |
필수 |
리셀러 잠금. 이 API 로 바꾼다 |
reseller_changed_at |
String |
선택 |
리셀러 잠금을 마지막으로 켜거나 끈 시각 |
잠기면 가맹점 화면에서 막히는 것
| 가맹점 관리자 화면 동작 |
리셀러 잠금 |
가맹점 잠금 |
| 결제수단 켜기·끄기(모두 켜기·끄기 포함) |
막힘 |
막힘 |
| 테스트 모드(샌드박스) 켜기·끄기 |
막힘 |
막힘 |
| 연동 값(MID·가맹점 키 등) 저장 |
막힘 |
막힘 |
| 잠금 풀기 |
리셀러만 |
가맹점 프로젝트 관리자(비밀번호 확인) |
막힌 동작을 가맹점이 시도하면 PM_RESELLER_SETTING_LOCKED(8220, "리셀러가 잠가 둔 결제 설정이에요. 바꾸려면 리셀러에게 문의해 주세요.")로 거절된다. 리셀러 API 와 부트페이 운영팀의 처리는 막지 않는다.
에러 코드
| 코드 |
메시지 |
대처 방법 |
API_ONLY_RESELLER (601) |
리셀러만 이용이 가능한 API 다 |
리셀러 권한 계정 키로 호출한다 |
API_SCOPE_INVALID |
허용되지 않은 API 권한의 키다 (HTTP 401) |
키에 reseller:app:write 리셀러 스코프 를 주거나 전체 권한(supervisor) 키로 호출한다 |
PARAMS_INVALID (-33) |
locked 는 true 또는 false 로 보내야 한다 (HTTP 400) |
locked 를 불리언으로 보낸다 |
APP_NOT_FOUND (200) |
프로젝트를 찾지 못했다 (HTTP 404) |
app_id 가 올바른지 확인한다 |
APP_NOT_PERMIT (201) |
본인 하위 프로젝트가 아니다 (HTTP 401) |
app_id 가 본인 리셀러 하위 셀러의 프로젝트인지 확인한다 |