Subscriptions
구독을 조회하고 해지 미리보기와 해지를 요청해요.
구독 목록
API 키의 test 또는 live 환경과 상품 범위에 속한 구독을 페이지 단위로 조회해요.
쿼리 파라미터
pagenumber조회할 페이지 번호예요.
1limitnumber페이지마다 조회할 항목 수예요.
20buyerEmailstring구매자 이메일로 구독을 찾아요.
buyer@example.comstatusstring구독의 공개 상태로 결과를 좁혀요. 결제가 밀린 채 해지를 예약한 구독도 past_due 로 조회돼요.
active, past_due, endedproductIdstring상품 식별자로 구독을 좁혀요.
prod_123응답
성공하면 HTTP 200과 구독 객체 목록을 돌려줘요.
형식은 { data, total, page, limit }예요.
오류
표에 없는 공통 오류(인증·권한, 호출 한도, 입력 검증, 서버 오류)는 에러 코드에서 확인해요.
구독 단건
해지 미리보기
기간 종료 해지와 즉시 해지의 적용 시점과 환불 금액을 비교해요.
경로 파라미터
idstring필수미리보기할 구독 식별자예요.
sub_123응답
성공하면 HTTP 200과 아래 필드를 돌려줘요.
immediateobject즉시 해지 미리보기예요.
하위 필드 18개
blockedReasonobjectnull 가능즉시 해지가 불가능한 이유예요.
하위 필드 2개
codestring즉시 해지가 차단된 이유 코드예요.
SUBSCRIPTION_REFUND_SETTLED, REFUND_REQUEST_PENDING, ALREADY_ENDEDmessagestring즉시 해지가 차단된 이유예요.
breakdownarray of object주문별 환불 금액 내역이에요.
하위 필드 3개
amountnumber해당 주문에서 환불할 금액이에요.
currencystring금액 통화를 알려줘요.
KRWorderIdstring환불 계산 대상 주문 식별자예요.
clawbacknumber연간 할인 환수 금액이에요.
clawbackCurrencystring환수 금액 통화예요.
KRWcurrencystring금액 통화를 알려줘요.
KRWdeductionnumber환불액에서 차감할 금액이에요.
deductionCapnumber차감할 수 있는 최대 금액이에요.
deductionCapCurrencystring차감 한도 통화예요.
KRWdeductionCurrencystring차감 금액 통화예요.
KRWfullRefundboolean전액 환불인지 알려줘요.
penaltynumber위약금 금액이에요.
penaltyCurrencystring위약금 통화예요.
KRWreasonstring환불 계산 사유예요.
initial_full, statutory_full, renewal_full, prorated, past_due, nothing_refundablerefundAmountnumber즉시 해지 시 환불 예정 금액이에요.
requiresApprovalboolean환불 요청의 판매자 승인이 필요한지 알려줘요.
statutoryboolean법정 환불 기준 적용 여부예요.
totalDaysnumber환불 계산에 사용하는 전체 일수예요.
usedDaysnumber구독 시작 후 사용한 일수예요.
modestringtest 또는 live 구독 환경을 알려줘요.
live, testpendingRefundRequestobjectnull 가능처리 중인 환불 요청 정보예요.
하위 필드 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환불 요청이 수정된 시각이에요.
warningsarray of object환불 처리 전에 확인할 안내 목록이에요.
하위 필드 2개
codestring환불 안내를 구분하는 코드예요.
STATUTORY_LOCKED, SUBSCRIPTION_CANCEL_REFUND_RIGHT, POLICY_DECISIONmessagestring환불 처리 시 참고할 안내예요.
refundableAmountnumber현재 환불 가능한 금액을 원 단위로 알려줘요.
periodEndobject기간 종료 해지 미리보기예요.
하위 필드 1개
effectiveAtstring기간 종료 해지 효력이 발생할 시각이에요.
오류
| 코드 | HTTP | 의미 |
|---|---|---|
SUBSCRIPTION_NOT_FOUND | 404 | 구독이 없거나 키의 상품 범위 밖이에요. |
표에 없는 공통 오류(인증·권한, 호출 한도, 서버 오류)는 에러 코드에서 확인해요.
구독 해지
기간 종료 시점 또는 즉시 해지해요.
timing은 필수예요.
Idempotency-Key는 24시간 보관해요.
알아둘 점
period_end는 기간말 해지 예약,immediate는 즉시 종료예요.- 즉시 해지 환불액은 환불 정책으로 계산되고 금액은 지정할 수 없어요. 환불액이 있으면 환불된 주문마다
order.refunded가 온 뒤subscription.ended가 와요. immediate로 끝난 구독의 라이선스는revoked가 돼요.
경로 파라미터
idstring필수해지할 구독 식별자예요.
sub_123헤더
Idempotency-Keystring필수POST 요청의 중복 실행을 막는 키예요. 24시간 보관하며 본문이 다른 요청에는 같은 키를 쓸 수 없어요.
요청 본문
timingstring필수기간 종료 시점 또는 즉시 해지 시점을 지정해요.
period_end, immediatereasonstring해지 사유예요.
서비스 이용을 중단해요.응답
성공하면 HTTP 201과 아래 필드를 돌려줘요.
currencystring금액 통화를 알려줘요.
KRWrefundAmountnumber즉시 환불한 금액이에요.
refundOrderIdstringnull 가능즉시 환불한 주문 식별자예요.
refundedOrderIdsarray of string해지 처리 중 환불한 주문 식별자 목록이에요.
subscriptionobject해지 후 구독 정보예요.
하위 필드 24개
amountnumber갱신할 때 청구하는 주기당 금액의 상한을 원 단위 정수로 알려줘요. 상품 가격이 내려가면 다음 갱신부터 낮아지고, 인상은 고지 후 구매자가 동의해야 적용돼요.
billingIntervalstring구독 결제 주기예요.
monthly, yearlybuyerEmailstring구매자 이메일 주소예요.
buyerNamestring구매자 이름이에요.
cancelAtPeriodEndboolean다음 기간 종료 시 해지하도록 예약했는지 알려줘요.
currencystring금액 통화를 알려줘요.
KRWcurrentPeriodEndstring현재 결제 기간 종료 시각이에요.
currentPeriodStartstring현재 결제 기간 시작 시각이에요.
endReasonstringnull 가능구독 종료 사유예요.
canceled, refunded, payment_failed, product_unavailable, plan_unavailable, pg_canceled, price_increase_declined, nullendedAtstringnull 가능구독이 종료된 시각이에요.
historyarray of objectnull 가능구독 변경 이력이에요.
하위 필드 9개
atstring변경이 기록된 시각이에요.
effectiveAtstringnull 가능변경 효력이 발생하는 시각이에요.
extensionDaysnumbernull 가능구독 기간 연장 일수예요.
fromobjectnull 가능변경 전 플랜과 주기예요.
하위 필드 2개
billingIntervalstring변경 전후 청구 주기예요.
monthly, yearlyplanIdstring변경 전후 구독 플랜 식별자예요.
notestringnull 가능이전 변경 기록의 메모예요.
orderIdstringnull 가능변경과 연결된 주문 식별자예요.
prorationAmountnumbernull 가능차액 결제 금액, 또는 갱신·가격 변경 이력의 금액을 원 단위로 알려줘요.
toobjectnull 가능변경 후 플랜과 주기예요.
하위 필드 2개
billingIntervalstring변경 전후 청구 주기예요.
monthly, yearlyplanIdstring변경 전후 구독 플랜 식별자예요.
typestringnull 가능내부 변경 기록 유형이에요.
created, renewed, upgraded, downgrade_scheduled, downgrade_applied, interval_changed, cancel_scheduled, cancel_undone, ended, refunded, canceled_with_refund, comp_upgraded, period_extended, payment_failed, price_change_noticed, price_change_consented, nullidstring구독 식별자예요.
modestringtest 또는 live 구독 환경을 알려줘요.
live, testpastDueSincestringnull 가능결제 실패 상태가 시작된 시각이에요.
pendingPriceChangeobjectnull 가능가격 인상 고지와 구매자 동의 상태예요.
하위 필드 5개
amountnumber고지된 새 구독 금액을 원 단위로 알려줘요.
consentedAtstringnull 가능구매자가 새 가격에 동의한 시각이에요.
currencystring고지된 금액의 통화예요.
KRWeffectiveFromstring새 가격이 적용될 갱신일이에요.
noticedAtstring가격 인상을 고지한 시각이에요.
planIdstring구독 플랜 식별자예요.
productIdstring상품 식별자예요.
productNamestring상품 이름이에요.
refundEligibleUntilstring최초 결제 환불 가능 기한이에요.
refundTermsobject구독 환불 조건의 스냅샷이에요.
하위 필드 9개
dayRoundingstringnull 가능일수 계산 방식이에요.
ceil, floor, nullinitialFullRefundDaysnumbernull 가능최초 결제 전액 환불 가능 일수예요.
listAmountsobjectnull 가능환불 계산에 사용하는 기준 금액이에요.
하위 필드 3개
currencystring금액 통화를 알려줘요.
KRWmonthlynumbernull 가능월간 기준 금액이에요.
yearlynumbernull 가능연간 기준 금액이에요.
penaltyobjectnull 가능환불 위약금 조건이에요.
하위 필드 3개
currencystring금액 통화를 알려줘요.
KRWfixedAmountnumbernull 가능고정 위약금을 원 단위로 알려줘요.
rateBpsnumbernull 가능위약금 비율을 1만분율로 알려줘요.
policyTypestringnull 가능구독 환불 정책 유형이에요.
no_refund, before_delivery, within_7days, custom, nullrenewalFullRefundDaysnumbernull 가능갱신 결제 전액 환불 가능 일수예요.
requireApprovalbooleannull 가능환불 요청에 승인이 필요한지 알려줘요.
restrictRepeatFullRefundbooleannull 가능반복 전액 환불 제한 여부예요.
yearlyDiscountClawbackbooleannull 가능연간 할인 환수 여부예요.
scheduledChangeobjectnull 가능예약된 구독 변경 정보예요.
하위 필드 4개
billingIntervalstringnull 가능예약된 구독 청구 주기예요.
monthly, yearly, nulleffectiveAtstring예약 변경 효력이 발생하는 시각이에요.
planIdstringnull 가능예약된 구독 플랜 식별자예요.
typestring예약 변경 유형이에요.
downgrade, interval_change, cancelstartedAtstring구독이 시작된 시각이에요.
statusstring구독의 공개 상태예요. past_due 는 결제가 밀린 상태예요. 결제가 밀린 채 해지를 예약해도 past_due 이고 cancelAtPeriodEnd 가 true 예요.
active, past_due, endedtestRenewalOutcomestringnull 가능test 갱신 결과 설정이에요.
succeed, fail, nulltimingstring해지 시점이에요.
period_end, immediate오류
| 코드 | HTTP | 의미 |
|---|---|---|
SUBSCRIPTION_NOT_FOUND | 404 | 구독이 없거나 키의 상품 범위 밖이에요. |
REFUND_REQUEST_PENDING | 409 | 활성 환불 요청이 있어 주문을 환불할 수 없어요. |
REFUND_IN_PROGRESS | 409 | 이 주문과 관련한 환불이 처리 중이에요. |
SUBSCRIPTION_REFUND_SETTLED | 409 | 즉시 해지 환불 대상 주문이 정산 회차에 포함됐어요. |
SUBSCRIPTION_REFUND_NONE_LEFT | 409 | 구독 주문에 남은 환불 가능 금액이 없어요. |
ORDER_NOT_FOUND | 404 | 주문이 없거나 키의 상품 범위 밖이에요. |
PG_REFUND_FAILED | 502 | 결제 대행사가 환불 요청을 처리하지 못했어요. |
PG_REFUND_AMBIGUOUS | 502 | 결제 대행사의 환불 결과를 확인하지 못했어요. 실제 환불됐을 수 있으니 상태를 확인한 뒤 다시 처리해 주세요. |
ALREADY_ENDED | 409 | 이미 종료된 구독이에요. |
ALREADY_CANCELED | 409 | 이미 기간말 해지가 예약돼 있어요. |
표에 없는 공통 오류(인증·권한, 호출 한도, 입력 검증, 멱등 키, 서버 오류)는 에러 코드에서 확인해요.
구독 객체
필드
amountnumber갱신할 때 청구하는 주기당 금액의 상한을 원 단위 정수로 알려줘요. 상품 가격이 내려가면 다음 갱신부터 낮아지고, 인상은 고지 후 구매자가 동의해야 적용돼요.
billingIntervalstring구독 결제 주기예요.
monthly, yearlybuyerEmailstring구매자 이메일 주소예요.
buyerNamestring구매자 이름이에요.
cancelAtPeriodEndboolean다음 기간 종료 시 해지하도록 예약했는지 알려줘요.
currencystring금액 통화를 알려줘요.
KRWcurrentPeriodEndstring현재 결제 기간 종료 시각이에요.
currentPeriodStartstring현재 결제 기간 시작 시각이에요.
endReasonstringnull 가능구독 종료 사유예요.
canceled, refunded, payment_failed, product_unavailable, plan_unavailable, pg_canceled, price_increase_declined, nullendedAtstringnull 가능구독이 종료된 시각이에요.
historyarray of objectnull 가능구독 변경 이력이에요.
하위 필드 9개
atstring변경이 기록된 시각이에요.
effectiveAtstringnull 가능변경 효력이 발생하는 시각이에요.
extensionDaysnumbernull 가능구독 기간 연장 일수예요.
fromobjectnull 가능변경 전 플랜과 주기예요.
하위 필드 2개
billingIntervalstring변경 전후 청구 주기예요.
monthly, yearlyplanIdstring변경 전후 구독 플랜 식별자예요.
notestringnull 가능이전 변경 기록의 메모예요.
orderIdstringnull 가능변경과 연결된 주문 식별자예요.
prorationAmountnumbernull 가능차액 결제 금액, 또는 갱신·가격 변경 이력의 금액을 원 단위로 알려줘요.
toobjectnull 가능변경 후 플랜과 주기예요.
하위 필드 2개
billingIntervalstring변경 전후 청구 주기예요.
monthly, yearlyplanIdstring변경 전후 구독 플랜 식별자예요.
typestringnull 가능내부 변경 기록 유형이에요.
created, renewed, upgraded, downgrade_scheduled, downgrade_applied, interval_changed, cancel_scheduled, cancel_undone, ended, refunded, canceled_with_refund, comp_upgraded, period_extended, payment_failed, price_change_noticed, price_change_consented, nullidstring구독 식별자예요.
modestringtest 또는 live 구독 환경을 알려줘요.
live, testpastDueSincestringnull 가능결제 실패 상태가 시작된 시각이에요.
pendingPriceChangeobjectnull 가능가격 인상 고지와 구매자 동의 상태예요.
하위 필드 5개
amountnumber고지된 새 구독 금액을 원 단위로 알려줘요.
consentedAtstringnull 가능구매자가 새 가격에 동의한 시각이에요.
currencystring고지된 금액의 통화예요.
KRWeffectiveFromstring새 가격이 적용될 갱신일이에요.
noticedAtstring가격 인상을 고지한 시각이에요.
planIdstring구독 플랜 식별자예요.
productIdstring상품 식별자예요.
productNamestring상품 이름이에요.
refundEligibleUntilstring최초 결제 환불 가능 기한이에요.
refundTermsobject구독 환불 조건의 스냅샷이에요.
하위 필드 9개
dayRoundingstringnull 가능일수 계산 방식이에요.
ceil, floor, nullinitialFullRefundDaysnumbernull 가능최초 결제 전액 환불 가능 일수예요.
listAmountsobjectnull 가능환불 계산에 사용하는 기준 금액이에요.
하위 필드 3개
currencystring금액 통화를 알려줘요.
KRWmonthlynumbernull 가능월간 기준 금액이에요.
yearlynumbernull 가능연간 기준 금액이에요.
penaltyobjectnull 가능환불 위약금 조건이에요.
하위 필드 3개
currencystring금액 통화를 알려줘요.
KRWfixedAmountnumbernull 가능고정 위약금을 원 단위로 알려줘요.
rateBpsnumbernull 가능위약금 비율을 1만분율로 알려줘요.
policyTypestringnull 가능구독 환불 정책 유형이에요.
no_refund, before_delivery, within_7days, custom, nullrenewalFullRefundDaysnumbernull 가능갱신 결제 전액 환불 가능 일수예요.
requireApprovalbooleannull 가능환불 요청에 승인이 필요한지 알려줘요.
restrictRepeatFullRefundbooleannull 가능반복 전액 환불 제한 여부예요.
yearlyDiscountClawbackbooleannull 가능연간 할인 환수 여부예요.
scheduledChangeobjectnull 가능예약된 구독 변경 정보예요.
하위 필드 4개
billingIntervalstringnull 가능예약된 구독 청구 주기예요.
monthly, yearly, nulleffectiveAtstring예약 변경 효력이 발생하는 시각이에요.
planIdstringnull 가능예약된 구독 플랜 식별자예요.
typestring예약 변경 유형이에요.
downgrade, interval_change, cancelstartedAtstring구독이 시작된 시각이에요.
statusstring구독의 공개 상태예요. past_due 는 결제가 밀린 상태예요. 결제가 밀린 채 해지를 예약해도 past_due 이고 cancelAtPeriodEnd 가 true 예요.
active, past_due, endedtestRenewalOutcomestringnull 가능test 갱신 결과 설정이에요.
succeed, fail, nullendReason 값
endReason 값 | 의미 |
|---|---|
canceled | 해지로 종료됐어요. |
refunded | 환불로 종료됐어요. |
payment_failed | 갱신 결제 실패로 종료됐어요. |
product_unavailable | 상품을 더 이상 제공할 수 없어 종료됐어요. |
plan_unavailable | 플랜을 더 이상 제공할 수 없어 종료됐어요. |
pg_canceled | PG 측 취소로 종료됐어요. |
price_increase_declined | 구매자가 가격 인상에 동의하지 않아 종료됐어요. |
null | 종료 사유가 아직 없어요. |
갱신 결제 실패
| 갱신 결제 | 결과 |
|---|---|
| 1~3번째 실패 | past_due가 되고 24시간 뒤 다시 결제해요. 실패마다 subscription.payment_failed가 와요. |
| 4번째 실패 | ended(endReason: payment_failed)로 끝나요. 첫 실패부터 약 72시간이에요. |
past_due 중 기간말 해지 예약 | 더 결제하지 않고 곧 ended(endReason: canceled)로 끝나요. |
결제 수단은 구독을 시작할 때 정해지고 바꿀 수 없어요.
가격 변경
상품 가격을 올리면 구독자에게 고지되고, 구독 객체의 pendingPriceChange에 새 금액과 적용일(effectiveFrom)이 담겨요.
| 갱신 | 결과 |
|---|---|
| 적용일 전 | 기존 금액으로 결제돼요. |
| 적용일, 구매자가 동의함 | 새 금액으로 결제돼요. |
| 적용일, 동의하지 않음 | 결제 없이 ended(endReason: price_increase_declined)로 끝나요. |
가격을 내리면 다음 갱신부터 내린 금액으로 결제돼요.