invoice.canceled
주문이 취소되면 보내는 이벤트예요.
주문이 취소되면 보내요. 이런 경우에 와요.
v1 웹훅에서는 같은 시점에 invoice.deleted로 와요.
페이로드
data는 취소된 주문 페이로드예요. status는 CANCELED이고, 취소 사유를 넣었다면 cancelReason에 와요.
{
"id": "evt_d3e4f5g6h7i8j9k0l1m2n3o4",
"type": "invoice.canceled",
"timestamp": "2026-04-28T06:00:00Z",
"data": {
"id": "ivc_a1b2c3d4e5f6g7h8i9j0k1l2",
"number": 1043,
"status": "CANCELED",
"customer": {
"name": "홍길동",
"email": null,
"phoneNumber": null
},
"amount": 50000,
"paidAmount": null,
"amountDiff": null,
"bankAccountIds": [],
"cashReceipt": null,
"metadata": { "orderId": "ORDER-2026-0001" },
"source": "API",
"createdAt": "2026-04-28T03:14:15Z",
"updatedAt": "2026-04-28T06:00:00Z",
"expiresAt": "2026-04-29T03:14:15Z",
"paidAt": null,
"paidTrigger": null,
"matchedTransactionId": null,
"canceledAt": "2026-04-28T06:00:00Z",
"cancelReason": "고객 요청으로 주문 취소",
"expiredAt": null,
"reopenedAt": null
}
}
처리 예시
내 시스템의 주문도 취소 상태로 바꿔서 상태를 맞춰요.
if (event.type === "invoice.canceled") {
const orderId = event.data.metadata.orderId;
if (orderId) {
await db.orders.update(orderId, {
status: "CANCELLED",
cancelledAt: new Date(event.data.canceledAt),
cancelReason: event.data.cancelReason,
});
}
}