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
목차
결제 예약 관련 API
빌링키 관련 API
현금 영수증 관련 API
프로모션 관련 API
본인인증 관련 API
파트너 정산 관련 API
정책 관련 API
목차
할인 분담 정책 다건 조회
Response
200
성공 응답으로 조회된 할인 분담 정책 리스트와 페이지 정보가 반환됩니다.
파트너가 분담할 할인금액의 비율을 의미하는 밀리 퍼센트 단위 (10^-5) 의 음이 아닌 정수이며, 파트너가 부담할 금액은 할인금액 * partnerShareRate * 10^5
로 책정합니다.
반환된 페이지 결과 정보
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
할인 분담 정책 생성
Request
Body
명시하지 않는 경우 포트원이 임의의 아이디를 발급해드립니다.
Response
200
성공 응답으로 생성된 할인 분담 정책이 반환됩니다.
할인 분담은 고객사의 주문건에 쿠폰 및 포인트와 같은 할인금액이 적용될 때, 파트너 정산 시 할인금액에 대한 분담 정책을 가지는 객체입니다. 할인 유형에 대한 아이디와 메모, 그리고 파트너 분담율을 가집니다.
파트너가 분담할 할인금액의 비율을 의미하는 밀리 퍼센트 단위 (10^-5) 의 음이 아닌 정수이며, 파트너가 부담할 금액은 할인금액 * partnerShareRate * 10^5
로 책정합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
409
PlatformDiscountSharePolicyAlreadyExistsError
할인 분담 정책 조회
Request
Path
조회할 할인 분담 정책 아이디
Response
200
성공 응답으로 할인 분담 정책을 반환합니다.
파트너가 분담할 할인금액의 비율을 의미하는 밀리 퍼센트 단위 (10^-5) 의 음이 아닌 정수이며, 파트너가 부담할 금액은 할인금액 * partnerShareRate * 10^5
로 책정합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformDiscountSharePolicyNotFoundError
할인 분담 정책 수정
Request
Path
업데이트할 할인 분담 정책 아이디
Body
파트너가 분담할 할인금액의 비율을 의미하는 밀리 퍼센트 단위 (10^-5) 의 음이 아닌 정수이며, 파트너가 부담할 금액은 할인금액 * partnerShareRate * 10^5
로 책정합니다.
Response
200
성공 응답으로 업데이트된 할인 분담 정책을 반환합니다.
할인 분담은 고객사의 주문건에 쿠폰 및 포인트와 같은 할인금액이 적용될 때, 파트너 정산 시 할인금액에 대한 분담 정책을 가지는 객체입니다. 할인 유형에 대한 아이디와 메모, 그리고 파트너 분담율을 가집니다.
파트너가 분담할 할인금액의 비율을 의미하는 밀리 퍼센트 단위 (10^-5) 의 음이 아닌 정수이며, 파트너가 부담할 금액은 할인금액 * partnerShareRate * 10^5
로 책정합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformDiscountSharePolicyNotFoundError
409
PlatformArchivedDiscountSharePolicyError
: 보관된 할인 분담 정책을 업데이트하려고 하는 경우
할인 분담 정책 보관
Request
Path
할인 분담 아이디
Response
200
성공 응답으로 보관된 할인 분담 객체를 반환합니다.
할인 분담은 고객사의 주문건에 쿠폰 및 포인트와 같은 할인금액이 적용될 때, 파트너 정산 시 할인금액에 대한 분담 정책을 가지는 객체입니다. 할인 유형에 대한 아이디와 메모, 그리고 파트너 분담율을 가집니다.
파트너가 분담할 할인금액의 비율을 의미하는 밀리 퍼센트 단위 (10^-5) 의 음이 아닌 정수이며, 파트너가 부담할 금액은 할인금액 * partnerShareRate * 10^5
로 책정합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformDiscountSharePolicyNotFoundError
409
PlatformCannotArchiveScheduledDiscountSharePolicyError
: 예약된 업데이트가 있는 할인 분담 정책을 보관하려고 하는 경우
할인 분담 정책 복원
Request
Path
할인 분담 아이디
Response
200
성공 응답으로 복원된 할인 분담 객체를 반환합니다.
할인 분담은 고객사의 주문건에 쿠폰 및 포인트와 같은 할인금액이 적용될 때, 파트너 정산 시 할인금액에 대한 분담 정책을 가지는 객체입니다. 할인 유형에 대한 아이디와 메모, 그리고 파트너 분담율을 가집니다.
파트너가 분담할 할인금액의 비율을 의미하는 밀리 퍼센트 단위 (10^-5) 의 음이 아닌 정수이며, 파트너가 부담할 금액은 할인금액 * partnerShareRate * 10^5
로 책정합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformDiscountSharePolicyNotFoundError
추가 수수료 정책 다건 조회
Response
200
성공 응답으로 조회된 추가 수수료 정책 리스트와 페이지 정보를 반환합니다.
플랫폼 중개수수료 정보
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
반환된 페이지 결과 정보
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
추가 수수료 정책 생성
Request
Body
명시하지 않으면 id 가 임의로 생성됩니다.
정률 수수료를 설정하고 싶은 경우 fixedRate
필드에, 정액 수수료를 설정하고 싶은 경우 fixedAmount
필드에 값을 명시해 요청합니다.
두 필드 모두 값이 들어있지 않은 경우 요청이 거절됩니다.
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
PARTNER
파트너가 부담하는 경우MERCHANT
고객사가 부담하는 경우Response
200
성공 응답
추가 수수료 정책는 고객사의 주문건에 대한 중개수수료에 별도로 추가로 부여되는 수수료입니다. 대표적인 사용 예시로 풀필먼트 수수료, 로켓배송 수수료, 마케팅 채널 수수료등이 있습니다.
플랫폼 중개수수료 정보
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
409
PlatformAdditionalFeePolicyAlreadyExistsError
추가 수수료 정책 조회
Request
Path
조회할 추가 수수료 정책 아이디
Response
200
성공 응답으로 추가 수수료 정책을 반환합니다.
플랫폼 중개수수료 정보
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
PARTNER
파트너가 부담하는 경우MERCHANT
고객사가 부담하는 경우400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformAdditionalFeePolicyNotFoundError
추가 수수료 정책 수정
Request
Path
업데이트할 추가 수수료 정책 아이디
Body
정률 수수료를 설정하고 싶은 경우 fixedRate
필드에, 정액 수수료를 설정하고 싶은 경우 fixedAmount
필드에 값을 명시해 요청합니다.
두 필드 모두 값이 들어있지 않은 경우 요청이 거절됩니다.
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
PARTNER
파트너가 부담하는 경우MERCHANT
고객사가 부담하는 경우Response
200
성공 응답으로 업데이트된 추가 수수료 정책이 반환됩니다.
추가 수수료 정책는 고객사의 주문건에 대한 중개수수료에 별도로 추가로 부여되는 수수료입니다. 대표적인 사용 예시로 풀필먼트 수수료, 로켓배송 수수료, 마케팅 채널 수수료등이 있습니다.
플랫폼 중개수수료 정보
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformAdditionalFeePolicyNotFoundError
409
PlatformArchivedAdditionalFeePolicyError
: 보관된 추가 수수료 정책을 업데이트하려고 하는 경우
추가 수수료 정책 보관
Request
Path
추가 수수료 정책 아이디
Response
200
성공 응답으로 보관된 추가 수수료 정책 객체를 반환합니다.
추가 수수료 정책는 고객사의 주문건에 대한 중개수수료에 별도로 추가로 부여되는 수수료입니다. 대표적인 사용 예시로 풀필먼트 수수료, 로켓배송 수수료, 마케팅 채널 수수료등이 있습니다.
플랫폼 중개수수료 정보
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformAdditionalFeePolicyNotFoundError
409
PlatformCannotArchiveScheduledAdditionalFeePolicyError
: 예약된 업데이트가 있는 추가 수수료 정책을 보관하려고 하는 경우
추가 수수료 정책 복원
Request
Path
추가 수수료 정책 아이디
Response
200
성공 응답으로 복원된 추가 수수료 정책 객체를 반환합니다.
추가 수수료 정책는 고객사의 주문건에 대한 중개수수료에 별도로 추가로 부여되는 수수료입니다. 대표적인 사용 예시로 풀필먼트 수수료, 로켓배송 수수료, 마케팅 채널 수수료등이 있습니다.
플랫폼 중개수수료 정보
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformAdditionalFeePolicyNotFoundError
계약 다건 조회
Response
200
성공 응답으로 조회된 계약 리스트와 페이지 정보를 반환합니다.
플랫폼 중개수수료 정보
지체일, 정산일, 기준일로 구성되며, 해당 요소들의 조합으로 실제 정산일을 계산합니다.
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
false인 경우 정산금에서 결제 금액 부가세를 감액하지 않고, true인 경우 정산금에서 결제 금액 부가세를 감액합니다.
반환된 페이지 결과 정보
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
계약 생성
Request
Body
명시하지 않는 경우 포트원이 임의의 아이디를 발급해드립니다.
정률 수수료를 설정하고 싶은 경우 fixedRate
필드에, 정액 수수료를 설정하고 싶은 경우 fixedAmount
필드에 값을 명시해 요청합니다.
두 필드 모두 값이 들어있지 않은 경우 요청이 거절됩니다.
플랫폼 정산 주기 입력 정보
정산시작일(통상 주문완료일)로부터 더해진 다음 날짜로부터 가장 가까운 날에 정산이 됩니다. 최소 1 에서 최대 10 까지 지정할 수 있습니다.
플랫폼 정산 기준일
하나의 하위 필드에만 값을 명시하여 요청합니다.
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
PARTNER
파트너가 부담하는 경우MERCHANT
고객사가 부담하는 경우Response
200
성공 응답으로 생성된 계약 객체가 반환됩니다.
계약은 플랫폼 고객사가 파트너에게 정산해줄 대금과 정산일을 계산하는 데 적용되는 정보입니다. 고객사의 플랫폼에서 재화 및 서비스를 판매하기 위한 중개수수료와 판매금에 대한 정산일로 구성되어 있습니다.
플랫폼 중개수수료 정보
지체일, 정산일, 기준일로 구성되며, 해당 요소들의 조합으로 실제 정산일을 계산합니다.
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
false인 경우 정산금에서 결제 금액 부가세를 감액하지 않고, true인 경우 정산금에서 결제 금액 부가세를 감액합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
409
PlatformContractAlreadyExistsError
계약 조회
Request
Path
조회할 계약 아이디
Response
200
성공 응답으로 계약 객체를 반환합니다.
플랫폼 중개수수료 정보
지체일, 정산일, 기준일로 구성되며, 해당 요소들의 조합으로 실제 정산일을 계산합니다.
정산시작일(통상 주문완료일)로부터 더해진 다음 날짜로부터 가장 가까운 날에 정산이 됩니다. 최소 1 에서 최대 10 까지 지정할 수 있습니다.
플랫폼 정산 기준일
플랫폼 정산 주기 계산 방식
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
PARTNER
파트너가 부담하는 경우MERCHANT
고객사가 부담하는 경우false인 경우 정산금에서 결제 금액 부가세를 감액하지 않고, true인 경우 정산금에서 결제 금액 부가세를 감액합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformContractNotFoundError
계약 수정
Request
Path
업데이트할 계약 아이디
Body
정률 수수료를 설정하고 싶은 경우 fixedRate
필드에, 정액 수수료를 설정하고 싶은 경우 fixedAmount
필드에 값을 명시해 요청합니다.
두 필드 모두 값이 들어있지 않은 경우 요청이 거절됩니다.
플랫폼 정산 주기 입력 정보
정산시작일(통상 주문완료일)로부터 더해진 다음 날짜로부터 가장 가까운 날에 정산이 됩니다. 최소 1 에서 최대 10 까지 지정할 수 있습니다.
플랫폼 정산 기준일
하나의 하위 필드에만 값을 명시하여 요청합니다.
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
PARTNER
파트너가 부담하는 경우MERCHANT
고객사가 부담하는 경우Response
200
성공 응답으로 업데이트된 계약 객체가 반환됩니다.
계약은 플랫폼 고객사가 파트너에게 정산해줄 대금과 정산일을 계산하는 데 적용되는 정보입니다. 고객사의 플랫폼에서 재화 및 서비스를 판매하기 위한 중개수수료와 판매금에 대한 정산일로 구성되어 있습니다.
플랫폼 중개수수료 정보
지체일, 정산일, 기준일로 구성되며, 해당 요소들의 조합으로 실제 정산일을 계산합니다.
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
false인 경우 정산금에서 결제 금액 부가세를 감액하지 않고, true인 경우 정산금에서 결제 금액 부가세를 감액합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformContractNotFoundError
409
PlatformArchivedContractError
: 보관된 계약을 업데이트하려고 하는 경우
계약 보관
Request
Path
계약 아이디
Response
200
성공 응답으로 보관된 계약 객체를 반환합니다.
계약은 플랫폼 고객사가 파트너에게 정산해줄 대금과 정산일을 계산하는 데 적용되는 정보입니다. 고객사의 플랫폼에서 재화 및 서비스를 판매하기 위한 중개수수료와 판매금에 대한 정산일로 구성되어 있습니다.
플랫폼 중개수수료 정보
지체일, 정산일, 기준일로 구성되며, 해당 요소들의 조합으로 실제 정산일을 계산합니다.
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
false인 경우 정산금에서 결제 금액 부가세를 감액하지 않고, true인 경우 정산금에서 결제 금액 부가세를 감액합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformContractNotFoundError
409
PlatformCannotArchiveScheduledContractError
: 예약된 업데이트가 있는 계약을 보관하려고 하는 경우
계약 복원
Request
Path
계약 아이디
Response
200
성공 응답으로 복원된 계약 객체를 반환합니다.
계약은 플랫폼 고객사가 파트너에게 정산해줄 대금과 정산일을 계산하는 데 적용되는 정보입니다. 고객사의 플랫폼에서 재화 및 서비스를 판매하기 위한 중개수수료와 판매금에 대한 정산일로 구성되어 있습니다.
플랫폼 중개수수료 정보
지체일, 정산일, 기준일로 구성되며, 해당 요소들의 조합으로 실제 정산일을 계산합니다.
플랫폼에서 발생한 결제 수수료, 부가세 등 금액을 부담하는 주체를 나타냅니다.
false인 경우 정산금에서 결제 금액 부가세를 감액하지 않고, true인 경우 정산금에서 결제 금액 부가세를 감액합니다.
400
InvalidRequestError
: 요청된 입력 정보가 유효하지 않은 경우
401
UnauthorizedError
: 인증 정보가 올바르지 않은 경우
403
PlatformNotEnabledError
: 플랫폼 기능이 활성화되지 않아 요청을 처리할 수 없는 경우ForbiddenError
: 요청이 거절된 경우
404
PlatformContractNotFoundError