3.6 KiB
POST /order/{id}/shipment
Protected. Requires a valid session cookie (credentials: 'include').
Create shipment for an order
Creates a new shipment manifest (Lieferschein) for an order containing one, some, or all items from the order.
If lines is omitted or empty, all remaining unshipped items from the order are included automatically.
On individual line items, amount is optional and defaults to the remaining unshipped quantity for that article.
Auto-assigns the shipment number formatted as <order_number><shipment_prefix><index>, e.g. AUF-000001-L-1.
Automatically books shipment lines out on the ledger and deducts warehouse stock for stock-tracked articles.
Updates the materialized ordersummary table (shipped_quantity, is_shipped) and emits SSE events
(order, shipment, stock, ledger, articles) so that inventory and summaries are rerendered in real time.
Path parameters
| Param | Required | Type | Description |
|---|---|---|---|
id |
yes | integer | Order ID |
Body (JSON)
| Field | Required | Type | Description |
|---|---|---|---|
date |
no | string | Optional shipment date (defaults to current date) |
warehouseId |
no | integer | Optional target warehouse ID to deduct stock from (defaults to company default warehouse) |
externalNumber |
no | string | Optional external delivery note reference (defaults to order.externalNumber or order.number) |
lines |
yes | object[] | Positions to ship |
lines[].sku |
yes | string | Article SKU |
lines[].amount |
no | number | Quantity to ship. Defaults to remaining unshipped quantity for this SKU. |
lines[].name |
no | string | |
lines[].pu |
no | number | |
lines[].net |
no | number | |
lines[].rebate |
no | number | |
lines[].taxrate |
no | number | |
lines[].comment |
no | string |
{
"date": "2026-08-10",
"warehouseId": 1,
"externalNumber": "…",
"lines": [
{
"sku": "…",
"amount": 1,
"name": "…",
"pu": 1,
"net": 1,
"rebate": 1,
"taxrate": 1,
"comment": "…"
}
]
}
Response 201
Created shipment
{
"shipment": {
"id": 1,
"number": "…",
"type": "shipment",
"entityId": 1,
"externalNumber": "…",
"date": "…",
"createdAt": "…",
"lineCount": 1,
"packageCount": 1,
"lines": [
{
"id": 1,
"sku": "…",
"name": "…",
"pu": 1,
"amount": 1,
"net": 1,
"rebate": 1,
"taxrate": 1,
"comment": "…"
}
],
"shippings": [
{
"id": 1,
"manifestId": 1,
"number": "…",
"trackingCode": "…",
"carrierId": 1,
"carrier": "…",
"type": "…",
"state": "…"
}
],
"files": [
{
"id": 1,
"manifestId": 1,
"fileId": 1,
"sort": 1,
"hash": "…",
"mimetype": "…",
"name": "…",
"size": 1,
"created": "2026-08-10T00:00:00.000Z",
"modified": "2026-08-10T00:00:00.000Z",
"skeledash": "…",
"thumbx": 1,
"thumby": 1,
"meta": {}
}
],
"state": "new"
}
}
Errors
| Status | Description |
|---|---|
| 400 | Validation error or article not in order — {"error":"…"} |
| 401 | Unauthorized — {"error":"…"} |
| 404 | Order not found — {"error":"…"} |
| 409 | Cumulative shipment amount exceeds ordered amount, or insufficient stock — {"error":"…"} |
Generated from @openapi JSDoc. Do not edit by hand — run npm run docs:api.