Download OpenAPI specification:Download
Last Modified: 2025-02-25 14:00:00
A few features are only available in KiSoft One 2.10. These features are marked as "available in KiSoft One 2.10".
This document represents the API description for flat sorter products. It is a subset of the KiSoft One API specification.
This API is documented in OpenAPI Specification (OAS) format. In addition to standard OpenAPI syntax a few vendor extensions are used for easier documentation.
The standard UTF-8 is used for the character encoding for the data interchange between KiSoft One and the higher-level system.
Throughout this documentation, monospace letters
are used for data definitions (fields, values, etc...).
When referencing certain values of data fields, every "value"
is written in quotation marks.
All data fields are named in camelCase
schema with lowercase first letter.
All component references in the OAS schema are named in PascalCase
schema with uppercase first letter.
Since this specification can be used on non HTTP transport layers, it omits the use of URI parameters (e.g.
PATCH /frameworkRoute/{clientNumber}/{orderNumber}
).
A date attribute has to be transmitted as string in the following format: YYYY-MM-DD
, e. g. 2024-03-15
.
A time attribute has to be transmitted as string in the following format: HH:MM:SS
, e. g. 14:30:00
.
A date-time attribute has to be transmitted as string in the following format: YYYY-MM-DDTHH:MM:SSZ
, e.g. 2024-01-24T14:15:22Z
.
For the transmission of identifying attributes in the openAPI messages the following rules must be followed:
It is highly recommended to use HTTPS as the default transport layer for communication. Nevertheless, the interface may be used without any transport layer security.
Note that using the interface without transport layer security is not recommended and should only be used in isolated network environments to ensure communication interference is prevented.
This interface allows for application layer security by providing authentication methods.
Accessing the interface can be restricted to authenticated communication partners.
The following authentication flows are provided.
With machine-to-machine (M2M) applications, such as this host interface, the system authenticates and authorizes another app rather than a user. For this scenario, typical authentication schemes like username + password or social logins don't make sense. Instead, M2M apps use the Client Credentials Flow (defined in OAuth 2.0 RFC 6749, section 4.4), in which they pass along their Client ID and Client Secret to authenticate themselves and get a token.
The flow contains the following interaction steps:
JSON and/or XML messages on e.g. simple TCP/IP connections without the URL and HTTP-method have to compensate for missing information. A corresponding encapsulation element/object has to be added in order to achieve this.
Information which would normally be part of the HTTP header, will be added as additional fields to the top element/object. (see examples below). The name of the object will compensate for the missing http request method and the http request path Response messages will contain an additional attribute called httpResponseStatus which represents the request status
Note: When using the Replychannels via Websockets, the same rules apply to the message syntax as are used with TCP/IP socket streams.
Note: XML messages always provide the encapsulating element including the attributes, to provide a valid xml document.
JSON Examples:
WEB-JSON: DELETE /goodsOutOrder
{
"clientNumber": "DEFAULT",
"orderNumber": "ORD_00001"
}
TCP-JSON:
"DeleteGoodsOutOrder": {
"clientNumber": "DEFAULT",
"orderNumber": "ORD_00001"
}
TCP-JSON Response:
"DeleteGoodsOutOrder_Response": {
"httpResponseStatus": 200,
"clientNumber": "DEFAULT",
"orderNumber": "ORD_00001"
}
XML Examples:
WEB-XML: DELETE /goodsOutOrder
<DeleteGoodsOutOrder clientNumber="DEFAULT" orderNumber="UT-GO-00001" />
TCP-XML:
<DeleteGoodsOutOrder clientNumber="DEFAULT" orderNumber="UT-GO-00001" />
Response:
<DeleteGoodsOutOrder_Response clientNumber="DEFAULT" orderNumber="UT-GO-00001" httpResponseStatus="200"/>
For a further example see Example XML Message.
The base URL for the communication with KiSoft One for incoming messages is: /kisoft/oneapi/v1/
Incoming URL examples (KiSoft One is server):
/kisoft/oneapi/v1/customer
with html-method "PUT"/kisoft/oneapi/v1/goodsOutOrder
with html-method "POST"/kisoft/oneapi/v1/relocationRequest/loadUnits
with html-method "POST"KiSoft One acts per default as server - and the higher-level system needs to establish permanent Websocket connections.
In order to provide response messages without the need for the higher level system to create a multitude of webhook endpoints a websocket connection is provided.
The websockets can be requested at the following paths:
/kisoft/oneapi/v1/websocket/MovementData
for all events regarding movement data/kisoft/oneapi/v1/websocket/StockChanges
for all live stock changes/kisoft/oneapi/v1/websocket/Reports
for requested reports and stock snapshotsIt is only possible to create one socket connection per endpoint.
Since the websocket connection is no longer a http transport layer, modifications to the messages described in Using the Interface on Non-HTTP Transport Layers apply.
In order to detect connection loss during idle communication times, the heartbeat message is sent every 60 seconds if no other messages are sent during this period.
If the heartbeat or other messages are not acknowledged by the higher level system, the connection is terminated by KiSoft and a new connection has to be established by the higher level system.
If it is required, that the higher-level system acts as server and KiSoft One acts as client for all outgoing reply messages, which are marked with "EVENT", then the higher-level system needs to define the base URL warehouse specific. Knapp will add the reply path based on the message in cammelCase.
Outgoing URL example:
https://10.89.17.1/one2host/oneapi/v1/goodsOutOrderReply
A flat sorter system consists of multiple different use cases depending on the deployed mode. For now Sort and Deliver
is the first available mode within the flat sorter product. Different processing modes will be added in the future. Custom processing modes which are fitted to specific business can be implemented outside of the standard product.
The Sort and Deliver
mode is one of the processing modes for a Flat Sorter. Sort and Deliver
covers the essential needs for a typical goods-out processing. Loading units (e.g. a parcel or a carton) are pre-advised to the sorter and routed to their desired destination within the sorter once they arrive. A loading unit consists of only one item. No commissioning (order picking) takes place in this mode.
Below diagram describes the basic process of transmitting a goods-out order to KiSoft including the followup sortation process. In the beginning the host system creates a goods out order. A goods out order consists of only one loadingUnit
with a specific loadingUnitCode
. The loadingUnitCode
e.g. describes the optical identifyable barcode on the parcel/ carton. Destinations within the sorter are found based on the provided workCriteria
that is both attached to the order and the destination (station).
As described in above use case work stations must have a workCriteria
assigned in order to receive orders matching the same criteria. In order to set the criteria for a given work station, the postWorkStationConfiguration
message has to be sent. By sending this message the currently active criteria will be replaced. Loading units which are currently still on transport to the given work station will still be diverted to avoid non-matching trays circling.
A work station describes a dropoff/ divert/ chute within a flat sorter. Loading units will exit the sorter at this point. In order to query all work stations attached to the sorter, a PostRequestWorkStationStatus
has to be sent without any content. This will cause the system to return all available work stations.
Within a flat sorter it may happen that errors occur, like no read or no data items. In order to handle these special workCriteria
can be assigned to work stations. In order to allow a station to receive no read items, assign SORTER_NO_READ
to a work station. In addition to that SORTER_NO_DATA
can be assigned for no data items. SORTER_CIRCULATION_REACHED
might be assigned if items shall be diverted at a special work station when the number of allowed circulations is reached.
operationId: PostKiSoft2HostHeartbeat
This message provides the heartbeat functionality as described in Websocket Response Channel
time required | string <date-time> (EventTime) Exact time at which the event / status change was recorded. |
{- "time": "2023-01-24T14:15:22Z"
}
operationId: PostWorkStationStatus
This message provides the information about the status and the warehouse tasks of stations. The warehouse tasks are sent, when a station is active.
This message can be sent because of the following two reasons:
stationName required | string (StationName) <= 20 characters ^[A-Z][A-Z0-9_]*$ Identifying name of the station. The station name is unique within KiSoft One. | ||||||||
stationStatus required | string (StationStatus) <= 20 characters Enum: "ACTIVE" "INACTIVE" "LOCKED" Defines the status of the station.
| ||||||||
Array of objects (WarehouseTask) Warehouse tasks assigned to the station. | |||||||||
Array
| |||||||||
userCode | string (UserCode) <= 128 characters User logged on to the station. |
[- {
- "stationName": "M01",
- "stationStatus": "ACTIVE",
- "warehouseTasks": [
- {
- "workCriteria": [
- "LARGE",
- "DEPOT_01"
]
}
], - "userCode": "Picker1"
}
]
operationId: PostHost2KiSoftHeartbeat
This message can be used to monitor the availability of the KiSoft One Webserver.
time required | string <date-time> (EventTime) Exact time at which the event / status change was recorded. |
{- "time": "2023-01-24T14:15:22Z"
}
{- "codes": [
- "E-AKO-MAST-0001",
- "E-AKO-MAST-0002"
]
}
operationId: PostRequestWorkStationStatus
This message can be used to get the status of workstations. If stationName is transmitted, only the status for this station is returned. If no stationName is transmitted, all stations are returned. The response for this message is the message PostWorkStationStatus.
stationName | string (StationName) <= 20 characters ^[A-Z][A-Z0-9_]*$ Identifying name of the station. The station name is unique within KiSoft One. |
{- "stationName": "M01"
}
{- "codes": [
- "E-AKO-MAST-0001",
- "E-AKO-MAST-0002"
]
}
operationId: postWorkStationConfiguration
This message can be used to get the status of workstations. If stationName is transmitted, only the status for this station is returned. If no stationName is transmitted, all stations are returned. The response for this message is the message PostWorkStationStatus.
stationName required | string (StationName) <= 20 characters ^[A-Z][A-Z0-9_]*$ Identifying name of the station. The station name is unique within KiSoft One. | ||||||||
stationStatus required | string (StationStatus) <= 20 characters Enum: "ACTIVE" "INACTIVE" "LOCKED" Defines the status of the station.
| ||||||||
Array of objects (WarehouseTask) Warehouse tasks assigned to the station. | |||||||||
Array
| |||||||||
userCode | string (UserCode) <= 128 characters User logged on to the station. |
[- {
- "stationName": "M01",
- "stationStatus": "ACTIVE",
- "warehouseTasks": [
- {
- "workCriteria": [
- "LARGE",
- "DEPOT_01"
]
}
], - "userCode": "Picker1"
}
]
{- "codes": [
- "E-AKO-MAST-0001",
- "E-AKO-MAST-0002"
]
}
The Sort and Deliver
mode is one of the processing modes for a Flat Sorter. Sort and Deliver
covers the essential needs for a typical goods-out processing. Loading units (e.g. a parcel or a carton) are pre-advised to the sorter and routed to their desired destination within the sorter once they arrive.
operationId: PostGoodsOutOrderReply
Provides new processing information for an existing goods-out order.
This message is always sent to the higher-level system (no configuration available), when one of the following trigger events occur:
processingStatus
changes to one of the following values:"NEW"
(only for KiSoft created orders; createdBy
= "SYSTEM"
or "USER"
)"STARTED"
"PROCESSED"
"FINISHED"
"CANCELLED"
"RESTARTED"
processingResult
of one of the transmitted transportTargets
clientNumber required | string (ClientNumber) <= 30 characters ^[A-Z][A-Z0-9_]*$ Many entities in KiSoft are linked to a client by a The warehoused goods are always allocated to a client. Therefore when stock is created, the client is always used as a stock separating attribute. The process of submitting an order is handled by the client. The client takes its customer purchase orders and transmits this data to the warehouse operating company. The operating company is responsible for the outbound delivery of the goods. |
orderNumber required | string (OrderNumber) <= 32 characters ^[A-Z][A-Z0-9_]*$ Identifier assigned to an order. This information will be used as a general reference when communicating with the higher-level system. The order number is normally assigned by the system that generates the order. Various systems generate orders depending on the order type. A warehouse order includes all warehouse tasks that are necessary to process the warehouse order. |
processingStatus required | string (GoodsOutOrderProcessingStatus) <= 30 characters Enum: "NEW" "STARTED" "PROCESSED" … 3 more Represents the current state of an order.
Meaning:
|
statusEventTime | string <date-time> (EventTime) Exact time at which the event / status change was recorded. |
{- "clientNumber": "DEFAULT",
- "orderNumber": "ORD_00001",
- "processingStatus": "FINISHED",
- "statusEventTime": "2023-01-24T14:15:22Z"
}
operationId: PostGoodsOutOrder
Goods-Out orders are used to route goods to a specific destination within the sorter. Each order has certain properties that can have an influence on the processing of the order.
The routing of an order to a specific destination takes places based on so called workCriteria
. An order can have multiple of these criteria assign. The specific destination has to support all of the required criteria.
clientNumber required | string (ClientNumber) <= 30 characters ^[A-Z][A-Z0-9_]*$ Many entities in KiSoft are linked to a client by a The warehoused goods are always allocated to a client. Therefore when stock is created, the client is always used as a stock separating attribute. The process of submitting an order is handled by the client. The client takes its customer purchase orders and transmits this data to the warehouse operating company. The operating company is responsible for the outbound delivery of the goods. |
orderNumber required | string (OrderNumber) <= 32 characters ^[A-Z][A-Z0-9_]*$ Identifier assigned to an order. This information will be used as a general reference when communicating with the higher-level system. The order number is normally assigned by the system that generates the order. Various systems generate orders depending on the order type. A warehouse order includes all warehouse tasks that are necessary to process the warehouse order. |
sheetNumber required | integer (SheetNumber) >= 1 Expansion of the order number that are assigned e.g. to individual picking orders when they are generated. |
loadCarrier required | string (LoadCarrier) <= 30 characters ^[A-Z][A-Z0-9_]*$ Defines the type of the load carrier. Load carriers are divided by types. Examples of load carriers are: SMALL, MEDIUM, LARGE, FULL, HALF, QUARTER, EURO_PALLET |
priority | integer (Priority) >= 0 Gives the priority with which an order or request shall be treated by the system. The higher the number the higher the priority. |
loadUnitCode | string (LoadUnitCode) <= 36 characters ^[A-Z][A-Z0-9_]*$ Load unit number in a machine-readable optical code that identifies the load unit. Generally the load unit code has to be unique for the warehouse. The load unit is a logistical unit that can be transported, handled, stored and also picked as a whole. The forming of standard load units serves to create efficient goods flow processes. Depending on the requirements of the article and the goods flow processes, a load unit can consist of various elements. A typical load unit comprises a load carrier (e.g. container, carton, pallet, wire box pallet - covered by
|
departureTime | string <time> (DepartureTime) Planned departure for the route at dispatch area. In the case a departureTime set for an order and also for the frameworkRoute of this same order, only the departureTime of the order is considered. |
departureDate | string <date> (DepartureDate) Planned departure date for the route at dispatch area. |
customerNumber | string (CustomerNumber) <= 64 characters ^[A-Z][A-Z0-9_]*$ Identifier assigned to a customer by the client. |
workCriteria | Array of strings (WorkCriterion) [^[A-Z][A-Z0-9_]*$] Work criterion for the station, e.g. SHIPPER, CASE_TYPE. Names are free to choose and are added at runtime |
{- "clientNumber": "DEFAULT",
- "orderNumber": "ORD_00001",
- "sheetNumber": 1,
- "priority": 1,
- "loadCarrier": "FULL",
- "loadUnitCode": "LOU_0000001",
- "departureTime": "14:00:00",
- "departureDate": "2023-11-24",
- "customerNumber": "CUS_0000001",
- "workCriteria": [
- "LARGE",
- "DEPOT_01"
]
}
{- "clientNumber": "DEFAULT",
- "orderNumber": "ORD_00001",
- "sheetNumber": 1,
- "codes": [
- "E-AKO-MAST-0001",
- "E-AKO-MAST-0002"
], - "lineCodes": [
- {
- "lineReference": "HOST_REFERENCE_17",
- "lineCode": "E-AKO-MAST-0001"
}
]
}
operationId: PatchGoodsOutOrder
The PATCH operation is used to update information of goods-out order.
The possibility to updated certain information depends on the processingStatus
of the order:
processingStatus: field: |
"NEW" |
"STARTED" |
"PROCESSED" |
---|---|---|---|
priority |
✓ | ✓ | ✓ |
loadCarrier |
✓ | ||
loadUnitCode |
✓ | ||
departureTime |
✓ | ✓ | ✓ |
departureDate |
✓ | ✓ | ✓ |
workCriteria |
✓ |
clientNumber required | string (ClientNumber) <= 30 characters ^[A-Z][A-Z0-9_]*$ Many entities in KiSoft are linked to a client by a The warehoused goods are always allocated to a client. Therefore when stock is created, the client is always used as a stock separating attribute. The process of submitting an order is handled by the client. The client takes its customer purchase orders and transmits this data to the warehouse operating company. The operating company is responsible for the outbound delivery of the goods. |
orderNumber required | string (OrderNumber) <= 32 characters ^[A-Z][A-Z0-9_]*$ Identifier assigned to an order. This information will be used as a general reference when communicating with the higher-level system. The order number is normally assigned by the system that generates the order. Various systems generate orders depending on the order type. A warehouse order includes all warehouse tasks that are necessary to process the warehouse order. |
priority | integer (Priority) >= 0 Gives the priority with which an order or request shall be treated by the system. The higher the number the higher the priority. |
departureTime | string <time> (DepartureTime) Planned departure for the route at dispatch area. In the case a departureTime set for an order and also for the frameworkRoute of this same order, only the departureTime of the order is considered. |
departureDate | string <date> (DepartureDate) Planned departure date for the route at dispatch area. |
workCriteria | Array of strings (WorkCriterion) [^[A-Z][A-Z0-9_]*$] Work criterion for the station, e.g. SHIPPER, CASE_TYPE. Names are free to choose and are added at runtime |
{- "clientNumber": "DEFAULT",
- "orderNumber": "ORD_00001",
- "priority": 1,
- "departureTime": "14:00:00",
- "departureDate": "2023-11-24",
- "workCriteria": [
- "LARGE",
- "DEPOT_01"
]
}
{- "clientNumber": "DEFAULT",
- "orderNumber": "ORD_00001",
- "sheetNumber": 1,
- "codes": [
- "E-AKO-MAST-0001",
- "E-AKO-MAST-0002"
], - "lineCodes": [
- {
- "lineReference": "HOST_REFERENCE_17",
- "lineCode": "E-AKO-MAST-0001"
}
]
}
operationId: DeleteGoodsOutOrder
NOTE: The delete operation can be carried out as long as the
processingStatus
has not reached"STARTED"
.
clientNumber required | string (ClientNumber) <= 30 characters ^[A-Z][A-Z0-9_]*$ Many entities in KiSoft are linked to a client by a The warehoused goods are always allocated to a client. Therefore when stock is created, the client is always used as a stock separating attribute. The process of submitting an order is handled by the client. The client takes its customer purchase orders and transmits this data to the warehouse operating company. The operating company is responsible for the outbound delivery of the goods. |
orderNumber required | string (OrderNumber) <= 32 characters ^[A-Z][A-Z0-9_]*$ Identifier assigned to an order. This information will be used as a general reference when communicating with the higher-level system. The order number is normally assigned by the system that generates the order. Various systems generate orders depending on the order type. A warehouse order includes all warehouse tasks that are necessary to process the warehouse order. |
{- "clientNumber": "DEFAULT",
- "orderNumber": "ORD_00001"
}
{- "clientNumber": "DEFAULT",
- "orderNumber": "ORD_00001",
- "sheetNumber": 1,
- "codes": [
- "E-AKO-MAST-0001",
- "E-AKO-MAST-0002"
]
}
The following return codes can be sent to the higher level system:
Code | Description |
---|---|
200 | Processing of message was successful. |
207 | Some operations failed. |
400 | A bad request has been sent. |
409 | Operation is not allowed. |
Also the standard HTTP response status codes (e. g. 500) can be sent to the higher level system.
For further detail see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#server_error_responses.
The error numbers are built upon this schema:
The following error codes can be sent to the higher level system:
Code | Description |
---|---|
E-AKO-GENR-0001 | General error |
E-AKO-GENR-0002 | Format error |
E-AKO-MAST-0001 | Unknown article |
E-AKO-MAST-0002 | Unknown customer |
E-AKO-MAST-0003 | Unknown route |
E-AKO-MAST-0004 | Unknown supplier |
E-AKO-MAST-0005 | Unknown ramp number |
E-AKO-MAST-0006 | Wrong pack size |
E-AKO-MAST-0007 | No departure time |
E-AKO-MAST-0008 | Route departure time < route ramp occupation time is not allowed |
E-AKO-MAST-0009 | Unknown location |
E-AKO-MAST-0010 | Invalid overstock location code for article |
E-AKO-MAST-0011 | Wrong product eject code |
E-AKO-MAST-0012 | Wrong pack unit height dimension |
E-AKO-MAST-0013 | Wrong pack unit length dimension |
E-AKO-MAST-0014 | There is already an article on this location, but only one article is allowed |
E-AKO-MAST-0015 | Unknown storage area or station name |
E-AKO-MOVM-0001 | Invalid order number |
E-AKO-MOVM-0002 | An order with orderNumber/sheetNumber is active |
E-AKO-MOVM-0003 | Order number not found |
E-AKO-MOVM-0004 | CD1 unknown outbound delivery |
E-AKO-MOVM-0005 | Wrong order process status |
E-AKO-MOVM-0006 | Line not found (usually when trying to delete line in order-update) |
E-AKO-MOVM-0007 | Unknown sheet number |
E-AKO-MOVM-0008 | Order has a wrong start station |
E-AKO-MOVM-0009 | Wrong minimum, maximum or expected order weight |
E-AKO-MOVM-0010 | Wrong business case |
E-AKO-MOVM-0011 | An order with this load unit number is already active |
E-AKO-MOVM-0012 | Planning strategy does not exist |
E-AKO-STOC-0001 | Not enough stock available |
E-AKO-STOC-0002 | Active stock-record exists. Not allowed to delete referenced article or supplier |
E-AKO-STOC-0003 | Unknown load unit |
E-AKO-STOC-0005 | Storage unit already exists |
E-AKO-STOC-0006 | Load unit is currently in use for replenishment and can not be modified |
Example for message POST inboundDelivery:
<PostInboundDelivery clientNumber="DEFAULT" inboundDeliveryNumber="UT-INB-0001" priority="1" businessCase="GOODS_IN" supplierNumber="CUS_0000001">
<VasTask taskReference="VASTASK01" workZone="DEC01" vasProcessingNote="vasProcessingNote 1" lineReference="Host-Reference-1" />
<VasTask taskReference="VASTASK02" workZone="DEC01" vasProcessingNote="vasProcessingNote 2" lineReference="Host-Reference-1" />
<AdditionalProperty key="PHARMACY_CODE" value="Pharmacia" />
<AdditionalProperty key="USER_INSTRUCTION" value="validate the lot number" />
<InboundDeliveryLine lineReference="Host-Reference-1" articleNumber="UT_ART_0000001" packSize="1" expectedQuantity="1" loadUnitCode="LOU_0000001" loadCarrier="SMALL" stockType="STANDARD" lotNumber="LOT1234567890" dateMark="2030-08-30" serialNumber="1234ABC" reservationCode="ORD_1234567" noteOnProcessing="handle with care" stockQuality="NEW">
<StockLockReason>EXPIRED</StockLockReason>
<StockLockReason>QS_REQUIRED</StockLockReason>
<AdditionalProperty key="LINE_PROPERTY_HOST" value="value1" />
<AdditionalProperty key="LINE_PROPERTY_SPECIAL" value="value2" />
</InboundDeliveryLine>
<InboundDeliveryLine lineReference="Host-Reference-2" articleNumber="UT_ART_0000002" packSize="1" expectedQuantity="999" loadUnitCode="LOU_0000002" loadCarrier="LARGE" stockType="STANDARD" lotNumber="LOT987654321" dateMark="2030-12-30" serialNumber="XYT_000000002" reservationCode="RESERVATION_CODE_02" noteOnProcessing="fragile" stockQuality="NEW" >
<StockLockReason>HOST</StockLockReason>
<StockLockReason>QS_REQUIRED</StockLockReason>
<AdditionalProperty key="LINE_PROPERTY_HOST" value="Line2 value1" />
<AdditionalProperty key="LINE_PROPERTY_SPECIAL" value="Line2 value2" />
</InboundDeliveryLine>
</PostInboundDelivery>