Products
Before receives or orders can be places in a warehouse you'll need to create your product in the Logistics Plus WMS. You can create and retrieve products using these endpoints. A product only needs to be created once. The product code is a SKU and is treated as a unique identifier within the Warehouse API. It cannot be edited afterward. The unique product code will be used all all subsequent requests to the Warehouse API.
Note: The full OpenAPI specification for the Logistics Plus Warehouse API is available at the following link: https://api.logisticsplus.com/warehouse/api-docs.
Best Practices
Products should be unique for all variation. For example, if a product has two variations, such as the same model phone in with two options for storage size and two options for colors, each variant should have its own product code.
To make it easy for warehouse workers to identify your product, you should also use unique descriptions for each product. This is especially important when creating multiple variants. For example, if you have an iPhone 13 in two colors you may end up with "iPhone 13 Pro Max 256GB Graphite" and "iPhone 13 Pro Max 256GB Gold".
When creating a product, it's important the product code is a unique and immutable product identifier. This will enable you to easily tie associate data from the Warehouse API with your system.
Create a Product
To create a new warehouse product, you can make a POST request to the /warehouse/v1/products endpoint. The JSON payload for this request should include at minimum the following fields: productCode, productDescription, and productUnit. Here's an example of how the request should look:
Please note that the productCode field has a maximum length of 35 characters.
Here's an example of how the request should look:
POST /warehouse/v1/products HTTP/1.1
x-api-key: your_api_key
organization-slug: your_organization_slug (if required)
Content-Type: application/json
{
"productCode": "LGT-K380-BT-KYBD",
"productDescription": "Logitech K380 Multi-Device Bluetooth Keyboard",
"productUnit": "UNT",
"unitPrice": "39.99",
"unitPriceCurrency": "USD",
"dimHeight": 0.58,
"dimWidth": 10.91,
"dimDepth": 4.93,
"dimUnit": "IN",
"weightPerProduct": 0.9,
"weightPerProductUnit": "LB",
"clientProductCode": "097855114990",
"clientProductDescription": "Logitech K380 Multi-Device Bluetooth Keyboard",
"clientProductUnit": "UNT"
}
Please ensure your productCode is within the character limit to avoid any validation errors. Replace your_api_key with your actual API key and your_organization_slug with your organization slug, if required.
If the request is successful, you will receive a 200 OK status code and a JSON response containing the newly created product.
{
"data": {
"id": "6434b470dd3283f909d1b915",
"productCode": "LGT-K380-BT-KYBD",
"productDescription": "Logitech K380 Multi-Device Bluetooth Keyboard",
"productUnit": "UNT",
"unitPrice": "39.99",
"unitPriceCurrency": "USD",
"productAttributes": [],
"dimHeight": 0.58,
"dimWidth": 10.91,
"dimDepth": 4.93,
"dimUnit": "IN",
"weightPerProduct": 0.9,
"weightPerProductUnit": "LB",
"clientProductCode": "097855114990",
"clientProductDescription": "Logitech K380 Multi-Device Bluetooth Keyboard",
"clientProductUnit": "UNT"
},
"id": "f758d2895f344fe2899ee64d1921b83c",
"resource": [],
"errors": []
}
Using Product Attributes
When integrating with the Logistics Plus Warehouse API, product attributes can be utilized to provide additional properties that describe a product, such as batch, serial numbers, and expiry dates. Your representative will provide any configured product attributes in your integration packet. If you need to create additional attributes for your products, please reach out to your Logistics Plus representative who can assist you in setting up the necessary attributes.
Once attributes have been created, you can configure your products to use them. Here's an example of how to create a product with a "SERIAL NUMBER" attribute:
POST /warehouse/v1/products HTTP/1.1
x-api-key: your_api_key
organization-slug: your_organization_slug (if required)
Content-Type: application/json
{
"productCode": "APL-IPH-13PRO-256-GRPH",
"productDescription": "iPhone 13 Pro Max 256GB Graphite",
"productUnit": "UNT",
"unitPrice": "1199.99",
"unitPriceCurrency": "USD",
"dimHeight": 6.33,
"dimWidth": 3.07,
"dimDepth": 0.3,
"dimUnit": "IN",
"weightPerProduct": 8.46,
"weightPerProductUnit": "OZ",
"clientProductCode": "885909723200",
"clientProductDescription": "Apple iPhone 13 Pro Max 256GB - Graphite",
"clientProductUnit": "UNT",
"pickMode": "ANE"
"productAttributes": [
{
"key": "SERIAL NUMBER",
"requiredForWarehouseRelease": true
"requiredForRfConfirmation":false
}
]
}
Replace your_api_key with your actual API key and your_organization_slug with your organization slug, if required.
Pick Mode
The pickMode for a Product enforces the warehousing team to perform certain actions when confirming and releasing a product. Two values are currently supported via the API.
| Value | Meaning | Description |
|---|---|---|
| ANE | Attribute Neutral | This value is specific for serialized products. If this is being passed, a part attribute containing the your organizations serial number attribute key must exist with requiredForReleaseCapture set to false and requiredForRfConfirmation set to true. This allows the serial number to be captured for a product on an order at time of picking by the warehousing team instead of sending the exact serial number on the Order to be picked. |
| ASP | Attribute Specified | This value is defaulted (unless specified) to when a product has no part attributes configured. It can be used when any part attribute exists including the serial number. It will allow any one of the part attributes to be marked as requiredForRfConfirmation. This guarantees that the product with this specific attribute value is picked by the warehousing team if its value is passed on an Order. |
JSON Elements
Key
The key field will be a fixed value provided in your credentials document. For example, "SERIAL NUMBER" may be used to identify products which require serial number management.
Required for Release
The isRequiredForRelease field indicates whether the serial number is required for the product's release. If it is set to false, the serial number must be provided either through the API payload or by the warehouse anytime this SKU is used on a warehouse receive. Additionally, the value will be available in inventory and on any related outbound orders. If it is set to true, the value will not be captured on warehouse receives or available in inventory but will force the warehouse worker to scan/enter the value before the related inventory leaves the warehouse.
Required for RF Confirmation
This boolean value allows a product to have a single part attribute that MUST be RF Confirmed in the warehouse. If you have ASP selected, you can RF Confirm on ANY of the enabled attributes but only one. the same rule applies that the RF Confirmed attribute cannot be required for release capture.
Using Custom Fields
Custom fields can now be added to the product the JSON payload. This new feature allows you to extend the product information without any configurations by the Logistics Plus team. This is designed for the dynamic addition of fields, but please note that updates to these custom fields via the API are not currently supported.
For example:
{
"productCode": "LGT-K380-BT-KYBD",
"productDescription": "Logitech K380 Multi-Device Bluetooth Keyboard",
"productUnit": "UNT",
"unitPrice": "39.99",
"unitPriceCurrency": "USD",
"dimHeight": 0.58,
"dimWidth": 10.91,
"dimDepth": 4.93,
"dimUnit": "IN",
"weightPerProduct": 0.9,
"weightPerProductUnit": "LB",
"clientProductCode": "097855114990",
"clientProductDescription": "Logitech K380 Multi-Device Bluetooth Keyboard",
"clientProductUnit": "UNT",
"customFields": [
{
"key": "YOURKEY",
"value": "YOURVALUE"
},
{
"key": "YOURKEY",
"value": "YOURVALUE"
}
]
}
If the request is successful, the product will be created with the custom fields included in the product information.
Get a Product
Once a product is created, you can retrieve it using its unique identifier or via the product code. If you do not have the unique identifer, you can find it in the warehouse/v1/products/actions/get-id/{productCode} endpoint
To get a warehouse product by Id, you can make a GET request to the /warehouse/v1/products/{id} endpoint. The GET route contains a path parameter: id which will be the Id returned from the POST request you made previously. Here's an example of how the request should look:
GET /warehouse/v1/products/{yourIdHere} HTTP/1.1
x-api-key: your_api_key
organization-slug: your_organization_slug (if required)
To get a warehouse product by productCode, there are two options.
- You can make a
GETrequest to the/warehouse/v1/products/actions/get-id/{productCode}endpoint. This will return only the id of the product which can then be used with the aboveGETrequest to get the entire data of the product. This is more lightweight and has better performance when only the id is needed. - You can make a
GETrequest to the/warehouse/v1/productsendpoint with the productCode as a query Parameter. EX: /warehouse/v1/products?productcode={productCode}. This will return the entire data of the product.
Update a Product
The PATCH products API is currently in BETA. Some unexpected errors may occur.
To update an existing warehouse product, you can make a PATCH request to the /warehouse/V1/Products/{id} endpoint. The PATCH route contains a path parameter: id which will be the id returned from the POST request made previously. The same rules apply when creating or updating a product with the exception that LP currently does not allow some fields such as product attributes to be updated.
Any fields provided on the payload will be updated to the new value provided. If a field is not included, it will remain in its original state. if the product is successfully updated, you will receive a 200 OK status code back with the complete data of the product.
Please see below for a sample request and response body.
Request:
PATCH /warehouse/v1/products/{YourIdHere} HTTP/1.1
x-api-key: your_api_key
organization-slug: your_organization_slug (if required)
Content-Type: application/json
{
"productCode": "ExampleProduct-1234",
"productDescription": "description",
"productUnit": "UNT",
"unitPrice": "22.00",
"unitPriceCurrency": "USD",
"dimHeight": 0.1,
"dimWidth": 0.1,
"dimDepth": 0.1,
"dimUnit": "IN",
"weightPerProduct": 0.1,
"weightPerProductUnit": "LB"
}
Response:
{
"data": {
"id": "{YourIdReturnedHere}",
"productCode": "ExampleProduct-1234",
"productDescription": "description",
"productUnit": "UNT",
"unitPrice": "22.00",
"unitPriceCurrency": "USD",
"productAttributes": [],
"customFields": [],
"dimHeight": 0.1,
"dimWidth": 0.1,
"dimDepth": 0.1,
"dimUnit": "IN",
"weightPerProduct": 0.1,
"weightPerProductUnit": "LB",
"pickMode": "ASP"
},
"id": "e8ea2c17-7049-453e-85a0-1e542e38160a",
"resource": [],
"errors": []
}