Search

토스페이먼츠 호스팅/대행사용 인스턴트 온보딩 연동 문서(v2)

변경이력

버전
날짜
변경사항
V2.210802
2021-08-02
최초 작성
V2.211006
2021-10-06
가입 신청 URL 조회 확장
V2.211014
2021-10-14
3.10. 하단 정보 조회 (호스팅사 → 토스페이먼츠) 추가
V2.220228
2022-02-28
API 요청 포맷에 대한 설명 추가
V2.220303
2022-03-03
2.5. 접근 제한 추가
V2.220318
2022-03-18
3.8. 상점 삭제 (호스팅사 → 토스페이먼츠) 설명 최신화
V2.220408
2022-04-08
3.11. 카드 심사 Callback 추가
V2.220830
2022-08-30
3.2. 상점아이디 추가 부분 실제 사용하지 않아 목차에 미사용표기
V2.230315
2023-03-15
3.1.1 사용하지 않는 파라미터 삭제
V2.230526
2023-05-26
3.7.2 사용하지 않는 파라미터 삭제 (IN REVIEW)
V2.230905
2023-09-05
테스트용 유치업체코드 및 가이드 추가
V2.231013
2023-10-15
3.10 삭제 (사용하지 않는 api) , 3.12 간편결제 청약상태 조회 api 추가
V2.240423
2024-04-23
3.1 contractName 100자제한 →30자 제한으로 제한글자수 축소
V2.250109
2025-01-09
3.13 유치업체 코드를 사용한 대량 청약 정보 조회 (호스팅사 → 토스페이먼츠) 추가
v.2.250313
2025-03-13
3.1 신규 파라미터 추가 (신청 창을 종료할 경우에 대한 처리) 3.7 응답 파라미터 추가 (대표자명, 결제수단) 3.13 조회 조건에 기간 추가
v.2.251002
2025-10-02
3.7, 3.13에 결제수단 명 변경 및 추가
v.2.260126
2026-01-26
3.14 shopId 매핑 정보 변경 추가

1. 개요

인스턴트 온보딩 API는 고객이 (1) 호스팅사에서 PG 신청, (2) 토스페이먼츠 서류 접수 단계를 하나의 연결된 과정으로 진행할 수 있도록 토스페이먼츠 상점 및 상점아이디 등록, 전자계약 신청서 URL 조회, 상점 신청정보 조회 기능을 제공합니다.

2. API 공통사항

2.1. API 인증

호스팅사 → 토스페이먼츠 API 요청 시 인증을 위한 인증 토큰 및 인증 해시를 HTTP 헤더에 포함해야 합니다.
인증 토큰과 비밀키는 호스팅사 단위로 발급되며, 문의시 별도로 전달드립니다.

API Request Header

Name
Type
Description
Auth-Token
String
API 인증 토큰
Auth-Hash
String
Auth-Token, Client Secret, Shop ID를 SHA256으로 Hash
인증 토큰(Auth-Token)은 API를 호출하는 주체를 구분하기 위해 사용됩니다. HTTP 요청 헤더에 Auth-Token으로 항상 공개되어야 합니다.
비밀키(Client Secret)는 인증 해시(Auth-Hash)를 생성하는 값의 일부로 사용됩니다.
호스팅사가 생성한 인증 해시를 토스페이먼츠 서버에서 계산하여, 동일한 결과가 나오면 API 요청을 수락하고 요청된 기능을 수행합니다.
만약 비밀키가 유출된 경우 누구나 인증 해시를 생성할 수 있으므로 반드시 토스페이먼츠로 재발급 요청 부탁드립니다.
상점 고유 식별자(Shop ID)는 토스페이먼츠가 호스팅사의 상점을 식별하기 위해 사용됩니다. 호스팅사는 반드시 상점 별로 고유한 식별자를 부여하여야 합니다.
인증 해시(Auth-Hash)는 API 호출을 인증하기 위해 사용되는 값으로, 인증 토큰, 비밀키, 그리고 상점 고유 식별자를 SHA-256 알고리즘으로 해싱하여 생성합니다. Kotlin 기준 인증 해시 생성 샘플 코드는 다음과 같습니다.
샘플코드
fun makeHash(token: String, secret: String, shopId: String) = MessageDigest.getInstance("SHA-256").also { it.update(token.toByteArray()) it.update(secret.toByteArray()) it.update(shopId.toByteArray()) }.let { it.digest().joinToString("") { "%02x".format(it) } }
Kotlin
복사
public String makeHash (String authToken, String clientSecret, String shopId) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance( "SHA-256" ); md.update(authToken.getBytes()); md.update(clientSecret.getBytes()); md.update(shopId.getBytes()); return bytesToHex(md.digest()); } private String bytesToHex ( byte [] bytes) { StringBuilder builder = new StringBuilder(); for ( byte b : bytes) { builder.append(String.format( "%02x" , b)); } return builder.toString(); }
Java
복사

2.2. API 요청

모든 API 요청의 request body 는 application/json 포맷을 수용합니다. 따라서 요청 헤더에 아래의 값이 명시되어야 합니다.
Content-Type: application/json

2.3. API 응답

모든 API 응답은 아래와 같은 구조의 application/json 포맷으로 제공됩니다.
Name
Type
Description
success
Boolean
API 요청에 대한 성공여부
errorCode
String
요청 처리 과정에서 발생한 에러코드 (성공시 null)
message
String
요청 처리 과정에서 발생한 오류메시지 (성공시 null)
result
JSON
API 응답 별 객체 반환

2.4. Base URL

배포 스테이지 별 API 호출 URL은 아래와 같습니다.
Stage
URL
dev(청약 테스트 제공 X)
https://onboarding-api-dev.tosspayments.com
staging
https://onboarding-api-staging.tosspayments.com
live
https://onboarding-api.tosspayments.com

2.5. 접근제한

안전한 서비스 제공을 위해 제한된 환경에서만 통신이 가능합니다.
API 및 페이지에 접근할 호스트를 토스페이먼츠에 별도로 전달 부탁드립니다.

3. 인스턴트 온보딩

3.0. [공통] 테스트용 유치업체코드 정보

인스턴트 온보딩 도입시, 라이브 환경을 타겟으로 아래의 agencycode로 온보딩을 테스트해보실 수 있습니다.
테스트에 사용하는 사업자번호 혹은 신청자의 정보를 토스페이먼츠로 공유 부탁드립니다. (테스트 지원 및 구분 위함)
agencyCode
TestTest
header_ClientSecret
307a52ff0e29cb008a0ceae48ed48ac047a65a621681cbe4832e43fbbb23ce4b
header_authToken
4f18e5c2-de8b-454c-a871-b8f2111134c3

3.1. 상점 생성 (호스팅사 → 토스페이먼츠)

호스팅사에서 상점의 사업자정보를 상점 생성 API를 통해 토스페이먼츠로 전달하면, 토스페이먼츠에 해당 상점이 등록됩니다.
상점 생성 API는 최초 상점아이디(MID) 신청 시 사용되며, 동일한 사업자등록번호에 추가 상점아이디가 필요한 경우, 3.2. 상점아이디 추가 요청 API 를 호출합니다.

3.1.1. Request

POST /instant-onboarding/v2/shop/{shopId}
Name
Type
Required
Description
shopName
String
Y
상점이름 (예: “마켓컬리”)
shopContactName
String
Y
계약담당자 이름
shopContactEmail
String
Y
계약담당자 이메일
shopContactPhoneNumber
String
Y
계약담당자 휴대폰번호
shopBusinessRegistrationNumber
String
Y
상점 사업자등록번호 (비사업자일 경우 null)
shopUrl
String
Y
상점 URL
returnUrl
String
Y
토스페이먼츠 가입 신청 완료 시 이동할 URL
returnFallbackUrl
String
Y
토스페이먼츠 가입 신청 실패 시 이동할 URL
callbackUrl
String
N
상점 결제 연동 데이터를 전달받을 webhook URL
cardScreeningCallbackUrl
String
N
카드 심사 콜백을 받을 webhook URL
agencyCode
String
Y
유치업체코드
preferredMid
String
N
희망 상점아이디 (상점아이디 생성 시 참고되며, 실제 생성된 상점아이디는 이와 다를 수 있습니다) mid의 형식은 최소 2글자 이상 최대 14글자의 영문대소문자/숫자/특수문자(-,_만 허용) 가 혼용된 형태이다 . , 등의 문장부호는 활용할 수 없다.
enableFallbackUrlRedirectOnClose
Boolean
N
가입신청 URL을 통해 신청서 작성 중 창을 닫을 경우 fallback URL로 리턴할지 여부 결정 default : false
리퀘스트시 validation 규칙
Name
Type
규칙
shopName
String
최대 200자
shopContactName
String
최대 30자
shopContactEmail
String
최대 100자
shopContactPhoneNumber
String
최대 20자
shopBusinessRegistrationNumber
String
최대 20자
shopUrl
String
최대 200자
returnUrl
String
최대 255자
returnFallbackUrl
String
최대 255자
callbackUrl
String
최대 255자
cardScreeningCallbackUrl
String
최대 255자
agencyCode
String
최대 20자
preferredMid
String
최대 14자

3.1.2. Response

Name
Type
Description
shopId
String
상점 고유 식별자
businessRegistrationNumber
String
상점 사업자등록번호
mid
String
결제창 호출에 사용할 상점아이디(MID)
mertKey
String
결제창 호출에 사용할 머트키
apiKey
String
결제창 호출에 사용할 API KEY (신규 결제 SDK 사용 시)
clientKey
String
결제창 호출에 사용할 CLIENT KEY (신규 결제 SDK 사용 시)
3.2 / 3.3 은 미사용스펙으로 내용 삭제함

3.4. 가입 신청 URL 조회 (호스팅사 → 토스페이먼츠)

토스페이먼츠의 서비스 가입 신청 URL을 요청합니다. 신청 URL은 상점아이디 단위로 생성되며, 일정 시간 이후 만료됩니다. 재요청시 기존 URL은 만료처리되며 새로운 URL을 반환합니다.
가입 신청 URL은 가입 단계가 끝난 경우(계약 완료 또는 계약 취소가 진행된 경우) 조회할 수 없습니다.

3.4.1. Request

GET /instant-onboarding/v2/shop/{shopId}/mid/{mid}/open-onboarding-session
(1) Request Parameter
Name
Type
Required
Description
type
String
N
세션 타입 - INSTANT_ONBOARDING: PC 인스턴트 온보딩 (기본값) - MOBILE_INSTANT_ONBOARDING: 모바일 인스턴트 온보딩 * 모바일 인스턴트 온보딩의 경우 재진입이 쉽도록 무제한으로 세션이 유지됩니다. 단, 개인정보 보호를 위해 상호작용이 없는 경우 일정 시간 이후 작성한 내용은 초기화됩니다.
INSTANT_ONBOARDING 타입의 세션키는 1시간만 유지됩니다. INSTANT_ONBOARDING 타입으로 세션이 만료되어 고객이 온보딩 시 세션 만료에 대한 에러를 마주쳐 CS가 접수되는 경우 호스팅사에서는 해당 고객을 대상으로 본 api를 다시 요청하여 세션을 재발급해주셔야합니다.

3.4.2. Response

Name
Type
Description
applyUrl
String
토스페이먼츠 가입 신청 URL (특정 시간 이후 expire)

3.5. 가입 신청 완료 후 Callback (토스페이먼츠 → 호스팅사)

주의사항 본 API는 “미리오픈” 제품에서 호출할시만 유효합니다. (미제공시 사용 X) 계약완료 이후에만 정상결제가 가능한 일반 제품에서는 호출 시 에러 응답이 반환됩니다. ”미리오픈” 서비스에 대해서는 협의된 협력사에만 제공하므로 문의사항이 있을시 토스페이먼츠 담당자에게 문의해주세요. 문의처 - partners@tosspayment.com - 토스페이먼츠 고객센터 : 1544-7772
고객이 토스페이먼츠 가입 신청을 완료하면, 상점 등록 시 전달받은 callbackUrl로 결제 연동에 필요한 정보 및 가입비 결제 정보(가입비 적용 시)를 전달합니다.

3.5.1. Request

POST 상점 생성 혹은 상점아이디 추가 시 입력된 callbackUrl
(1) Request Header
Name
Type
Description
Auth-Hash
String
상점등록 요청 시 사용된 Auth-Hash
(2) Request Body
Name
Type
Description
shopId
String
상점 고유 식별자
businessRegistrationNumber
String
상점 사업자등록번호
merchantId
Number
사업자아이디
mid
String
결제창 호출에 사용할 상점아이디(MID)
mertKey
String
결제창 호출에 사용할 머트키
apiKey
String
결제창 호출에 사용할 API KEY (신규 결제 SDK 사용 시)
clientKey
String
결제창 호출에 사용할 CLIENT KEY (신규 결제 SDK 사용 시)
feePaidAt
String (ISO8601)
가입비 결제 시점 (예: “2021-07-28T20:10:33.298642”)

3.5.2. Response

요청을 받은 서버는 정상 수신시 HTTP Status 200 을 반환합니다. Response Body 는 필요하지 않습니다.

3.6. 결제 연동 정보 조회 (호스팅사 → 토스페이먼츠)

가입신청 완료 후 Callback을 정상적으로 수신하지 못하였을 경우 결제 연동 정보를 직접 조회할 수 있습니다.

3.6.1. Request

GET /instant-onboarding/v2/shop/{shopId}/credentials

3.6.2. Response

Name
Type
Description
credentials
JSON Array
결제 연동 정보
credentials[].shopId
String
상점 고유 식별자
credentials[].businessRegistrationNumber
String
상점 사업자등록번호
credentials[].mid
String
결제창 호출에 사용할 상점아이디(MID)
credentials[].mertKey
String
결제창 호출에 사용할 머트키
credentials[].apiKey
String
결제창 호출에 사용할 API KEY (신규 결제 SDK 사용 시)
credentials[].clientKey
String
결제창 호출에 사용할 CLIENT KEY (신규 결제 SDK 사용 시)

3.7. 청약 정보 조회 (호스팅사 → 토스페이먼츠)

토스페이먼츠 청약 신청 과정에서 고객으로부터 전달받은 업체 정보와 PG 계약 상태, 카드사 서브몰 심사 상태를 조회할 수 있습니다.

3.7.1. Request

GET /instant-onboarding/v2/shop/{shopId}

3.7.2. Response

Name
Type
Description
descriptions
JSON Array
상점 청약 정보
descriptions[].mid
String
상점아이디(MID)
descriptions[].companyName
String
상호명
descriptions[].companyType
String
사업자 종류“PRIVATE”: 개인사업자“NON_BUSINESS”: 비사업자 “CORPORATE”: 영리법인“NON_PROFIT_CORP”: 비영리법인“NON_PROFIT”: 임의단체/국가/지자체
descriptions[].businessRegistrationNumber
String
상점 사업자등록번호
descriptions[].corporateNumber
String
상점 법인등록번호
descriptions[].contractStatus
String
PG 계약 상태“READY”: 신청서 작성 전“IN_DRAFT”: 신청서 작성 중“WAIT_FOR_REVIEW”: 신청서 제출 완료“DONE”: 계약 완료“CANCELED”: 계약 취소“TERMINATED”: 계약 해지
descriptions[].submallAuditStatus
JSON
카드사 서브몰 심사 상태
descriptions[].modifying
Boolean
상점 청약 정보 수정 필요 여부 true인 경우 고객이 신청서 URL(토스페이먼츠 가입 URL 요청 API)로 진입할 수 있어야 합니다.
descriptions[].feeStatus
String
가입비 결제 상태결제완료: “PAID”미결제: “NOT_PAID”면제: “WAIVED”
descriptions[].feePaidAt
String (ISO8601)
가입비 결제 시점 (예: “2021-07-28T20:10:33.298642”)
descriptions[].dashboardUrl
String
상점관리자 진입 URL
descriptions[].representativeName
String
대표자 성명
descriptions[].paymentMethods[]
JSON Array
결제수단
descriptions[].paymentMethods[].name
String
결제수단 • CARD : 신용카드 • TRANSFER : 계좌이체 • VIRTUAL_ACCOUNT : 가상계좌 • PHONE : 휴대폰 • GIFT : 상품권
descriptions[].paymentMethods[].description
String
결제수단 설명
submallAuditStatus는 카드사 심사 상태를 JSON 형태로 전달하며, 세부 필드정보는 다음과 같습니다.
Name
Type
Description
Values
summary
String
전체 카드 심사상태
심사상태 구분“NONE”: 해당 없음 또는 심사 전“REQUESTED”: 심사 요청됨“IN_REVIEW”: 심사 중“DONE”: 완료“REJECTED”: 카드사 거부
bc
String
비씨카드
samsung
String
삼성카드
shinhan
String
신한카드
hana
String
하나카드
hyundai
String
현대카드
lotte
String
롯데카드
kookmin
String
국민카드
nonghyup
String
농협카드
woori
String
우리카드

3.8. 상점 삭제 (호스팅사 → 토스페이먼츠)

shopId 와 사업자번호를 결합한 단위로 청약/결제 정보를 삭제합니다. 단, 이미 계약이 완료된 상점아이디가 포함된 경우 상점 삭제는 중단됩니다.

3.8.1. Request

DELETE /instant-onboarding/v2/shop/{shopId}
Name
Type
Required
Description
businessRegistrationNumber
Query Parameter (String)
N
삭제 대상 사업자등록번호복수로 지정할 수 있으며, 비사업자의 경우 null 을 지정합니다.지정되지 않은 경우 해당 상점 고유 식별자에 속한 모든 정보를 삭제합니다.

3.8.2. Response

2.2.에 설명된 API 공통 응답과 동일합니다.

3.9. 상점아이디 삭제 (호스팅사 → 토스페이먼츠)

상점의 개별 상점아이디(MID)를 삭제합니다. 단, 이미 계약이 완료된 경우 삭제할 수 없습니다.

3.9.1. Request

DELETE /instant-onboarding/v2/shop/{shopId}/mid/{mid}

3.9.2. Response

2.2.에 설명된 API 공통 응답과 동일합니다.

3.11. 카드 심사 Callback (토스페이먼츠 → 호스팅사)

주의사항 테스트 상황에서는 카드사심사 콜백에서 정상 응답을 받기 어렵습니다. 테스트 상점은 실제 카드사심사를 진행하지 않고, 3.0에서 기술한 테스트용 유치업체코드에 대해서도 “테스트”목적이므로 실제 가맹점에 준하는 카드사심사를 진행하지 않기 때문입니다.
카드 심사 이벤트 발생시, 상점 등록 시 전달받은 cardScreeningCallbackUrl 을 호출합니다.
※ 모든 카드사 심사가 완료된 시점에 이벤트가 발생합니다.

3.11.1. Request

POST 상점 생성 혹은 상점아이디 추가 시 입력된 cardScreeningCallbackUrl
(1) Request Header
Name
Type
Description
Auth-Hash
String
상점등록 요청 시 사용된 Auth-Hash

3.11.2. Response

요청을 받은 서버는 정상 수신시 HTTP Status 200 을 반환합니다. Response Body 는 필요하지 않습니다.

3.12. 사용 간편결제 조회 (호스팅사 → 토스페이먼츠)

가맹점이 사용 중인 간편결제 목록을 조회합니다.

3.12.1. Request

GET /instant-onboarding/v2/shop/{shopId}/payment-methods/easy-pays
(1) Request Header
Name
Type
Description
Auth-Hash
String
상점등록 요청 시 사용된 Auth-Hash

3.12.2. Response

Name
Type
Description
[].mid
String
상점아이디(MID)
[].easyPays
JSON Array
사용 간편결제
[].easyPays[].code
String
사용 간편결제 코드
[].easyPays[].description
String
사용 간편결제 이름
(참고) 간편결제 코드 & 이름
코드
코드이름
SAMSUNG_PAY
삼성페이
SSG_PAY
SSG페이
PAYCO
페이코
L_PAY
L.pay
SMILE_PAY
스마일페이
KAKAO_PAY
카카오페이
NAVER_PAY
네이버페이
TOSS_PAY
토스페이
APPLE_PAY
애플페이
PIN_PAY
핀페이

3.13. 유치업체 코드를 사용한 대량 청약 정보 조회 (호스팅사 → 토스페이먼츠)

유치업체코드에 해당하는 상점의 토스페이먼츠 청약 신청 과정에서 고객으로부터 전달받은 업체 정보와 PG 계약 상태, 카드사 서브몰 심사 상태를 조회할 수 있습니다.

3.13.1. Request

GET /instant-onboarding/v2/shop/{shopId}/agencyCode/{agencyCode}
(1) Request Body
Name
Type
Description
page
Number
조회 요청할 page 번호 최초 요청 시에는 0으로 세팅
size
Number
한번에 조회할 데이터 건수 (MAX_SIZE : 500)
fromDate
Date
검색 시작일자(상점 생성일자 기준) : YYYY-MM-DD fromDate, toDate는 둘 다 존재해야 하며 없으면 기간 조건 없이 전체 검색이 됨
toDate
Date
검색 종료일자(상점 생성일자 기준) : YYYY-MM-DD

3.13.2. Response

Name
Type
Description
size
Number
content의 list 건수
totalCount
Number
전체 가맹점 건수
totalPages
Number
전체 페이지 건수
currentPage
Number
현재 페이지 번호
hasNext
Boolean
다음 페이지 존재 여부 true인 경우 Request에 page를 1 증가해서 보내고 false인 경우는 마지막 페이지 입니다.
content
JSON Array
상점 청약 정보
content[].mid
String
상점아이디(MID)
content[].companyName
String
상호명
content[].companyType
String
사업자 종류 • “PRIVATE”: 개인사업자 • “NON_BUSINESS”: 비사업자  • “CORPORATE”: 영리법인 • “NON_PROFIT_CORP”: 비영리법인 • “NON_PROFIT”: 임의단체/국가/지자체
content[].businessRegistrationNumber
String
상점 사업자등록번호
content[].corporateNumber
String
상점 법인등록번호
content[].contractStatus
String
PG 계약 상태 • “READY”: 신청서 작성 전 • “IN_DRAFT”: 신청서 작성 중 • “WAIT_FOR_REVIEW”: 신청서 제출 완료 • “DONE”: 계약 완료 • “CANCELED”: 계약 취소 • “TERMINATED”: 계약 해지
content[].submallAuditStatus
JSON
카드사 서브몰 심사 상태
content[].modifying
Boolean
상점 청약 정보 수정 필요 여부 true인 경우 고객이 신청서 URL(토스페이먼츠 가입 URL 요청 API)로 진입할 수 있어야 합니다.
content[].feeStatus
String
가입비 결제 상태 • 결제완료: “PAID” • 미결제: “NOT_PAID” • 면제: “WAIVED”
content[].feePaidAt
String (ISO8601)
가입비 결제 시점 (예: “2021-07-28T20:10:33.298642”)
content[].dashboardUrl
String
상점관리자 진입 URL
content[].representativeName
String
대표자 성명
content[].paymentMethods[]
JSON Array
결제수단
content[].paymentMethods[].name
String
결제수단 • CARD : 신용카드 • TRANSFER : 계좌이체 • VIRTUAL_ACCOUNT : 가상계좌 • PHONE : 휴대폰 • GIFT : 상품권
content[].paymentMethods[].description
String
결제수단 설명
submallAuditStatus는 카드사 심사 상태를 JSON 형태로 전달하며, 세부 필드정보는 다음과 같습니다.
Name
Type
Description
Values
summary
String
전체 카드 심사상태
심사상태 구분• “NONE”: 해당 없음 또는 심사 전• “REQUESTED”: 심사 요청됨• “IN_REVIEW”: 심사 중• “DONE”: 완료• “REJECTED”: 카드사 거부
bc
String
비씨카드
samsung
String
삼성카드
shinhan
String
신한카드
hana
String
하나카드
hyundai
String
현대카드
lotte
String
롯데카드
kookmin
String
국민카드
nonghyup
String
농협카드
woori
String
우리카드

3.14. shopId 매핑정보 변경

토스페이먼츠에서 발급한 상점아이디(mid) 의 매핑된 shopId 를 변경합니다.

3.14.1. Request

PUT /instant-onboarding/v2/shop/{shopId}/mapping
(1) Request Body
Name
Type
Description
mid
String
기존 mid
shopId
String
변경할 shopId

3.14.2. Response

요청을 받은 서버는 정상 수신시 HTTP Status 200 을 반환합니다. Response Body 는 필요하지 않습니다.