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.SKU
Length
,Width
,Height
:Product.Dimensions
(in inches)Weight
:Product.Weight
(in pounds)OrientationsAllowed
: Static"OrientationsAll"
TurnAllowedOnFloor
: Staticfalse
or dynamicQty
:Inventory.Item.Quantity
ColorKnownName
: 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
: Statictrue
IsSequenceUsed
: Staticfalse
FillDirection
: 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 CubeMaster
process: -
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.ItemsLoaded
volumeLoaded
,weightLoaded
:Load.TotalVolume
,Load.TotalWeight
-
filledContainers
: Detailed placement data.name
:Load.ContainerID
loadSummary.volumeUtilization
,weightUtilization
: Track in Productivity dashboards-
placements
:cargo.name
:Load.Item.SKU
pos.length
,pos.width
,pos.height
:Load.Item.Position
size
: 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
placements
andmanifest
are 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:
volumeUtilization
andweightUtilization
for efficiency.piecesLoaded
vs.piecesLeft
for 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
warehouseId
orContainers
dynamically.
- 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.