본문으로 건너뛰기
페이싱크 개발자센터
Esc
↑↓이동↵열기⌘J미리보기
이 페이지에서

주문 취소

POST /v2/invoices/{id}/cancel 로 결제 대기나 만료 주문을 취소해요.

POST /v2/invoices/{id}/cancel

결제 대기(PENDING)나 만료(EXPIRED) 주문을 취소해요. 취소한 주문에는 입금이 매칭되지 않고, 같은 입금자명과 금액으로 새 주문을 만들 수 있어요. 취소한 주문도 목록과 단건 조회에 CANCELED 상태로 남아요.

취소하면 v2 웹훅에는 invoice.canceled, v1 웹훅에는 invoice.deleted가 가요. 카페24 연동으로 만든 주문을 취소해도 카페24 주문은 취소하지 않아요.

결제 완료된 주문은 취소할 수 없어요. 대시보드 입금 내역에서 매칭을 해제하면 주문이 결제 대기로 돌아가고, 그다음 취소할 수 있어요.

v1 API의 주문 삭제와 같은 일을 해요.

경로 파라미터

파라미터 타입 설명
id string 취소할 주문 ID예요. ivc_로 시작해요.

요청 본문

본문은 보내지 않아도 돼요.

필드 타입 필수 설명
reason string 취소 사유예요. 200자까지예요. 대시보드와 cancelReason에 보여요.

요청 예시

curl -X POST https://api.paysync.kr/v2/invoices/ivc_a1b2c3d4e5f6g7h8i9j0k1l2/cancel \
  -H "Authorization: Bearer $PAYSYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "고객 요청으로 주문 취소" }'
const res = await fetch(`https://api.paysync.kr/v2/invoices/${invoiceId}/cancel`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.PAYSYNC_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ reason: "고객 요청으로 주문 취소" }),
});
const { code, data } = await res.json();
import os
import requests

res = requests.post(
    f"https://api.paysync.kr/v2/invoices/{invoice_id}/cancel",
    headers={"Authorization": f"Bearer {os.environ['PAYSYNC_API_KEY']}"},
    json={"reason": "고객 요청으로 주문 취소"},
)
print(res.json())

응답

status가 CANCELED로 바뀐 주문 객체가 와요.

{
  "code": "10001",
  "data": {
    "id": "ivc_a1b2c3d4e5f6g7h8i9j0k1l2",
    "number": 1043,
    "status": "CANCELED",
    "canceledAt": 1777350000,
    "cancelReason": "고객 요청으로 주문 취소",
    "canceledBy": { "type": "API_KEY", "accountId": null, "apiKeyId": "apk_k3l4m5n6o7p8q9r0s1t2u3v4", "name": "쇼핑몰 서버" },
    "...": "..."
  }
}

오류

HTTP code 발생 조건
401 290006 API 키가 올바르지 않아요.
403 80002 API 키의 계좌 범위 밖의 주문이에요.
403 290007 읽기 전용 API 키예요.
404 20014 주문이 없어요.
409 220011 이미 결제 완료됐거나 취소된 주문이에요.
422 30007 JSON 본문을 읽을 수 없어요.
422 220001 주문 ID 형식이 틀렸어요.
422 220020 reason이 200자를 넘어요.

이 페이지가 도움이 되었나요?