현금영수증 취소
POST /v2/cash-receipts/{id}/cancel 로 발급된 현금영수증의 전체나 일부 금액을 취소해요.
POST /v2/cash-receipts/{id}/cancel
국세청 발급이 끝난(ISSUED) 원본 현금영수증을 취소해요. 페이싱크가 취소 금액만큼 취소 영수증(kind: CANCELLATION)을 발급하고, 응답으로 그 취소 영수증을 돌려줘요. 금액 일부만 취소할 수 있고, 남은 금액은 다시 나눠서 취소할 수 있어요.
원본 금액 전체가 취소되면 원본의 status가 CANCELED로 바뀌어요. 일부만 취소하면 원본은 ISSUED로 남고 canceledAmount, remainingAmount가 바뀌어요.
| 원본 상태 | 취소 가능 여부 |
|---|---|
PENDING |
국세청 처리가 끝난 뒤에 취소할 수 있어요. 보통 다음 날 오전 10시 이후예요. |
ISSUED |
취소할 수 있어요. |
FAILED |
발급되지 않아서 취소할 수 없어요. |
CANCELED |
이미 전액 취소했어요. |
취소 영수증은 다시 취소할 수 없어요.
경로 파라미터
| 파라미터 | 타입 | 설명 |
|---|---|---|
id |
string | 취소할 원본 현금영수증 ID예요. crt_로 시작해요. |
요청 본문
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
reason |
string | 예 | 취소 사유예요. 1~100자예요. 거래 취소, 오류 발급, 그 밖의 사유로 나눠서 국세청에 신고해요. |
amount |
integer | 취소할 금액(원)이에요. 빼면 남은 금액 전체를 취소해요. 남은 금액보다 클 수 없어요. |
부분 취소의 공급가액과 부가세는 취소 금액으로 다시 계산해요. 마지막 취소는 남은 공급가액과 부가세를 모두 가져가서, 원본과 취소 영수증의 합계가 맞아요.
요청 예시
curl -X POST https://api.paysync.kr/v2/cash-receipts/crt_a1b2c3d4e5f6g7h8i9j0k1l2/cancel \
-H "Authorization: Bearer $PAYSYNC_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "amount": 20000, "reason": "거래 취소" }'const res = await fetch(`https://api.paysync.kr/v2/cash-receipts/${cashReceiptId}/cancel`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PAYSYNC_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ amount: 20000, reason: "거래 취소" }),
});
const { code, data } = await res.json();import os
import requests
res = requests.post(
f"https://api.paysync.kr/v2/cash-receipts/{cash_receipt_id}/cancel",
headers={"Authorization": f"Bearer {os.environ['PAYSYNC_API_KEY']}"},
json={"amount": 20000, "reason": "거래 취소"},
)
print(res.json())응답
새로 만든 취소 영수증이 현금영수증 객체로 와요.
{
"code": "10001",
"data": {
"id": "crt_c3d4e5f6g7h8i9j0k1l2m3n4",
"kind": "CANCELLATION",
"status": "PENDING",
"amount": 20000,
"supplyCost": 18182,
"tax": 1818,
"originalId": "crt_a1b2c3d4e5f6g7h8i9j0k1l2",
"partial": true,
"cancelReason": "거래 취소",
"...": "..."
}
}
오류
| HTTP | code |
발생 조건 |
|---|---|---|
| 401 | 290006 |
API 키가 올바르지 않아요. |
| 403 | 290007 |
읽기 전용 API 키예요. |
| 404 | 20015 |
현금영수증이 없어요. |
| 409 | 240006 |
취소할 수 없는 상태예요. data.reason은 NTS_PENDING, NOT_ISSUED, FULLY_CANCELED, CANCELLATION_RECEIPT 중 하나이고, data.message에 안내 문구가 와요. |
| 422 | 30007 |
JSON 본문을 읽을 수 없거나 reason이 없어요. |
| 422 | 240001 |
현금영수증 ID 형식이 틀렸어요. |
| 422 | 240004 |
amount가 0 이하이거나 남은 금액보다 커요. |
| 422 | 240008 |
팝빌이 취소를 거절했어요. data에 status가 FAILED인 취소 영수증이 와요. 원본은 그대로예요. |
| 422 | 240010 |
reason이 비었거나 100자를 넘어요. |