PortOne REST API - V2
API 결제, 결제 정보 조회, 결제 취소 등의 기능을 제공하는 REST API입니다.
V2 API hostname: api.portone.io
요청 및 응답 형식
요청과 응답의 본문은 JSON 형식입니다.
API 매개 변수 중 URL 경로에 들어가는 문자열 값이 있는 경우, URL 경로에 들어갈 수 없는 문자열은 이스케이프하여야 합니다. 자바스크립트의 encodeURIComponent
함수 등을 사용할 수 있습니다.
인증 방식
V2 API를 사용하기 위해서는 V2 API Secret이 필요하며, 포트원 관리자콘솔 내 결제연동 탭에서 발급받으실 수 있습니다.
인증 관련 API를 제외한 모든 API는 HTTP Authorization
헤더로 아래 형식의 인증 정보를 전달해주셔야 합니다.
Authorization: PortOne MY_API_SECRET
GET 요청 시 Body 대신 Query 사용하기
GET 요청 시에 Body를 전달해야 하는 경우, Body 대신 Query를 사용할 수 있습니다.
이 경우, Body 객체를 requestBody
Query 필드에 넣어주시면 됩니다.
하위호환성
포트원이 제공하는 모든 Stable API에 대해 아래와 같은 하위호환성이 보장됩니다.
-
현재 사용 가능한 입력 형식은 앞으로도 사용할 수 있습니다.
-
입력 형식 내 필드 정의가 삭제되지 않습니다.
-
필수 입력 정보가 추가되거나, 선택 입력 정보가 필수로 변경되지 않습니다.
- 오로지 선택 입력 정보만 추가될 수 있습니다.
-
하위 필드의 형식(타입) 또한 위 규칙을 지키며 변경됩니다.
-
enum 타입의 값이 삭제되지 않습니다.
-
-
출력 형식이 확장될 수 있지만, 축소되지 않습니다.
-
출력 형식 내 필드 정의가 삭제되지 않습니다.
-
사용 중인 필수 출력 정보가 선택사항으로 변경되거나 출력 시 누락되지 않습니다.
- 이미 존재하는 용례 내에서는 필수 출력 정보가 언제나 유지됩니다.
- 단, 기능이 추가 및 확장되는 등 새로운 용례로 사용될 때의 출력 정보에 한하여 선택사항으로 변경될 수 있습니다.
-
하위 필드의 형식(타입) 또한 위 규칙을 지키며 변경됩니다.
-
단, 새로운 필드 또는 enum 값, oneOf 케이스가 추가될 수 있습니다.
- 알지 못하는 필드 및 값이 주어지더라도 crash가 발생하지 않도록 유의하여 개발해주세요.
-
UNSTABLE
이 표기된 일부 API의 경우, 위 하위호환성 정책과 무관하게 변경 및 지원 종료될 수 있으니 이용에 유의하세요.
인증 관련 API
결제 관련 API
목차
결제 정보 사전 등록
Request
Path
결제 건 아이디
Body
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
통화 단위
Response
200 Ok
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
409 Error
type
이(가)"ALREADY_PAID"
일 때의 타입
결제가 이미 완료된 경우
결제 단건 조회
Request
Path
조회할 결제 아이디
Query
상점 아이디
Response
200 Ok
status
이(가)"CANCELLED"
일 때의 타입
결제 취소 상태 건
status
이(가)"FAILED"
일 때의 타입
결제 실패 상태 건
status
이(가)"PAID"
일 때의 타입
결제 완료 상태 건
status
이(가)"PARTIAL_CANCELLED"
일 때의 타입
결제 부분 취소 상태 건
status
이(가)"PAY_PENDING"
일 때의 타입
결제 완료 대기 상태 건
status
이(가)"READY"
일 때의 타입
준비 상태 건
status
이(가)"VIRTUAL_ACCOUNT_ISSUED"
일 때의 타입
가상계좌 발급 완료 상태 건
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"PAYMENT_NOT_FOUND"
일 때의 타입
결제 건이 존재하지 않는 경우
결제 시도 내역 조회unstable
Request
Path
조회할 결제 아이디
Query
상점 아이디
Response
200 Ok
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"PAYMENT_NOT_FOUND"
일 때의 타입
결제 건이 존재하지 않는 경우
결제 다건 조회(페이지 기반)
Request
body를 쿼리 문자열에 포함시켜 보낼 수 있습니다. 자세히 보기
Body
다건 조회 API 에 사용되는 페이지 입력 정보
결제 건 다건 조회를 위한 입력 정보
Response
200 Ok
반환된 페이지 결과 정보
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
결제 대용량 다건 조회(커서 기반)unstable
Request
body를 쿼리 문자열에 포함시켜 보낼 수 있습니다. 자세히 보기
Body
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
값을 입력하지 않으면 end의 90일 전으로 설정됩니다.
값을 입력하지 않으면 현재 시점으로 설정됩니다.
결제 건 리스트 중 어디서부터 읽어야 할지 가리키는 값입니다. 최초 요청일 경우 값을 입력하지 마시되, 두번째 요청 부터는 이전 요청 응답값의 cursor를 입력해주시면 됩니다.
미입력 시 기본값은 10 이며 최대 1000까지 허용
Response
200 Ok
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
결제 취소
Request
Path
결제 건 아이디
Body
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
값을 입력하지 않으면 전액 취소됩니다.
값을 입력하지 않으면 전액 과세 취소됩니다.
값을 입력하지 않으면 자동 계산됩니다.
본 취소 요청 이전의 취소 가능 잔액으로써, 값을 입력하면 잔액이 일치하는 경우에만 취소가 진행됩니다. 값을 입력하지 않으면 별도의 검증 처리를 수행하지 않습니다.
고객 정보 입력 형식
Response
200 Ok
결제 취소 내역
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
type
이(가)"NEGATIVE_PROMOTION_ADJUSTED_CANCEL_AMOUNT"
일 때의 타입
프로모션에 의해 조정된 취소 금액이 음수인 경우
type
이(가)"PROMOTION_DISCOUNT_RETAIN_OPTION_SHOULD_NOT_BE_CHANGED"
일 때의 타입
프로모션 혜택 유지 옵션을 이전 부분 취소와 다른 것으로 입력한 경우
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"PAYMENT_NOT_FOUND"
일 때의 타입
결제 건이 존재하지 않는 경우
409 Error
type
이(가)"CANCELLABLE_AMOUNT_CONSISTENCY_BROKEN"
일 때의 타입
취소 가능 잔액 검증에 실패한 경우
type
이(가)"CANCEL_AMOUNT_EXCEEDS_CANCELLABLE_AMOUNT"
일 때의 타입
결제 취소 금액이 취소 가능 금액을 초과한 경우
type
이(가)"CANCEL_TAX_AMOUNT_EXCEEDS_CANCELLABLE_TAX_AMOUNT"
일 때의 타입
취소 과세 금액이 취소 가능한 과세 금액을 초과한 경우
type
이(가)"CANCEL_TAX_FREE_AMOUNT_EXCEEDS_CANCELLABLE_TAX_FREE_AMOUNT"
일 때의 타입
취소 면세 금액이 취소 가능한 면세 금액을 초과한 경우
type
이(가)"PAYMENT_ALREADY_CANCELLED"
일 때의 타입
결제가 이미 취소된 경우
type
이(가)"PAYMENT_NOT_PAID"
일 때의 타입
결제가 완료되지 않은 경우
type
이(가)"SUM_OF_PARTS_EXCEEDS_CANCEL_AMOUNT"
일 때의 타입
면세 금액 등 하위 항목들의 합이 전체 취소 금액을 초과한 경우
502 Error
type
이(가)"PG_PROVIDER"
일 때의 타입
PG사에서 오류를 전달한 경우
빌링키 결제
Request
Path
결제 건 아이디
Body
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
다수 채널에 대해 발급된 빌링키에 대해, 결제 채널을 특정하고 싶을 때 명시
고객 정보 입력 정보
금액 세부 입력 정보
통화 단위
현금영수증 입력 정보
국가
결제 승인/실패 시 요청을 받을 웹훅 주소입니다. 상점에 설정되어 있는 값보다 우선적으로 적용됩니다. 입력된 값이 없을 경우에는 빈 배열로 해석됩니다.
입력된 값이 없을 경우에는 빈 배열로 해석됩니다.
상품 유형
분리 형식 주소 입력 정보
Response
200 Ok
빌링키 결제 완료된 결제 건 요약 정보
400 Error
type
이(가)"DISCOUNT_AMOUNT_EXCEEDS_TOTAL_AMOUNT"
일 때의 타입
프로모션 할인 금액이 결제 시도 금액 이상인 경우
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
type
이(가)"MAX_TRANSACTION_COUNT_REACHED"
일 때의 타입
결제 혹은 본인인증 시도 횟수가 최대에 도달한 경우
type
이(가)"PROMOTION_PAY_METHOD_DOES_NOT_MATCH"
일 때의 타입
결제수단이 프로모션에 지정된 것과 일치하지 않는 경우
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"BILLING_KEY_NOT_FOUND"
일 때의 타입
빌링키가 존재하지 않는 경우
type
이(가)"CHANNEL_NOT_FOUND"
일 때의 타입
요청된 채널이 존재하지 않는 경우
409 Error
type
이(가)"ALREADY_PAID"
일 때의 타입
결제가 이미 완료된 경우
type
이(가)"BILLING_KEY_ALREADY_DELETED"
일 때의 타입
빌링키가 이미 삭제된 경우
type
이(가)"PAYMENT_SCHEDULE_ALREADY_EXISTS"
일 때의 타입
결제 예약건이 이미 존재하는 경우
type
이(가)"SUM_OF_PARTS_EXCEEDS_TOTAL_AMOUNT"
일 때의 타입
면세 금액 등 하위 항목들의 합이 전체 결제 금액을 초과한 경우
502 Error
type
이(가)"PG_PROVIDER"
일 때의 타입
PG사에서 오류를 전달한 경우
수기 결제
Request
Path
결제 건 아이디
Body
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
채널 키 또는 채널 그룹 ID 필수
채널 키 또는 채널 그룹 ID 필수
하나의 필드만 입력합니다.
기본값은 false 입니다.
기본값은 false 입니다.
고객 정보 입력 정보
금액 세부 입력 정보
통화 단위
국가
결제 승인/실패 시 요청을 받을 웹훅 주소입니다. 상점에 설정되어 있는 값보다 우선적으로 적용됩니다. 입력된 값이 없을 경우에는 빈 배열로 해석됩니다.
입력된 값이 없을 경우에는 빈 배열로 해석됩니다.
상품 유형
분리 형식 주소 입력 정보
Response
200 Ok
수기 결제가 완료된 결제 건 요약 정보
400 Error
type
이(가)"DISCOUNT_AMOUNT_EXCEEDS_TOTAL_AMOUNT"
일 때의 타입
프로모션 할인 금액이 결제 시도 금액 이상인 경우
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
type
이(가)"MAX_TRANSACTION_COUNT_REACHED"
일 때의 타입
결제 혹은 본인인증 시도 횟수가 최대에 도달한 경우
type
이(가)"PROMOTION_PAY_METHOD_DOES_NOT_MATCH"
일 때의 타입
결제수단이 프로모션에 지정된 것과 일치하지 않는 경우
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"CHANNEL_NOT_FOUND"
일 때의 타입
요청된 채널이 존재하지 않는 경우
409 Error
type
이(가)"ALREADY_PAID"
일 때의 타입
결제가 이미 완료된 경우
type
이(가)"PAYMENT_SCHEDULE_ALREADY_EXISTS"
일 때의 타입
결제 예약건이 이미 존재하는 경우
type
이(가)"SUM_OF_PARTS_EXCEEDS_TOTAL_AMOUNT"
일 때의 타입
면세 금액 등 하위 항목들의 합이 전체 결제 금액을 초과한 경우
502 Error
type
이(가)"PG_PROVIDER"
일 때의 타입
PG사에서 오류를 전달한 경우
가상계좌 말소
Request
Path
결제 건 아이디
Query
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
Response
200 Ok
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"PAYMENT_NOT_FOUND"
일 때의 타입
결제 건이 존재하지 않는 경우
409 Error
type
이(가)"PAYMENT_NOT_WAITING_FOR_DEPOSIT"
일 때의 타입
결제 건이 입금 대기 상태가 아닌 경우
502 Error
type
이(가)"PG_PROVIDER"
일 때의 타입
PG사에서 오류를 전달한 경우
에스크로 배송 정보 등록
Request
Path
결제 건 아이디
Body
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
에스크로 발송자 정보
에스크로 수취인 정보
배송정보
에스크로 구매 확정 시 이메일로 알림을 보낼지 여부입니다.
Response
200 Ok
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"PAYMENT_NOT_FOUND"
일 때의 타입
결제 건이 존재하지 않는 경우
409 Error
type
이(가)"PAYMENT_NOT_PAID"
일 때의 타입
결제가 완료되지 않은 경우
502 Error
type
이(가)"PG_PROVIDER"
일 때의 타입
PG사에서 오류를 전달한 경우
에스크로 배송 정보 수정
Request
Path
결제 건 아이디
Body
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
에스크로 발송자 정보
에스크로 수취인 정보
배송정보
에스크로 구매 확정 시 이메일로 알림을 보낼지 여부입니다.
Response
200 Ok
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"PAYMENT_NOT_FOUND"
일 때의 타입
결제 건이 존재하지 않는 경우
409 Error
type
이(가)"PAYMENT_NOT_PAID"
일 때의 타입
결제가 완료되지 않은 경우
502 Error
type
이(가)"PG_PROVIDER"
일 때의 타입
PG사에서 오류를 전달한 경우
에스크로 구매 확정
Request
Path
결제 건 아이디
Body
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
구매확정요청 주체가 고객사 관리자인지 구매자인지 구분하기 위한 필드입니다. 네이버페이 전용 파라미터이며, 구분이 모호한 경우 고객사 관리자(true)로 입력합니다.
Response
200 Ok
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"PAYMENT_NOT_FOUND"
일 때의 타입
결제 건이 존재하지 않는 경우
409 Error
type
이(가)"PAYMENT_NOT_PAID"
일 때의 타입
결제가 완료되지 않은 경우
502 Error
type
이(가)"PG_PROVIDER"
일 때의 타입
PG사에서 오류를 전달한 경우
웹훅 재발송
Request
Path
결제 건 아이디
Body
접근 권한이 있는 상점 아이디만 입력 가능하며, 미입력시 토큰에 담긴 상점 아이디를 사용합니다.
입력하지 않으면 결제 건의 가장 최근 웹훅 아이디가 기본 적용됩니다
Response
200 Ok
성공 웹훅 내역
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
type
이(가)"MAX_WEBHOOK_RETRY_COUNT_REACHED"
일 때의 타입
동일한 webhook id에 대한 수동 재시도 횟수가 최대에 도달한 경우
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"PAYMENT_NOT_FOUND"
일 때의 타입
결제 건이 존재하지 않는 경우
type
이(가)"WEBHOOK_NOT_FOUND"
일 때의 타입
웹훅 내역이 존재하지 않는 경우
영수증 내 하위 상점 거래 등록
Request
Path
등록할 하위 상점 결제 건 아이디
Body
Response
200 Ok
400 Error
type
이(가)"INVALID_REQUEST"
일 때의 타입
허가되지 않은 값, 올바르지 않은 형식의 요청 등이 모두 해당됩니다.
401 Error
type
이(가)"UNAUTHORIZED"
일 때의 타입
인증 정보가 올바르지 않은 경우
403 Error
type
이(가)"FORBIDDEN"
일 때의 타입
요청이 거절된 경우
404 Error
type
이(가)"PAYMENT_NOT_FOUND"
일 때의 타입
결제 건이 존재하지 않는 경우
409 Error
type
이(가)"PAYMENT_NOT_PAID"
일 때의 타입
결제가 완료되지 않은 경우
502 Error
type
이(가)"PG_PROVIDER"
일 때의 타입
PG사에서 오류를 전달한 경우