---
title: 주문 수정
description: PATCH /v2/invoices/{id} 로 결제 대기 주문의 입금자명, 금액, 입금 기한, 받을 계좌, 현금영수증 정보를 바꿔요.
sidebar:
  order: 4
  badge: PATCH
---

```http
PATCH /v2/invoices/{id}
```

결제 대기(`PENDING`) 주문을 바꿔요. 보낸 필드만 바뀌고 나머지는 그대로예요. 바꾸면 [`invoice.updated`](/api-reference/webhooks/invoice-updated) 웹훅이 가요.

결제 완료, 만료, 취소된 주문은 바꿀 수 없어요. 만료된 주문을 다시 받으려면 새 주문을 만드세요.

## 경로 파라미터

| 파라미터 | 타입 | 설명 |
| --- | --- | --- |
| `id` | string | 바꿀 주문 ID예요. `ivc_`로 시작해요. |

## 요청 본문

| 필드 | 타입 | 설명 |
| --- | --- | --- |
| `customer.name` | string | 입금자명이에요. 1~16자, 공백 없이 입력해요. |
| `customer.email` | string \| null | 구매자 이메일이에요. `null`을 보내면 지워요. |
| `customer.phoneNumber` | string \| null | 구매자 전화번호예요. `null`을 보내면 지워요. |
| `amount` | integer | 금액(원)이에요. 0보다 커야 해요. |
| `expiresAt` | integer \| null | 새 입금 기한이에요. Unix 초로 보내요. 지금보다 뒤이고 365일 안이어야 해요. `null`을 보내면 기한을 없애요. |
| `extendDays` | integer | 입금 기한을 며칠 늘릴지 정해요. 1~365예요. 지금 기한이 이미 지났거나 없으면 지금부터 늘려요. `expiresAt`과 함께 보내면 `extendDays`를 써요. |
| `bankAccountIds` | string[] | 입금받을 계좌 ID 목록이에요. 빈 배열이면 모든 계좌로 받아요. |
| `cashReceipt` | object \| null | 결제 완료 때 발급할 현금영수증 정보예요. `null`을 보내면 지워요. 형식은 [주문 생성](/api-reference/invoices/issue#요청-본문)과 같아요. |
| `resendGuideEmail` | boolean | `true`면 금액이나 입금 기한이 바뀌었을 때 구매자에게 바뀐 내용을 담은 입금 안내 메일을 다시 보내요. 기본값은 `false`예요. |

입금자명, 금액, 받을 계좌를 바꾸면 [주문 충돌 규칙](/multi-bank-account-routing#주문-충돌-규칙)을 다시 검사해요.

`resendGuideEmail`이 `true`인데 금액과 입금 기한이 그대로면 메일을 보내지 않아요. 메일을 보내려면 주문에 구매자 이메일과 입금 기한이 있고, 받을 수 있는 계좌가 하나 이상 있어야 해요.

## 요청 예시

입금 기한을 3일 늘리고 구매자에게 다시 알려요.

```bash cURL
curl -X PATCH https://api.paysync.kr/v2/invoices/ivc_a1b2c3d4e5f6g7h8i9j0k1l2 \
  -H "Authorization: Bearer $PAYSYNC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "extendDays": 3, "resendGuideEmail": true }'
```

```js Node.js
const res = await fetch(`https://api.paysync.kr/v2/invoices/${invoiceId}`, {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.PAYSYNC_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ extendDays: 3, resendGuideEmail: true }),
});
const { code, data } = await res.json();
```

```python Python
import os
import requests

res = requests.patch(
    f"https://api.paysync.kr/v2/invoices/{invoice_id}",
    headers={"Authorization": f"Bearer {os.environ['PAYSYNC_API_KEY']}"},
    json={"extendDays": 3, "resendGuideEmail": True},
)
print(res.json())
```

## 응답

바뀐 [주문 객체](/api-reference/invoices/get#주문-객체)가 와요. `history`는 없어요.

```json 200 OK
{
  "code": "10001",
  "data": {
    "id": "ivc_a1b2c3d4e5f6g7h8i9j0k1l2",
    "number": 1043,
    "status": "PENDING",
    "amount": 50000,
    "expiresAt": 1777691655,
    "updatedAt": 1777350000,
    "guideEmailSentAt": 1777350000,
    "...": "..."
  }
}
```

## 오류

| HTTP | `code` | 발생 조건 |
| --- | --- | --- |
| 401 | `290006` | API 키가 올바르지 않아요. |
| 403 | `80002` | [API 키의 계좌 범위](/api-reference#api-키-계좌-제한) 밖의 주문이거나, `bankAccountIds`에 범위 밖의 계좌를 넣었거나 비웠어요. |
| 403 | `290007` | 읽기 전용 API 키예요. |
| 404 | `20014` | 주문이 없어요. |
| 409 | `220010` | 바꾼 내용이 다른 결제 대기 주문과 겹쳐요. `data`에 그 주문의 `invoiceId`와 `number`가 와요. |
| 409 | `220011` | 결제 대기 주문이 아니에요. |
| 409 | `220022` | 입금 안내 메일을 보내려는데 받을 수 있는 계좌가 없어요. |
| 409 | `220023` | 입금 안내 메일을 보내려는데 입금 기한이 없어요. |
| 422 | `30007` | JSON 본문을 읽을 수 없어요. |
| 422 | `30009` | 바꿀 필드가 하나도 없어요. |
| 422 | `220001` | 주문 ID 형식이 틀렸어요. |
| 422 | `220002`~`220009` | 필드 값이 [주문 생성](/api-reference/invoices/issue#오류)의 검증을 통과하지 못했어요. |
| 422 | `220018` | `bankAccountIds`에 1원 인증을 마치지 않은 계좌가 있어요. |
