Files
dashback/docs/api/routes/order/_id/shipment.post.md
2026-10-21 03:31:55 +02:00

3.9 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 no string Article SKU (omit for SKU-less order lines)
lines[].orderLineId no integer Order line id (lines[].id of the order); required for SKU-less lines, ignored when sku is given
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": "…",
      "orderLineId": 1,
      "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": "…",
        "shippable": true
      }
    ],
    "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, article not in order, or article not shippable — {"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.