After processing the inventory data from the client import and factoring in issues such as pending orders, an Export file is made by Kibo and delivered to the front end for display. This file takes into account all current orders that impact inventory and informs the client about the actual quantities they have available to sell. This available quantity is calculated by subtracting the pending order items and safety stock from the amount "on hand," so Inventory Export is valuable to clients to maintain reliability in their inventory management.
Some clients may use the imported inventory data to assign orders to their fulfillment locations. The inventory data is also provided to clients through the Inventory Export process.
Using Inventory Export
Two types of exports are available: Aggregate Exports and Location Exports.
- Aggregate Exports provides total stock information for items across all fulfillment locations included in the export.
- Location Exports provide item stock and location information, sorted by fulfillment location.
Note that there is no "trickle feed" in Inventory Export.
Getting Started
Setup Requirements
To get started, there must be either an SFTP (Secure File Transfer Protocol) site or an S3 bucket where Kibo can pick up and drop off inventory files. The client needs to provide a username, password, remote path, and remote path archive for the file transmission location.
SFTP Best Practices
Kibo recommends following the below guidelines to maximize SFTP performance. These suggestions apply to any file pickup and ingestion processes from a client-side or third party SFTP droppoint, as well as Kibo's own file delivery.
- Ensuring access to the SFTP droppoint is the responsibility of the client or third party maintainer. Make sure that Kibo's SFTP user has read and write permissions to the directory, which is required to deliver files.
- For example, in the command line this may look like
drw-rw-r--
(which means the owner has read/write, the group has read/write, others are read-only)
- For example, in the command line this may look like
- Ensure files do not pile up over time → utilize /archive folders and periodic cleanup of historic data. Monitor the droppoint and clean up files that are no longer needed.
- If you need to retain the files, archive them to another folder once they’ve been processed.
- Ensure disk space usage is monitored and alerts the maintaining IT team in time to address low disk space situations before causing connection issues for Kibo.
Configuring Export Settings
You can use the Inventory API to configure your settings for the inventory export process to either S3 or FTP endpoints. There are three /create endpoints used to achieve this: a general endpoint, an S3-specific endpoint, and an FTP-specific endpoint. You can also configure fetch files with the Save Fetch Config API.
You may use any of these, but the general endpoint allows you to fine-tune your settings by specifying specific location groups and sites that those configurations should apply to, when inventory is being exported from those locations or sites. These specifications cannot be defined with the S3 and FTP specific endpoints.
Configuring these settings will determine how these files are delivered and received, but that will not activate any exports. Contact Kibo Support to enable inventory imports and exports.
Scheduling Imports and Exports
Inventory imports can occur at any time, as Kibo is constantly looking for new files on the client server. Exports will occur on a regular, set schedule as Kibo Engineering will set up cron jobs to export inventory daily at a specific time.
Inventory Export Files
Inventory data is provided as XML files, compressed into Zip format. Kibo also provides a Trigger or Control file with the data. The Trigger file is written to the SFTP or S3 after transmission of the Inventory Export file is completed. Trigger files are empty files and have an extension of .done.
Aggregate Export Files
Aggregate Export files provide total stock information for items across multiple fulfillment locations.
File Names for Aggregate Exports
Files are named as follows:
- T__AGG_YYMMDDhhmmss
- File name extension is .xml for XML files; .zip for zip files; .done for Trigger files.
Where:
- is the Kibo-assigned tenant ID (for example, 3456)
- AGG designates that this is an Aggregate file
- YYMMDD is the date as year-month-day that the file is created (for example, 130301 for March 1, 2013)
- hhmmss is the time as hour-minute-second that the file is created in Pacific Standard Military Time (for example, 225912 for 10:59:12 p.m. PT)
Data Elements
Element | Required | Data Type | Occurs | Description |
item | Yes | Number of items in inventory (1 to 50) | A container that includes information for one item in inventory. | |
PartNumber | Optional | String | 0 or 1/item | The merchant-assigned Part Number for the product. The maximum length is 50. |
UPC | Yes | String | 0 or 1/item | The UPC of the product. The maximum length is 50. |
SKU | Optional | String | 0 or 1/item | The SKU for the product. The maximum length is 50. |
QuantityOnHand | Yes | Integer | 1/item | The number of this item in inventory. |
QuantityAvailable | Yes | Integer | 1/item | The number of this item that are available to sell; in other words, the QuantityOnHand minus the quantity already allocated minus the safety stock level. |
Attributes | Optional | Array | 0 or 1/item | A list of attributes that are assigned to the item. |
InventoryLocatorName | Optional | String | 0 or 1/item | An identifier to indicate where a particular SKU exists within a location. For example, "Aisle 5" would indicate that the bin this item belongs to is located in Aisle 5. The maximum length is 50. |
Location Export Files
Location Exports provide item stock and location information, by fulfillment location.
File Names for Location Exports
Files are named as follows:
- T__LOC_YYMMDDhhmmss
- File name extension is .xml for XML files; .zip for zip files; .done for Trigger files.
Where:
- is the Kibo-assigned manufacturer ID (for example, 3456)
- LOC designates that this is a location file
- YYMMDD is the date as year-month-day that the file is created (for example, 130301 for March 1, 2013)
- hhmmss is the time as hour-minute-second that the file is created in Pacific Standard Military Time (for example, 225912 for 10:59:12 p.m. PT.
Data Elements
Element | Required | Data Type (Length) | Occurs | Description |
Location | Yes | Struct | Number of locations in inventory file | A container that includes all the information for this location. |
LocationCode | Yes | String (50) | 1/location | The name of this location. |
LocationActive | Yes | Int | 1/location | Indicates whether this location is active (1) or not active (0). |
STHEnabled | Optional | Int | 1/location | Indicates whether this store fulfills Standard (ship to home) orders; 0 (no) or 1 (yes). If not specified, default of 1 (yes) is used. |
STSEnabled | Optional | Int | 1/location | Indicates whether this store fulfills Ship to Store orders; 0 (no) or 1 (yes). If not specified, default of 0 (no) is used. |
PickupEnabled | Optional | Int | 1/location | Indicates whether this store fulfills BOPIS orders; 0 (no) or 1 (yes). If not specified, default of 0 (no) is used. |
IncludeInAggregateFeed | Optional | Int | 1/location | Indicates whether this location information is included in the aggregate inventory export file; 0 (no) or 1 (yes). If not specified, default of 1 (yes) is used. |
Item | Yes | Number of items in inventory file (1 to 50) | A container that includes information for one item in inventory. | |
PartNumber | Optional | String (50) | 0 or 1/item | The merchant-assigned Part Number for the product. The maximum length is 50. |
UPC | Yes | String (50) | 0 or 1/item | The UPC of the product. The maximum length is 50. |
SKU | Optional | String (50) | 0 or 1/item | The SKU for the product. The maximum length is 50. |
QuantityOnHand | Yes | Int | 1/item | The number of this item in inventory. |
QuantityAvailable | Yes | Int | 1/item | The number of this item that are available to sell; in other words, the QuantityOnHand minus the quantity already allocated minus the safety stock level. |
SafetyStock | Optional | Int | 0 or 1/Item | Quantity you want to keep in stock to ensure your stock isn't completely depleted. Both Safety Stock and Floor are optional; most people prefer Safety Stock to Floor. |
Floor | Optional | Int | 0 or 1/item | Absolute minimum number that should be in stock at any time. Both Safety Stock and Floor are optional; most people prefer Safety Stock to Floor. |
Attributes | Optional | Array | 0 or 1/item | A list of attributes that are assigned to the item. |
InventoryLocatorName | Optional | String | 0 or 1/item | An identifier to indicate where a particular SKU exists within a location. For example, "Aisle 5" would indicate that the bin this item belongs to is located in Aisle 5. The maximum length is 50. The maximum length is 50. |
Example Files
Aggregate Export
<?xml version="1.0" encoding="UTF-8"?> <InventoryAggregateExport xmlns="http://api.example.com/xsd/InventoryAggregateExport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Item> <PartNumber>8888074513</PartNumber> <UPC>8888074513</UPC> <SKU>8888074513</SKU> <QuantityAvailable>10</QuantityAvailable> <QuantityOnHand>15</QuantityOnHand> <Floor>0</Floor> </Item> <Item> <PartNumber>8888074514</PartNumber> <UPC>8888074514</UPC> <SKU>8888074514</SKU> <QuantityAvailable>0</QuantityAvailable> <QuantityOnHand>10</QuantityOnHand> <Floor>0</Floor> </Item> </InventoryAggregateExport>
Location Export
<?xml version="1.0"?> <InventoryExport xmlns="http://api.example.com/xsd/InventoryExport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Location> <LocationCode>1010</LocationCode> <LocationActive>true</LocationActive> <STHEnabled>true</STHEnabled> <RestockEnabled>false</RestockEnabled> <PickupEnabled>true</PickupEnabled> <IncludeInAggregateFeed>true</IncludeInAggregateFeed> <Item> <PartNumber>11223344</PartNumber> <UPC>11223344</UPC> <QuantityAvailable>10</QuantityAvailable> <QuantityOnHand>12</QuantityOnHand> <SafetyStock>5</SafetyStock> <Floor>2</Floor> <LTD>1</LTD> <InventoryLocatorName>Aisle 3</InventoryLocatorName> </Item> <Item> <SKU>11223345</SKU> <QuantityAvailable>1</QuantityAvailable> <QuantityOnHand>2</QuantityOnHand> </Item> </Location> <Location> <LocationCode>1011</LocationCode> <LocationActive>false</LocationActive> <STHEnabled>false</STHEnabled> <RestockEnabled>true</RestockEnabled> <PickupEnabled>true</PickupEnabled> <IncludeInAggregateFeed>true</IncludeInAggregateFeed> <Item> <PartNumber>11223346-XL</PartNumber> <UPC>11335577</UPC> <QuantityAvailable>0</QuantityAvailable> <QuantityOnHand>0</QuantityOnHand> <LTD>2</LTD> <InventoryLocatorName>Aisle 2</InventoryLocatorName> </Item> <Item> <UPC>22446688</UPC> <SKU>xxxx-yyy-zzz-1</SKU> <QuantityAvailable>0</QuantityAvailable> <QuantityOnHand>1</QuantityOnHand> </Item> </Location> </InventoryExport>