Refunds
주문을 직접 환불하거나 구매자가 제출한 환불 요청을 처리해요.
주문 환불
전액 또는 부분 환불을 요청해요.
Idempotency-Key를 24시간 기억하며 같은 키에 다른 본문을 보내면 409 응답을 돌려줘요.
알아둘 점
- 단건 주문을 전액 환불하면 그 주문의 라이선스가
revoked가 돼요. - 구독은 가장 최근 결제 주문(최초 또는 갱신)을 전액 환불할 때만 끝나고, 라이선스가
revoked가 되며subscription.ended(endReason: refunded)가 와요. 지난 회차 주문이나 차액 결제 주문을 환불해도 구독과 라이선스는 그대로예요. - test 주문의 환불 동작은 test 모드에서 확인해요.
경로 파라미터
idstring필수환불할 주문 식별자예요.
ord_123헤더
Idempotency-Keystring필수POST 요청의 중복 실행을 막는 키예요. 24시간 보관하며 본문이 다른 요청에는 같은 키를 쓸 수 없어요.
요청 본문
amountnumber부분 환불 금액을 원 단위로 지정해요.
5000reasonstring환불 사유예요.
고객 요청응답
성공하면 HTTP 201과 주문 객체를 돌려줘요.
오류
| 코드 | HTTP | 의미 |
|---|---|---|
ORDER_NOT_FOUND | 404 | 주문이 없거나 키의 상품 범위 밖이에요. |
REFUND_NOT_PAID | 409 | 주문 상태가 결제 완료가 아니에요. |
REFUND_REQUEST_PENDING | 409 | 활성 환불 요청이 있어 주문을 환불할 수 없어요. |
REFUND_SETTLED | 409 | 정산 회차에 포함된 주문은 환불할 수 없어요. |
REFUND_NONE_LEFT | 409 | 남은 환불 가능 금액이 없어요. |
REFUND_AMOUNT_INVALID | 400 | 환불 금액은 0보다 커야 해요. |
REFUND_EXCEEDS | 400 | 환불 금액이 남은 환불 가능액보다 커요. |
REFUND_IN_PROGRESS | 409 | 이 주문과 관련한 환불이 처리 중이에요. |
PG_REFUND_FAILED | 502 | 결제 대행사가 환불 요청을 처리하지 못했어요. |
PG_REFUND_AMBIGUOUS | 502 | 결제 대행사의 환불 결과를 확인하지 못했어요. 실제 환불됐을 수 있으니 상태를 확인한 뒤 다시 처리해 주세요. |
표에 없는 공통 오류(인증·권한, 호출 한도, 입력 검증, 멱등 키, 서버 오류)는 에러 코드에서 확인해요.
환불 요청 목록
API 키의 test 또는 live 환경에 속한 환불 요청을 페이지 단위로 조회해요.
알아둘 점
- 구매자는 단건 주문 환불을
https://payri.kr/orders/lookup(이메일·주문번호)에서 신청하고, 구독은 포털의 즉시 해지로 환불해요. requested,on_hold,processing은 처리 중인 상태이며, 주문·구독마다 하나만 처리 중일 수 있어요.- 보류 중에는 자동 승인이 멈춰요.
쿼리 파라미터
pagenumber조회할 페이지 번호예요.
1limitnumber페이지마다 조회할 항목 수예요.
20statusstring환불 요청 상태로 결과를 좁혀요.
requested, on_hold, processing, approved, rejected, withdrawnorderIdstring주문 식별자로 환불 요청을 좁혀요.
ord_123응답
성공하면 HTTP 200과 환불 요청 객체 목록을 돌려줘요.
형식은 { data, total, page, limit }예요.
오류
표에 없는 공통 오류(인증·권한, 호출 한도, 입력 검증, 서버 오류)는 에러 코드에서 확인해요.
환불 요청 단건
환불 요청 승인
환불 요청을 승인해요.
Idempotency-Key는 24시간 보관해요.
알아둘 점
- 요청 금액과 다르게 승인하려면 계산 안내 확인값
acknowledgeMismatch: true가 필요해요. statutory: true인 요청은 감액 승인·거절·보류할 수 없어요.- 환불 완료 이벤트는 웹훅 이벤트에서 확인해요.
경로 파라미터
idstring필수승인할 환불 요청 식별자예요.
rfr_123헤더
Idempotency-Keystring필수POST 요청의 중복 실행을 막는 키예요. 24시간 보관하며 본문이 다른 요청에는 같은 키를 쓸 수 없어요.
요청 본문
acknowledgeMismatchboolean환불 계산 안내를 확인했는지 표시해요.
trueamountnumber승인할 환불 금액을 원 단위로 지정해요.
5000응답
성공하면 HTTP 201과 환불 요청 처리 결과를 돌려줘요.
오류
| 코드 | HTTP | 의미 |
|---|---|---|
REFUND_REQUEST_NOT_FOUND | 404 | 환불 요청이 없거나 키의 상품 범위 밖이에요. |
REFUND_REQUEST_NOT_ACTIONABLE | 409 | 환불 요청의 현재 상태에서는 승인·거절·보류할 수 없어요. |
REFUND_STATUTORY_LOCKED | 409 | 법정 청약철회 기간에는 현재 작업자의 처리가 제한돼요. |
REFUND_AMOUNT_INVALID | 400 | 환불 금액은 0보다 커야 해요. |
REFUND_AMOUNT_EXCEEDS | 400 | 요청한 환불 금액이 현재 환불 가능액보다 커요. |
REFUND_AMOUNT_MISMATCH | 409 | 승인 금액이 요청 금액과 달라요. 금액을 확인하고 차이를 명시적으로 승인해 주세요. |
ORDER_NOT_FOUND | 404 | 주문이 없거나 키의 상품 범위 밖이에요. |
REFUND_NOT_PAID | 409 | 주문 상태가 결제 완료가 아니에요. |
REFUND_SETTLED | 409 | 정산 회차에 포함된 주문은 환불할 수 없어요. |
REFUND_NONE_LEFT | 409 | 남은 환불 가능 금액이 없어요. |
REFUND_EXCEEDS | 400 | 환불 금액이 남은 환불 가능액보다 커요. |
REFUND_IN_PROGRESS | 409 | 이 주문과 관련한 환불이 처리 중이에요. |
PG_REFUND_FAILED | 502 | 결제 대행사가 환불 요청을 처리하지 못했어요. |
PG_REFUND_AMBIGUOUS | 502 | 결제 대행사의 환불 결과를 확인하지 못했어요. 실제 환불됐을 수 있으니 상태를 확인한 뒤 다시 처리해 주세요. |
SUBSCRIPTION_REFUND_AMOUNT_INVALID | 400 | 승인한 구독 환불 금액이 유효하지 않아요. |
SUBSCRIPTION_REFUND_NONE_LEFT | 409 | 구독 주문에 남은 환불 가능 금액이 없어요. |
SUBSCRIPTION_REFUND_SETTLED | 409 | 즉시 해지 환불 대상 주문이 정산 회차에 포함됐어요. |
표에 없는 공통 오류(인증·권한, 호출 한도, 입력 검증, 멱등 키, 서버 오류)는 에러 코드에서 확인해요.
환불 요청 거절
환불 요청을 거절하고 사유를 기록해요.
Idempotency-Key는 24시간 보관해요.
경로 파라미터
idstring필수거절할 환불 요청 식별자예요.
rfr_123헤더
Idempotency-Keystring필수POST 요청의 중복 실행을 막는 키예요. 24시간 보관하며 본문이 다른 요청에는 같은 키를 쓸 수 없어요.
요청 본문
reasonstring필수환불 요청을 거절하는 이유예요.
환불 정책상 처리할 수 없어요.응답
성공하면 HTTP 201과 환불 요청 처리 결과를 돌려줘요.
오류
| 코드 | HTTP | 의미 |
|---|---|---|
REFUND_REQUEST_NOT_FOUND | 404 | 환불 요청이 없거나 키의 상품 범위 밖이에요. |
REFUND_REQUEST_NOT_ACTIONABLE | 409 | 환불 요청의 현재 상태에서는 승인·거절·보류할 수 없어요. |
REFUND_STATUTORY_LOCKED | 409 | 법정 청약철회 기간에는 현재 작업자의 처리가 제한돼요. |
REFUND_REASON_REQUIRED | 400 | 환불 요청을 보류하거나 거절하는 사유를 입력해 주세요. |
표에 없는 공통 오류(인증·권한, 호출 한도, 입력 검증, 멱등 키, 서버 오류)는 에러 코드에서 확인해요.
환불 요청 보류
추가 확인이 필요한 환불 요청을 보류해요.
Idempotency-Key는 24시간 보관해요.
경로 파라미터
idstring필수보류할 환불 요청 식별자예요.
rfr_123헤더
Idempotency-Keystring필수POST 요청의 중복 실행을 막는 키예요. 24시간 보관하며 본문이 다른 요청에는 같은 키를 쓸 수 없어요.
요청 본문
reasonstring필수보류 사유예요.
추가 확인이 필요해요.typestring필수보류 유형이에요.
in_review, disputed응답
성공하면 HTTP 201과 환불 요청 처리 결과를 돌려줘요.
오류
| 코드 | HTTP | 의미 |
|---|---|---|
REFUND_REQUEST_NOT_FOUND | 404 | 환불 요청이 없거나 키의 상품 범위 밖이에요. |
REFUND_REQUEST_NOT_ACTIONABLE | 409 | 환불 요청의 현재 상태에서는 승인·거절·보류할 수 없어요. |
REFUND_STATUTORY_LOCKED | 409 | 법정 청약철회 기간에는 현재 작업자의 처리가 제한돼요. |
REFUND_REASON_REQUIRED | 400 | 환불 요청을 보류하거나 거절하는 사유를 입력해 주세요. |
표에 없는 공통 오류(인증·권한, 호출 한도, 입력 검증, 멱등 키, 서버 오류)는 에러 코드에서 확인해요.
환불 요청 객체
필드
approvedAmountnumbernull 가능승인한 환불 금액을 원 단위로 알려줘요.
autoApproveAtstringnull 가능요청 후 72시간 안에 결정되지 않으면 자동 승인되는 시각이에요.
breakdownobject주문별 환불 금액 내역이에요.
하위 필드 1개
ordersarray of object환불 대상 주문별 금액이에요.
하위 필드 3개
amountnumber대상 주문의 환불 금액이에요.
currencystring금액 통화를 알려줘요.
KRWorderIdstring환불 대상 주문 식별자예요.
buyerEmailstring구매자 이메일 주소예요.
buyerReasonstringnull 가능구매자가 남긴 환불 사유예요.
createdAtstring환불 요청이 생성된 시각이에요.
currencystring금액 통화를 알려줘요.
KRWdecidedAtstringnull 가능요청이 결정된 시각이에요.
decidedBystringnull 가능요청을 결정한 사용자 식별자예요.
holdobjectnull 가능보류 처리 정보예요.
하위 필드 3개
heldAtstring보류 처리 시각이에요.
reasonstringnull 가능보류 사유예요.
typestring보류 유형이에요.
in_review, disputedidstring환불 요청 식별자예요.
kindstring환불 요청 유형이에요.
order, subscription_cancelmodestringtest 또는 live 환불 환경을 알려줘요.
live, testorderIdstring환불 요청의 주문 식별자예요.
productIdstring환불 요청의 상품 식별자예요.
rejectReasonstringnull 가능거절 사유예요.
requestedAmountnumber요청한 환불 금액을 원 단위로 알려줘요.
statusstring환불 요청 상태예요.
requested, on_hold, processing, approved, rejected, withdrawnstatutoryboolean법정 청약 철회 요청인지 알려줘요.
subscriptionIdstringnull 가능환불 요청의 구독 식별자예요.
updatedAtstring환불 요청이 수정된 시각이에요.
refundableAmountnumber현재 환불 가능한 금액을 원 단위로 알려줘요.
warningsarray of object환불 처리 전에 확인할 안내 목록이에요.
하위 필드 2개
codestring환불 안내를 구분하는 코드예요.
STATUTORY_LOCKED, SUBSCRIPTION_CANCEL_REFUND_RIGHT, POLICY_DECISIONmessagestring환불 처리 시 참고할 안내예요.
환불 요청 처리 결과
필드
refundRequestobjectnull 가능환불 요청 처리 후의 정보예요.
하위 필드 23개
approvedAmountnumbernull 가능승인한 환불 금액을 원 단위로 알려줘요.
autoApproveAtstringnull 가능요청 후 72시간 안에 결정되지 않으면 자동 승인되는 시각이에요.
breakdownobject주문별 환불 금액 내역이에요.
하위 필드 1개
ordersarray of object환불 대상 주문별 금액이에요.
하위 필드 3개
amountnumber대상 주문의 환불 금액이에요.
currencystring금액 통화를 알려줘요.
KRWorderIdstring환불 대상 주문 식별자예요.
buyerEmailstring구매자 이메일 주소예요.
buyerReasonstringnull 가능구매자가 남긴 환불 사유예요.
createdAtstring환불 요청이 생성된 시각이에요.
currencystring금액 통화를 알려줘요.
KRWdecidedAtstringnull 가능요청이 결정된 시각이에요.
decidedBystringnull 가능요청을 결정한 사용자 식별자예요.
holdobjectnull 가능보류 처리 정보예요.
하위 필드 3개
heldAtstring보류 처리 시각이에요.
reasonstringnull 가능보류 사유예요.
typestring보류 유형이에요.
in_review, disputedidstring환불 요청 식별자예요.
kindstring환불 요청 유형이에요.
order, subscription_cancelmodestringtest 또는 live 환불 환경을 알려줘요.
live, testorderIdstring환불 요청의 주문 식별자예요.
productIdstring환불 요청의 상품 식별자예요.
rejectReasonstringnull 가능거절 사유예요.
requestedAmountnumber요청한 환불 금액을 원 단위로 알려줘요.
statusstring환불 요청 상태예요.
requested, on_hold, processing, approved, rejected, withdrawnstatutoryboolean법정 청약 철회 요청인지 알려줘요.
subscriptionIdstringnull 가능환불 요청의 구독 식별자예요.
updatedAtstring환불 요청이 수정된 시각이에요.
refundableAmountnumber현재 환불 가능한 금액을 원 단위로 알려줘요.
warningsarray of object환불 처리 전에 확인할 안내 목록이에요.
하위 필드 2개
codestring환불 안내를 구분하는 코드예요.
STATUTORY_LOCKED, SUBSCRIPTION_CANCEL_REFUND_RIGHT, POLICY_DECISIONmessagestring환불 처리 시 참고할 안내예요.
warningsarray of object처리 결과와 함께 전달하는 안내 목록이에요.
하위 필드 2개
codestring환불 안내를 구분하는 코드예요.
STATUTORY_LOCKED, SUBSCRIPTION_CANCEL_REFUND_RIGHT, POLICY_DECISIONmessagestring환불 처리 시 참고할 안내예요.