# Receive GRN Box

**PUT** `/v1/inventory/grn/boxes/:box_id/receive`

Records the actual received quantity for a box. Automatically:

1. Creates or increments a batch at the GRN's destination location (if `lot_number` or `expiry_date` is set on the box).
2. Writes an immutable movement ledger entry (`movement_type: receive`).
3. Updates box status to `matched` (received_qty == expected_qty) or `discrepancy`.
4. Recomputes the GRN status — closes the GRN when all boxes are processed.

### Path parameters

| Field | Type | Description |
|---|---|---|
| `box_id` | integer | Box ID |

### Request fields

| Field | Type | Description |
|---|---|---|
| `received_qty` | integer | **Required.** Actual quantity counted |
| `note` | string | Override the box note |

### Response fields

| Field | Type | Description |
|---|---|---|
| `box` | object | Updated box with final status and received_qty |

### Box status values

| Status | Meaning |
|---|---|
| `pending` | Not yet received |
| `matched` | received_qty equals expected_qty |
| `discrepancy` | received_qty differs from expected_qty |
