Click Reply™ WMS Integration with CubeMaster API
A step-by-step guide to integrate Click Reply™ Warehouse Management System with the CubeMaster API POST /loads endpoint.
Current Date: March 10, 2025
Overview
Endpoint: https://api.cubemaster.net/loads
Method: POST
Purpose: Builds an optimized load plan for a mixed truck load based on cargo items, container specifications, and rules.
What is a RESTful API? (For Beginners)
A RESTful API (Representational State Transfer) is a way for programs to talk to each other over the internet, like a waiter taking your order to the kitchen. It uses standard web commands (called HTTP methods) such as:
- GET: Retrieve information (e.g., fetch a load plan).
- POST: Send data to create something (e.g., build a new load plan, as we’re doing here).
- PUT: Update existing data.
- DELETE: Remove data.
RESTful APIs use URLs (like /loads) to specify what you’re working with, and they often send/receive data in JSON format—a lightweight, readable way to structure information (like a digital packing list).
Signing Up for CubeMaster API
To use the CubeMaster API, you need an API key (TokenID) for authentication. Here's how to get started:
- Visit the CubeMaster website: https://cubemaster.net.
- Locate the "Sign In" option (typically found in the top-right corner).
- Fill out the registration form with your details (e.g., name, email, password, company information).
- After signing up, log in to your account dashboard.
- Navigate to the "Settings" - "Integration" section to generate your API key (TokenID).
- Generate an API key. Once generated, you’ll receive a unique
TokenID(e.g.,abc123xyz789). Copy this key and store it securely, as it will be used in the HTTP headers of your API requests. - Copy the TokenID and store it securely.
Note: The TokenID will be used in the HTTP headers of your POST request for authentication.
Authentication
Method: Use your TokenID in the HTTP header:
TokenID: your-token-id-here
This tells CubeMaster you’re allowed to use the API.
Request and Response Format
Request Format: JSON with fields like Title, Cargoes, and Containers (detailed in Step 3).
Response Format: Detailed JSON with load plans, placements, and graphics (detailed in Step 5).
-
Access Configuration Tools:
- Log into Click Reply™ WMS with admin privileges.
- Navigate to Configuration or Integration module.
-
Set Up External System Connection:
- Go to External Systems or API Integration.
-
Add a new external system:
- Name:
CubeMaster API - Base URL:
https://api.cubemaster.net - Authentication Type:
API Key - TokenID: Enter your CubeMaster TokenID (e.g.,
abc123xyz789). - Header:
TokenID: your-token-id-here
- Name:
-
Define Endpoint Mapping:
-
Add a new endpoint:
- Endpoint Path:
/loads - Method:
POST - Description:
Build Mixed Truck Load
- Endpoint Path:
-
Add a new endpoint:
Use Click Reply’s flexibility (over 1,000 parameters) to map warehouse data to the CubeMaster request structure.
-
Create a Data Template:
- In Process Configuration or Workflow Designer:
- Define a new process:
Build Mixed Load with CubeMaster. - Map fields from Click Reply™ to the request JSON.
-
Request JSON Mapping:
-
Title: Static or dynamic (e.g.,"New Mixed Truck Load").- Source: Static value or
Shipment.ID + " Mixed Load"
- Source: Static value or
-
Description: Optional note (e.g.,"Hello Web API").- Source: Static value or user input
-
Cargoes: Array of items to load.- Source: Inventory and Map or Outbound module
-
Mapping:
Name:Inventory.Item.SKULength,Width,Height:Product.Dimensions(in inches)Weight:Product.Weight(in pounds)OrientationsAllowed: Static"OrientationsAll"TurnAllowedOnFloor: Staticfalseor dynamicQty:Inventory.Item.QuantityColorKnownName: Optional,Product.Attributes.Color
-
Containers: Truck/container details.- Source: Outbound or static fleet data
-
Mapping:
VehicleType: Static"Dry"Name: Static"53FT-Intermodal"Length,Width,Height: Static630, 98, 106(inches)ColorKnownName: Static"Blue"
-
Rules: Load optimization rules.- Source: Static or warehouse policy
-
Mapping:
IsWeightLimited: StatictrueIsSequenceUsed: StaticfalseFillDirection: Static"FrontToRear"CalculationType: Static"MixLoad"
-
-
Sample Request JSON:
This is the exact request JSON you provided, showing how data is structured:
{ "Title": "New Mixed Truck Load", "Description": "Hello Web API", "Cargoes": [ { "Name": "ITEM001", "Length": 72, "Width": 30, "Height": 75, "Weight": 1002.45, "OrientationsAllowed": "OrientationsAll", "TurnAllowedOnFloor": false, "Qty": 16, "ColorKnownName": "Brown" }, { "Name": "ITEM002", "Length": 27.31, "Width": 37.5, "Height": 76.67, "Weight": 521.45, "OrientationsAllowed": "OrientationsAll", "TurnAllowedOnFloor": false, "Qty": 28, "ColorKnownName": "Aqua" }, { "Name": "SKU0005", "Length": 27.31, "Width": 9.5, "Height": 75.67, "Weight": 501.45, "OrientationsAllowed": "OrientationsAll", "TurnAllowedOnFloor": true, "Qty": 24, "ColorKnownName": "Beige" }, { "Name": "SKU0005", "Qty": 23 }, { "Name": "SKU0008", "Qty": 34 } ], "Containers": [ { "VehicleType": "Dry", "Name": "53FT-Intermodal", "Length": 630, "Width": 98, "Height": 106, "ColorKnownName": "Blue" } ], "Rules": { "IsWeightLimited": true, "IsSequenceUsed": false, "FillDirection": "FrontToRear", "CalculationType": "MixLoad" } } -
Sample Mapping Configuration:
Parameter: Title Source: "New Mixed Truck Load" --- Parameter: Cargoes.Name Source: Inventory.Item.SKU --- Parameter: Cargoes.Length Source: Product.Dimensions.Length --- Parameter: Cargoes.Qty Source: Inventory.Item.Quantity --- Parameter: Containers.Name Source: Static "53FT-Intermodal" --- Parameter: Rules.FillDirection Source: Static "FrontToRear" -
Transform to JSON:
Use Click Reply’s JSON transformation tool to format the mapped data into the request structure shown above.
-
Set Up the API Call:
- In the
Build Mixed Load with CubeMasterprocess: -
Add an HTTP Request action:
- URL:
https://api.cubemaster.net/loads - Method:
POST - Headers:
Content-Type: application/json,TokenID: your-token-id-here - Body: JSON template from Step 3
- URL:
- In the
-
Test the Call:
- Use Click Reply’s sandbox mode:
- Input sample data (e.g.,
ITEM001,ITEM002,SKU0005). - Verify the request matches the JSON in Step 3.
The response is detailed; focus on key elements for warehouse operations.
-
Parse the Response:
- Add a Response Handling step in the process.
- Map CubeMaster response fields to Click Reply™.
-
Response JSON Mapping:
-
status: Check"succeed"for success.- Target: Log to Productivity module
-
message: Success or error details.- Target: Log for operator visibility
-
document.title: Load identifier.- Target:
Load.LoadID
- Target:
-
loadSummary: Overall load stats.cargoesLoaded,piecesLoaded:Load.ItemsLoadedvolumeLoaded,weightLoaded:Load.TotalVolume,Load.TotalWeight
-
filledContainers: Detailed placement data.name:Load.ContainerIDloadSummary.volumeUtilization,weightUtilization: Track in Productivity dashboards-
placements:cargo.name:Load.Item.SKUpos.length,pos.width,pos.height:Load.Item.Positionsize: Verify againstProduct.Dimensions
-
graphics.images: Visual diagrams.path3DDiagram:Load.Graphics.3D
-
manifest: Summary per cargo type.cargo.name,piecesLoaded:Load.Item.Manifest
-
-
Sample Response JSON:
This is the exact response JSON you provided (abridged for readability):
{ "status": "succeed", "message": "Engine created. 5 cargoes. 1 empty containers. Calculation started. Calculation ended. The load built successfully. The load saved to the cloud database.", "calculationError": "InvalidCargoSize", "document": { "title": "New Mixed Truck Load", "description": "Hello Web API", "calculationTimeInSeconds": 0.6152743, "createdBy": "CHANG@LOGEN.CO.KR", "createdAt": "2023-02-11T01:17:01.7392204+09:00" }, "loadSummary": { "cargoesLoaded": 68, "piecesLoaded": 68, "cargoesLeft": 0, "piecesLeft": 57, "volumeLoaded": 5261723.4606, "weightLoaded": 42674.59999999999 }, "filledContainers": [ { "name": "#1 53FT-Intermodal", "loadSummary": { "volumeUtilization": 80.39990374424703, "weightLoaded": 42674.59999999999 }, "placements": [ { "sequence": 1, "cargo": { "name": "ITEM002", "length": 27.31, "width": 37.5, "height": 76.67, "weight": 521.45 }, "pos": { "length": 0, "width": 0, "height": 0 } } // ... (additional placements truncated) ], "graphics": { "images": { "path3DDiagram": "https://api.cubemaster.net/runtimes/b28413ca_51ed_44c9_b92e_13147363fd61.PNG" } } } ], "manifest": [ { "cargo": { "name": "ITEM002", "qty": 28 }, "piecesLoaded": 28 }, // ... (additional manifest items truncated) ], "uom": "UnitEnglish" }Note: Full response is over 184,000 characters; this is a summary. Key sections like
placementsandmanifestare detailed in the actual response. -
Sample Mapping:
Response Field: document.title Target: Load.LoadID --- Response Field: loadSummary.weightLoaded Target: Load.TotalWeight --- Response Field: filledContainers.placements.cargo.name Target: Load.Item.SKU --- Response Field: filledContainers.placements.pos Target: Load.Item.Position --- Response Field: graphics.images.path3DDiagram Target: Load.Graphics.3D -
Real-Time Execution:
- Use Real-Time Execution (RF terminals, voice, or web wizards) to display:
- Item positions (
placements.pos) for operators. - Graphics URLs for visual loading instructions.
-
Use Productivity Tools:
- Configure dashboards to track:
volumeUtilizationandweightUtilizationfor efficiency.piecesLoadedvs.piecesLeftfor completeness.- Example: Compare
loadSummary.weightLoaded(42,674.6 lbs) against container capacity.
-
Error Handling:
- Check
calculationError(e.g.,"InvalidCargoSize"): - Log errors and alert operators via Logistics Execution Tools.
- If
status≠"succeed", retry or escalate.
- Check
-
Deploy the Integration:
- Move to production and test with live data (e.g.,
ITEM001, 16 units).
- Move to production and test with live data (e.g.,
-
Scale for Multi-Site:
- Extend to other sites by adjusting
warehouseIdorContainersdynamically.
- Extend to other sites by adjusting
Request: Sends ITEM001 (16 units), ITEM002 (28 units), SKU0005 (24+23 units), etc., into a 53FT truck (see Step 3).
Response: Confirms 68 pieces loaded (out of 125 requested), with detailed positions (e.g., ITEM002 at pos: {length: 0, width: 0, height: 0}) and 80.4% volume utilization (see Step 5).
- Units: Ensure Click Reply™ data matches
"UnitEnglish"(inches, pounds). Convert if necessary. - Incomplete Cargoes: Handle cases where only some items are loaded (e.g., 68/125 pieces) by updating inventory.
- Graphics: Leverage image URLs for operator training or validation.