Cargo-Planner Docs



While our web application should get most use cases covered, it might sometimes be of interest to add load planning functionality to an existing WMS or ERP system - or perhaps your own custom built web portal. You can utilize most of the functionality by using our Rest API and JavaScript SDK.

Server side

While you do not actually need to use a server, it is a good way to use as an intermediary between Cargo-Planner and the client. If you have a way to securely publish the API token to the client (remember that storing keys in localStorage or in the code is not good practice) - you can call our API straight from the client.
# /calculate endpoint at your server located at
import requests
import json
CARGO_PLANNER_TOKEN = 'Token your-token'
def calculate(request):
response =
'Content-type': 'application/json',
'Authorization': CARGO_PLANNER_TOKEN
if response.status_code == 200:
return response.json()


Fetch our SDK here. The example below will call above endpoint which in turn will call our API and return a load plan / solution for your calculation data, and then show a 3D image of each container.

<meta charset="utf-8">
<title>My customer portal</title>
<script src="./cargoPlannerSDK.umd.min.js"></script>
<h1>Load plan</h1>
async function calculate() {
// Initialize 3D engine
await cargoPlannerSDK.SceneManager.init();
// Refer to the API documentation for more options
let calculationData = {
"length_dim": "M",
"weight_dim": "KG",
"items": [
"label": "My cargo 1",
"l": 1.2,
"w": 0.8,
"h": 0.5,
"wt": 300,
"qty": 85
"label": "My cargo 2",
"l": 1,
"w": 0.5,
"h": 0.8,
"wt": 30,
"qty": 40
"container_types": [
"name": "My container",
"L": 12,
"W": 2,
"H": 2,
"payload": 20000
fetch('/calculate/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
body: JSON.stringify(calculationData),
.then(response => response.json())
.then(data => {
// If we received any solutions
if( {
// At the moment each calculation gives one solution (in the future we might provide more) => {
// Go through each container
solution.containers.forEach((container, index) => {
// Render the canvas
container, // container data
null, // Interactive mode (set to null when showing multiple containers)
400, // Width in pixels
200 // Height in pixels
).then((canvas) => {
const containerDiv = document.createElement("div");
const label = document.createTextNode(`Container ${index+1}: ${}`)

The above example will generate load plan below:

Load plan from API

On this page

Cargo-Planner © 2021