# Cập nhật COD của đơn

> Thay đổi số tiền thu hộ (COD) cần thu từ người nhận cho một đơn đã tồn tại.

## Endpoint

| Môi trường | URL |
| --- | --- |
| Production | `https://online-gateway.ghn.vn/shiip/public-api/v2/shipping-order/updateCOD` |
| Staging | `https://dev-online-gateway.ghn.vn/shiip/public-api/v2/shipping-order/updateCOD` |

**Method**: `POST`

## Headers

| Header | Bắt buộc | Mô tả |
| --- | --- | --- |
| `Content-Type` | Có | `application/json` |
| `Token` | Có | Token của shop (do GHN cấp) — [lấy token](https://developer.ghn.vn/vi/docs/token/get-token.md) |
| `ShopId` | Có | Shop ID (số nguyên) |

## Tham số

- **order_code** (String): Mã vận đơn GHN. Đơn phải thuộc tài khoản của bạn (bạn là người sở hữu hoặc người tạo), nếu không request sẽ bị từ chối
- **cod_amount** (Int): Số tiền COD mới cần thu từ người nhận (VND). Tối đa `5,000,000` (do backend GHN kiểm soát). `0` để xóa COD

> **NOTE**
> Chỉ gửi hai trường này. Mọi trường thừa sẽ được chuyển thẳng vào hệ thống cập nhật đơn của GHN mà không kiểm tra — hãy giữ payload tối giản.

## Ví dụ Request

```bash
curl -X POST https://dev-online-gateway.ghn.vn/shiip/public-api/v2/shipping-order/updateCOD \
  -H "Token: 5c1d8a9e-2f4b-11ed-..." \
  -H "ShopId: 92837" \
  -H "Content-Type: application/json" \
  -d '{
    "order_code": "LADHFA",
    "cod_amount": 350000
  }'
```

## Response

### Thành công (HTTP 200)

_Lấy từ một lần gọi thật trên môi trường Staging._

```json
{
  "code": 200,
  "message": "Success",
  "data": null
}
```

### Các trường Response

| Trường | Kiểu | Mô tả |
| --- | --- | --- |
| `code` | Int | Mã HTTP (`200` nếu thành công) |
| `message` | String | Thông báo kết quả (`Success`) |
| `data` | null | Luôn `null` với API này |

### Lỗi — đơn không tồn tại / không thuộc về bạn (HTTP 400)

_Lấy từ một lần gọi thật trên môi trường Staging (mã đơn không tồn tại)._

```json
{
  "code": 400,
  "message": "Lỗi gọi API: corev2_tenant_order_detail - Đơn hàng không tồn tại",
  "data": null
}
```

> **NOTE**
> Phần có ý nghĩa của `message` là đoạn sau dấu `-` cuối cùng (ở đây là `Đơn hàng không tồn tại`). Phần đầu là tham chiếu nội bộ — hãy parse `code`/`code_message`, đừng dựa vào `message`.

## Bảng mã lỗi

| Điều kiện | HTTP | Ý nghĩa |
| --- | --- | --- |
| Đơn không tồn tại (`Đơn hàng không tồn tại`) | 400 | Mã đơn không tồn tại |
| Không có quyền (`Không có quyền thao tác`) | 400 | Đơn không thuộc tài khoản của bạn (bạn không phải người sở hữu hay người tạo) |
| `USER_ERR_COMMON` | 400 | Thiếu `order_code` hoặc dữ liệu không hợp lệ |
| `SERVER_ERROR_COMMON` | 500 | Lỗi hệ thống |
