---
title: invoice.reopened
description: 매칭이 해제돼 결제 완료 주문이 결제 대기나 만료로 돌아가면 보내는 이벤트예요.
sidebar:
  order: 7
---

대시보드 **입금 내역**에서 입금과 주문의 매칭을 해제하면 보내요. 잘못 매칭했거나 구매자에게 입금을 돌려준 경우에 매칭을 해제해요.

매칭을 해제하면 주문은 입금 기한이 남아 있으면 `PENDING`, 지났으면 `EXPIRED`로 돌아가요. `paidAt`, `paidAmount`, `amountDiff`, `paidTrigger`, `matchedTransactionId`는 `null`로 바뀌고 `reopenedAt`이 기록돼요.

이미 결제 완료로 처리한 주문이라면 내 시스템에서도 결제를 되돌려야 해요. 배송이나 서비스 제공을 멈출지 확인하세요.

## 페이로드

`data`는 다시 열린 [주문 페이로드](/api-reference/webhooks/overview#주문-페이로드)예요.

```json
{
  "id": "evt_e4f5g6h7i8j9k0l1m2n3o4p5",
  "type": "invoice.reopened",
  "timestamp": "2026-04-28T07:10:00Z",
  "data": {
    "id": "ivc_a1b2c3d4e5f6g7h8i9j0k1l2",
    "number": 1043,
    "status": "PENDING",
    "customer": {
      "name": "홍길동",
      "email": "hong@example.com",
      "phoneNumber": "01012345678"
    },
    "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-28T07:10:00Z",
    "expiresAt": "2026-04-29T03:14:15Z",
    "paidAt": null,
    "paidTrigger": null,
    "matchedTransactionId": null,
    "canceledAt": null,
    "cancelReason": null,
    "expiredAt": null,
    "reopenedAt": "2026-04-28T07:10:00Z"
  }
}
```

## 처리 예시

```js Node.js
if (event.type === "invoice.reopened") {
  const orderId = event.data.metadata.orderId;
  if (orderId) {
    await db.orders.update(orderId, { status: event.data.status === "EXPIRED" ? "EXPIRED" : "PENDING" });
    await alertOperator(orderId, "페이싱크에서 결제 매칭이 해제됐어요.");
  }
}
```

v1 웹훅에는 이 이벤트가 없어요. 매칭을 해제하는 일이 있다면 v2 웹훅을 쓰세요.
