---
title: invoice.expired
description: 입금 기한이 지나 주문이 만료되면 보내는 이벤트예요.
sidebar:
  order: 5
---

결제 대기 주문의 입금 기한(`expiresAt`)이 지나면 페이싱크가 1분 안에 주문을 `EXPIRED`로 바꾸고 이 이벤트를 보내요. 입금 기한 없이 만든 주문은 만료되지 않아요.

만료된 주문은 자동 매칭에서 빠져요. 만료 뒤에 들어온 입금은 매칭되지 않은 입금으로 남고, `failureReason`이 `ONLY_EXPIRED`예요. 대시보드에서 직접 매칭하거나 [결제 완료 처리](/api-reference/invoices/mark-as-paid)하면 `invoice.paid`가 와요.

[카페24 연동](/cafe24)으로 만든 주문은 쇼핑몰 설정에 따라 카페24 주문도 취소해요.

## 페이로드

`data`는 만료된 [주문 페이로드](/api-reference/webhooks/overview#주문-페이로드)예요. `status`는 `EXPIRED`이고 `expiredAt`이 있어요.

```json
{
  "id": "evt_c2d3e4f5g6h7i8j9k0l1m2n3",
  "type": "invoice.expired",
  "timestamp": "2026-04-29T03:14:40Z",
  "data": {
    "id": "ivc_a1b2c3d4e5f6g7h8i9j0k1l2",
    "number": 1043,
    "status": "EXPIRED",
    "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-29T03:14:40Z",
    "expiresAt": "2026-04-29T03:14:15Z",
    "paidAt": null,
    "paidTrigger": null,
    "matchedTransactionId": null,
    "canceledAt": null,
    "cancelReason": null,
    "expiredAt": "2026-04-29T03:14:40Z",
    "reopenedAt": null
  }
}
```

## 처리 예시

```js Node.js
if (event.type === "invoice.expired") {
  const orderId = event.data.metadata.orderId;
  if (orderId) {
    await db.orders.update(orderId, { status: "EXPIRED" });
    await notifyCustomer(orderId, "입금 기한이 지나 주문이 취소됐어요.");
  }
}
```
