# `POST /shipment/{id}/shipping` Protected. Requires a valid session cookie (`credentials: 'include'`). Create package for a shipment Creates a physical package (shipping) for the shipment manifest. Accepts carrier and parcel tracking code. If state is `shipped`, deducts stock for the shipment's lines via ledger movements. ## Path parameters | Param | Required | Type | Description | |-------|----------|------|-------------| | `id` | yes | integer | Shipment ID | ## Body (JSON) | Field | Required | Type | Description | |-------|----------|------|-------------| | `type` | yes | string | | | `state` | yes | string | | | `trackingCode` | no | string | Carrier parcel tracking code | | `carrier` | no | string | Carrier name (e.g. DHL, UPS, DPD) | | `warehouseId` | no | integer | Optional warehouse ID for stock deduction when state is shipped | ```json { "type": "…", "state": "…", "trackingCode": "…", "carrier": "…", "warehouseId": 1 } ``` ## Response `201` Created package ```json { "shipping": { "id": 1, "manifestId": 1, "number": "…", "trackingCode": "…", "carrier": "…", "type": "…", "state": "…" } } ``` ## Errors | Status | Description | |--------|-------------| | 400 | Validation error, manifest is not a shipment, or no company selected — `{"error":"…"}` | | 401 | Unauthorized — `{"error":"…"}` | | 404 | Shipment or warehouse not found — `{"error":"…"}` | --- _Generated from `@openapi` JSDoc. Do not edit by hand — run `npm run docs:api`._