### Tehden ERP version 26.2.08 released 12.05.2026

New API version **v2605**. All v2308 endpoints are available under `/api/v2605/...`; URIs and behaviour
are unchanged except for the terminology renames below. v2308 remains available and unchanged.

#### Endpoints

- **Resource renamed: sale deliveries -> picking units** (`/saleDeliveries` -> `/pickingUnits`)
- **Resource renamed: purchase deliveries -> shelving units** (`/purchaseDeliveries` -> `/shelvingUnits`)

- `POST /pickingUnits` (formerly `POST /saleDeliveries`)
  - Renamed request field `delivery.allowOverCollection` -> `delivery.allowOverPicking`
  - Renamed request field `delivery.deliveryNote` -> `delivery.note`
  - Renamed option `options.autoCollect` -> `options.autoPick`

- `GET /pickingUnits` (formerly `GET /saleDeliveries`)
  - Renamed filter `saleDeliveryIds` -> `pickingUnitIds`
  - Renamed include value `collector` -> `picker`
  - Renamed include value `purchaseDelivery` -> `shelvingUnit`
  - Renamed include value `cancelingSaleDelivery` -> `cancelingPickingUnit`
  - Renamed include value `canceledSaleDelivery` -> `canceledPickingUnit`
  - Renamed response field `saleDeliveryId` -> `pickingUnitId`
  - Renamed response field `saleDeliveryRowId` -> `pickingUnitRowId`
  - Renamed response field `parentSaleDeliveryRowId` -> `parentPickingUnitRowId`
  - Renamed response field `deliveryNumber` -> `number`
  - Renamed response field `deliveryNote` -> `note`
  - Renamed response field `collector` -> `picker`
  - Renamed response field `purchaseDelivery` -> `shelvingUnit` (and `purchaseDeliveryId` -> `shelvingUnitId`)
  - Renamed response field `cancelingSaleDelivery` -> `cancelingPickingUnit`
  - Renamed response field `canceledSaleDelivery` -> `canceledPickingUnit`
  - Renamed `state` value `collect` -> `pick` (values: `request`, `pick`, `ready`)
  - Renamed response field `statistics.collected` -> `statistics.picked`

- `GET /shelvingUnits` (formerly `GET /purchaseDeliveries`)
  - Renamed filter `purchaseDeliveryIds` -> `shelvingUnitIds`
  - Renamed response field `purchaseDeliveryId` -> `shelvingUnitId`
  - Renamed response field `deliveryNumber` -> `number`
  - Renamed response field `closed` -> `closeTime`
  - Renamed row field `purchaseDeliveryRowId` -> `shelvingUnitRowId`
  - (`state` enum `request`/`shelve`/`ready` and `type` enum unchanged)

- `GET /products` and `GET /products/{productId}` 
  - Renamed include value `costProducts` -> `expenseProducts`
  - Renamed include value `inSelectionGroups` -> `inAssortmentGroups`
  - Renamed include value `selectionProducts` -> `assortmentGroupProducts`
  - Renamed response field `selectionType` -> `assortmentGroupProductType` (in assortment-group objects)
  - Renamed `type` enum value `selection` -> `assortmentGroup`
  - Renamed `type` enum value `productPackage` -> `productBundle`
  - Renamed `state` enum value `arrivingInSelection` -> `comingToAssortment`

- `POST /products`
  - Renamed `type` enum value `selection` -> `assortmentGroup`
  - Renamed `type` enum value `productPackage` -> `productBundle`

- `POST /productStocks/{productStockId}/inventory`
  - Renamed request field `amount` -> `balance`
  - Renamed response field `freeAmount` -> `freeBalance`

- `POST /sales/transfer`
  - Renamed row field `saleDeliveryRowId` -> `pickingUnitRowId` (in `rows[]` and `rows[].costs[]`)
  - Renamed return-row field `collectProductStockId` -> `pickProductStockId` (in `rows[]` and `rows[].costs[]`)
  - Renamed `type` enum value `preSale` -> `advanceSale`

- `POST /saleOrders`
  - Renamed option `options.addCostProducts` -> `options.addExpenseProducts`
  - Renamed request field `ownUse.stockExpenceAccountId` -> `ownUse.stockExpenseAccountId` (typo fix)

- `GET /saleOrders`
  - Renamed filter `orderTimeStart` -> `orderedAfter`
  - Renamed filter `orderTimeEnd` -> `orderedBefore`
  - Renamed response field `orderDate` -> `orderTime` (now reflects that the value includes a time component)

- `POST /saleOrders/{saleOrderId}/messages`
  - Renamed request field `saleDeliveryId` -> `pickingUnitId`

- `POST /shipments/waybills`
  - Renamed request field `saleDeliveries` -> `pickingUnits` (and `invoices[].saleDeliveries` -> `invoices[].pickingUnits`)
  - Renamed request field `saleDeliveryId` -> `pickingUnitId`
  - Renamed request field `saleDeliveryRowId` -> `pickingUnitRowId`
  - Renamed request field `parentSaleDeliveryRowId` -> `parentPickingUnitRowId`
  - Renamed response field `saleDeliveryIds` -> `pickingUnitIds`

- **Endpoint renamed: `GET /stocks/branchAmounts` -> `GET /stocks/branchBalances`**
  - Renamed response field `amount` -> `balance`
  - Renamed response field `freeAmount` -> `freeBalance`
- **Endpoint renamed: `GET /stocks/amounts` -> `GET /stocks/balances`**
  - Renamed response field `amount` -> `balance`
  - Renamed response field `freeAmount` -> `freeBalance`

- `GET /saleDeliveryMethods`
  - Renamed response field `costProductId` -> `expenseProductId`

- `POST /debtCollections/payments` - _confirm: functional change (TD-15195), may already be announced_
  - Renamed request field `payments[].reference` -> `payments[].invoiceReferenceNumber`
  - Added request field `settlementPaymentReference`; payment array de-nested from `[*].payments[*]` to top-level `payments[*]`

- `POST /debtCollections/accountsReceivables/events` - _confirm (TD-15195)_
  - Removed `payment` as an accepted event `type`

**No API field/param changes** (validators, enums, and converters identical to v2308): AssortmentGroups,
Branches, CustomerGroups, Customers, EInvoices, ImportJobs, Invoices, MoneyStorages, PaymentTerms,
PaymentTypes, ProductGroups, PurchaseOrders, Purchases, Reports, Reservations.
