API Reference
The Warehouse Client communicates with Business Central exclusively via an OData v4 API.
This reference is aimed at integrators and administrators who want to understand or extend the
interface. For normal use of the app, it is not required.
| Property |
Value |
| Publisher |
altenbrand |
| API group |
mcWarehouse |
| Version |
v1.0 |
| Base path |
/api/altenbrand/mcWarehouse/v1.0/companies({id})/… |
| Authentication |
OAuth2 (Microsoft Entra ID) via the device account, see Licensing & Modules |
| Permission |
Permission set ALN MCWC API User |
Entities vs. actions
Read access (GET) goes through OData entities. Write operations (posting, locking,
labels, photos …) go through bound actions (POST) on the warehouseActions entity. The
write actions check the license and the terminal module access (module enabled
globally or at the terminal) before execution.
Entities
All entities are read-only – except terminals.
| Entity Set |
Source |
Purpose |
setup |
MC Warehouse Client Setup |
Global configuration |
terminals |
MC Warehouse Terminal |
Read terminals; POST registers a terminal (with a terminal-limit check), PATCH changes description and location |
terminalShippingAgents |
MC Terminal Shipping Agent |
Allowed shipping agents per terminal |
assignmentLocks |
MC Warehouse Assignment Lock |
Document locks |
scanLogEntries |
MC Warehouse Scan Log |
Log of the scans |
packages |
MC Warehouse Package |
Packages per shipment |
packagingMaterials |
Packaging material (Hub) |
Packaging materials for recording packages |
pickDocuments / pickLines |
Pick document / line |
Pick lists and their lines |
openOrders |
Sales Header |
Released orders not yet assigned to a pick document |
salesOrderLines |
Sales Line |
Item lines of sales orders |
purchaseOrders / purchaseLines |
Purchase Header / Line |
Purchase orders not completely received and their item lines (goods receipt) |
salesShipments / shipmentLines |
Sales Shipment Header / Line |
Posted shipments; lines of type Item only |
shipmentLabels |
Shipment label (Hub) |
Shipping labels per posted shipment |
shipmentPackages |
Shipment package (Hub) |
Packages of a multi-colli shipment with their own label |
itemLookups |
Item |
Item lookup (number, GTIN) |
itemLedgerEntries |
Item Ledger Entry |
Inventory entries of an item |
postedSalesInvoices / postedSalesInvoiceLines |
Sales Invoice Header / Line |
Posted invoices (return/complaint) |
warehouseActivities / warehouseActivityLines |
Warehouse Activity Header / Line |
BC inventory picks |
complaints |
MC Warehouse Complaint |
Complaints |
Actions (POST)
Actions are called bound to a record of warehouseActions:
POST …/companies({id})/warehouseActions({setupId})/Microsoft.NAV.<action>
Parameters are passed as a JSON object; most actions return a JSON result as text. Almost all
write actions expect terminalCode (and often userId) – these end up in the posting, the lock
and the scan log.
Configuration, license & sign-in
| Action |
Purpose |
getEffectiveConfig |
Effective configuration of a terminal (global setup + terminal overrides) |
getModuleActivation / getLicenseStatus |
Is the module activated and licensed? getLicenseStatus additionally returns status and message. Deliberately not license-checked, so the app can show the reason |
getModuleCounts |
Open work per module for the main-menu badge counters |
validateSettingsPin |
Validate the settings PIN (locked after failed attempts) |
loginWarehouseUser / logoutWarehouseUser |
Sign an employee in/out at the terminal with badge barcode + PIN |
getCompanyInfo |
Company name and logo (for the app header) |
Locking & assignment
| Action |
Purpose |
acquireLock / releaseLock |
Lock/release a document for a terminal (docType = document type as text, e.g. Sales Shipment) |
getNextShipment |
Goods Issue Mode Posted Shipments: next posted shipment for the terminal |
getNextSalesOrder |
Goods Issue Mode Sales Orders: next released order for the terminal (incl. header data) |
getNextProcessedPick |
Goods Issue Mode Inventory Picks: next picked but not yet posted inventory pick |
Goods receipt
| Action |
Purpose |
prepareOrderReceipt |
Prepare a purchase order for capture at the terminal |
postLineReceipt / postLineReceiptWithTracking |
Capture the quantity of a purchase line – optionally with lot/serial no. and expiration date |
postOrderReceipt |
Post the goods receipt with posting date and vendor shipment no. (vendorShipmentNo); returns the receipt number |
Goods issue
| Action |
Purpose |
shipPostedShipment |
Posted Shipments: create the label from the already posted shipment and mark it as processed – without re-posting the order |
createPackagesForShipment |
Posted Shipments, multi-colli: one label per package from the packing plan (packingPlanJson) |
shipSalesOrderPartial |
Sales Orders: post the scanned (partial) quantities from the ship plan (shipPlanJson) as a shipment and create the label |
calculateShipWeight |
Shipping weight of an order |
postShipment / postShipmentWithPackages |
Post an order as a shipment (optionally with invoice) or with one label per package from a packing plan |
getShipmentNotifications / getShipmentConfirmations |
Notices and items to confirm for an order |
getProcessedPickLines |
Inventory Picks: the picked quantities the packer confirms |
calculateWmsShipWeight |
Inventory Picks: parcel weight from the picked quantities |
completeWmsShipment |
Inventory Picks: verify the confirmed quantities, create the label from the open order and only then post the pick; on a label failure nothing is posted |
Shipping labels, packages & delivery note
| Action |
Purpose |
createShipmentLabel |
Create a label for a posted shipment; empty providerCode/serviceCode = automatic resolution via the shipment's shipping agent |
getShipmentLabelData / getShipmentLabelByShipmentNo |
Retrieve label data (Base64 + format) |
getPackageLabelData |
Label of a single package (multi-colli) |
addPackage / getPackageCount |
Record a package for a shipment / number of packages |
getDeliveryNotePdf |
Delivery note of a posted shipment as PDF (Base64); the former name getPackingListPdf remains as an alias |
getShippingAgents |
Allowed shipping agents of the terminal |
Pick list
| Action |
Purpose |
releaseOrder / releaseOrders |
Create a pick list for one order or for several orders (comma-separated) in one list |
confirmPickItem |
Confirm the picked quantity of an item in a pick run |
getOpenPickRuns / getPickRunLines / cancelPickRun |
Open/interrupted pick runs of the terminal, their lines, cancel a run (orders are released again) |
Warehouse activity (BC inventory picks)
| Action |
Purpose |
findActivityByBarcode / getOpenActivityCount |
Find an inventory pick by barcode / count open ones per location |
assignPickSerialNo |
Assign a scanned serial number to a pick line (splits the line if needed) |
registerPick |
Complete an inventory pick: post it – or, in the Goods Issue Mode Inventory Picks, only report it as picked |
Items, serials & lots
| Action |
Purpose |
lookupBarcode / lookupBarcodeWithUOM |
Resolve an item by barcode (incl. unit of measure) |
validateSerialNo / validateSerialNoForShipment |
Validate a serial number (in general or against a shipment) |
getItemBinContents / getItemTrackingInfo / getAvailableTracking |
Bin contents, item tracking and available lots/serials of an item |
Putaway (shelf no.)
| Action |
Purpose |
assignShelf / validateShelfCode |
Assign a shelf no. / validate it against the shelf code pattern |
getPendingPutawayItems / getItemShelfInfo |
Items with stock but without a shelf no. / shelf info of an item |
Stock transfer, inventory & bins
| Action |
Purpose |
getTransferContext / validateTransferBin |
Transfer context (bin contents) / validate the target bin |
postBinTransfer / postLocationTransfer |
Move bin-to-bin or location-to-location; postLocationTransfer returns transferOrderNo and posted (true = posted immediately, false = only created and released) |
getCountContext / getDueCountList / postCount |
Inventory: count context, list of due counts, post a count |
getCountSheet / postCountSheet |
Inventory: read all locations/bins of an item and post them in one count |
postSerialCount / postSerialCountSheet |
Inventory: count serial-tracked items by the scanned serial numbers |
getOpenPutaways / getPutawayLines / registerPutaway |
Bin put-away: open put-away documents, lines, register |
getPutawayContext / postAdHocPutaway |
Ad-hoc bin put-away |
calculateReplenishment / getOpenMovements / getMovementLines / registerMovement |
Bin replenishment: calculate, fetch movements and register them |
Label print, weighing & photo
| Action |
Purpose |
printItemLabel / printItemLabelPdf / getLabelItemInfo |
Item/bin label as ZPL or as PDF (report Item Label) / item data for the label |
getItemWeightInfo / saveItemWeight |
Read item weights / write net and gross weight to the item card |
uploadPhoto / deletePhoto |
Attach a photo (JPEG, max. 5 MB) to a document / delete it |
getPhotos / getPhotoContent / getPhotoCount / documentExists |
List a document's photos / image content / count / check whether the document exists |
Return & complaint
| Action |
Purpose |
getReturnReasons |
Return reasons released for the terminals (Show on Warehouse Terminal) |
postReturn / postServiceReturn |
Create a return for an invoice line as a credit memo or as a return order |
postComplaint / updateComplaintStatus |
Record a complaint / advance its status |
Next steps