마켓플레이스

팀·프로젝트 초대

셀러 담당자에게 부트페이 콘솔 권한을 코드로 부여한다.

리셀러가 셀러의 부트페이 콘솔 권한을 코드로 발급한다. 셀러 전체(provider) 에 접근시키거나, 특정 프로젝트(app) 에만 권한을 묶는 두 가지 모드가 있다. 메일이 발송되고, 수신자가 메일 안의 링크로 초대를 승인해야 권한이 부여된다.

핵심 요약

  • invite_type 으로 팀(provider) / 프로젝트(app) 두 종류를 구분한다.
  • 호출 시점에 권한이 바로 붙지는 않는다. 승인 대기(READY) 상태의 초대가 만들어지고 메일이 발송될 뿐이다. 수신자가 링크로 승인해야 실제 권한이 생긴다.
  • 초대 링크는 생성 시점부터 24시간 뒤 만료된다. 만료되면 다시 초대해야 한다.
  • 미승인 초대가 같은 이메일·가맹점 조합으로 10건을 넘고, 그중 11번째로 최근인 초대가 만들어진 지 1일이 지났으면 INVITE_LIMIT_OVER 로 막힌다. 시간이 지나도 자동으로 풀리지 않는다.
  • 응답 본문은 비어 있다. HTTP 200 이면 초대가 생성되고 메일이 발송된 상태다.

두 가지 초대 모드

invite_type 의미 필요한 식별자
또는 provider 셀러 전체(provider) 권한을 부여한다 provider_id
프로젝트 또는 app 특정 프로젝트(app) 권한만 부여한다 app_id

한국어 키와 영문 키 모두 받는다. 본문에서는 영문 키를 권장한다.

API 정보

POSThttps://api.bootpay.co.kr/v2/reseller/inviteBasic Auth (리셀러 계정 키)

요청 파라미터

파라미터 타입 필수 설명
invite_type String 필수 provider(셀러 전체) 또는 app(특정 프로젝트). 한국어 /프로젝트 도 허용
email String 필수 초대받을 사람의 이메일
level String 필수 권한 레벨. 아래 권한 레벨 표 참고
provider_id String 선택 invite_typeprovider 일 때 필수
app_id String 선택 invite_typeapp 일 때 필수

권한 레벨

levelinvite_type 에 따라 의미가 달라진다.

invite_type=app (프로젝트 권한)

level 의미
admin 또는 관리자 (10) 프로젝트의 모든 설정을 수정할 수 있다
manager 또는 매니저 (9) 결제 조회·취소, 결제 설정, 프로젝트 정보 설정 등
batch_manager 또는 배치매니저 (2) 상품 업로드 권한. 콘솔 권한 선택 목록에는 노출되지 않지만 API 로는 지정할 수 있다
member 또는 팀원 (1) 결제 내역 조회 권한만 부여된다

invite_type=provider (팀 권한)

level 의미
admin 또는 관리자 (10) 셀러 그룹의 정보·권한을 관리한다
user 또는 사용자 (1) 셀러의 모든 프로젝트에 접속 가능. 프로젝트별로 별도 권한 부여 가능
none 또는 무권한 (0) 그룹 권한 없음. 초대받은 개별 프로젝트에만 접속하는 접속자

코드 예제

셀러 전체 권한 부여

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 res = await fetch('https://api.bootpay.co.kr/v2/reseller/invite', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': RESELLER_AUTH
    },
    body: JSON.stringify({
        invite_type: 'provider',
        provider_id: '65a1c0aa8f1b5b00367a0001',
        email:       'owner@hanip.shop',
        level:       'admin'
    })
})
console.log(res.status) // 200javascript

특정 프로젝트만 권한 부여

const res = await fetch('https://api.bootpay.co.kr/v2/reseller/invite', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': RESELLER_AUTH
    },
    body: JSON.stringify({
        invite_type: 'app',
        app_id:      '65a1c0ab8f1b5b00367a0010',
        email:       'cs@hanip.shop',
        level:       'member'   // CS 담당자는 조회 권한만
    })
})javascript

응답

성공 시 응답 본문은 비어 있고, HTTP 200 으로 떨어진다. 초대 메일은 응답 직후 비동기로 발송된다.

동작 규칙

가입 여부와 관계없이 동작은 같다. 승인 대기(READY) 상태의 초대가 만들어지고 메일이 나간다. 권한은 수신자가 링크로 승인한 뒤에 부여된다.

상황 결과
이메일 수신자가 부트페이 미가입자 초대가 생성되고 가입 안내 메일이 발송된다. 가입 + 초대 승인 시 권한 부여
이미 가입한 사용자 초대가 생성되고 메일이 발송된다. 여기에 더해 콘솔 알림이 추가된다. 승인해야 권한 부여
초대 링크를 24시간 안에 열지 않음 초대가 만료된다. 다시 초대해야 한다
이미 해당 프로젝트(또는 셀러) 권한을 갖고 있는 이메일 INVITE_ALREADY 가 떨어진다
미승인 초대가 같은 이메일·가맹점으로 10건 초과, 그중 11번째 최근 초대가 1일 경과 INVITE_LIMIT_OVER 가 떨어진다
INVITE_ALREADY 와 중복 초대

INVITE_ALREADY 는 수신자가 이미 권한을 보유한 경우에만 발생한다. 아직 승인하지 않은 초대가 남아 있는 상태에서 같은 이메일로 다시 초대하는 것은 막히지 않고, 초대가 하나 더 생성된다. 이 미승인 초대가 쌓여 10건을 넘으면 INVITE_LIMIT_OVER 조건으로 이어진다.

에러 코드

코드 메시지 대처 방법
API_ONLY_RESELLER 리셀러만 이용이 가능한 API 다 리셀러 권한 계정 키로 호출한다
INVITE_TYPE_INVALID invite_type 이 유효하지 않다 provider 또는 app 으로 지정한다
APP_OWNER_MEMBER_NOT_FOUND 초대 주체가 될 멤버를 찾지 못했다 리셀러 기본 프로젝트가 정상인지 확인한다
APP_NOT_FOUND (invite_type=app) 본인 하위 프로젝트가 아니다 app_id 와 소속 셀러를 확인한다
PROVIDER_NOT_FOUND (300) (invite_type=provider) provider_id 가 본인 하위 셀러가 아니다 provider_id 가 본인 리셀러 소속인지 확인한다
INVITE_PROJECT_LEVEL_INVALID (468) (invite_type=app 전용) level 값이 유효하지 않다 admin / manager / batch_manager / member 중 선택
INVITE_PROVIDER_LEVEL_INVALID (476) (invite_type=provider 전용) level 값이 유효하지 않다 admin / user / none 중 선택
INVITE_ALREADY 이미 해당 프로젝트·셀러 권한을 보유한 사용자다 콘솔에서 멤버 목록을 먼저 확인한다
INVITE_LIMIT_OVER 미승인 초대가 같은 이메일·가맹점으로 10건을 넘었다 콘솔에서 미승인 초대를 정리하거나, 수신자가 기존 초대를 승인하도록 안내한다

다음 단계