Introduction
The TCS-i API is organized around REST. Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.
https://api.tcs-innovations.comAuthentication
The TCS-i API uses API keys to authenticate requests. Onboarded accounts can view and manage their API keys in the TCS-i Console. Not onboarded yet? Join the early access waitlist from the top menu.
Authentication to the API is performed via the x-api-key HTTP header. All API requests must be made over HTTPS.
curl -X POST https://api.tcs-innovations.com/pack \
-H "Content-Type: application/json" \
-H "x-api-key: your_production_api_key_here"
/pack
Computes a highly optimized 3D packing solution (cartonization) based on your provided inventory items, available bins, and specific objective targets.
Request Body
Custom metadata dictionary to be passed along with the packing request.
The list of products to be packed. See the Item Data Model for property requirements.
Required for standard packing. Can be omitted if objective is minimise_bounding_box.
Defaults to minimise_bins. See Objectives model for full list.
Defines physics rules: rotation logic, fragility limits, center of gravity checks, buffer units, and forbidden adjacencies.
Used when objective is set to minimise_total_cost. Defines shipping base rates, per-kg rates, and DIM divisors to evaluate the most cost-effective packaging.
{
"objective": "minimise_total_cost",
"items": [
{ "id": "I-001", "length": 2.0, "width": 4.0, "height": 4.0, "weight": 1.5, "label": "electronics", "is_cylinder": false },
{ "id": "I-002", "length": 5.0, "width": 5.0, "height": 2.0, "weight": 0.5, "label": "accessories", "is_cylinder": true }
],
"bins": [
{ "id": "B-001", "length": 10.0, "width": 10.0, "height": 10.0, "is_envelope": false, "fixed_cost": 2.0, "tare_weight": 0.2, "quantity": 2 }
],
"constraints": {
"rotation": true,
"fragility": ["I-001"],
"weight_distribution": {
"max_per_layer": 10.0,
"footprint": 5.0,
"center_of_gravity": true,
"min_support_ratio": 0.8
},
"forbidden_adjacency": [["electronics", "liquids"]],
"priority": ["I-001"]
},
"cost_model": {
"ship_base": 0.6,
"ship_rate_per_kg": 1.1,
"dim_divisor": 5000.0,
"dunnage_cost_per_volume": 0.05
}
}
{
"solution": {
"num_bins_used": 1,
"bins": [
{
"id": "B-001",
"length": 10.0, "width": 10.0, "height": 10.0,
"items": [
{
"id": "I-001",
"origin_dims": [2.0, 4.0, 4.0],
"rotation_instruction": "perm(0, 1, 2)",
"rotated_dims": [2.0, 4.0, 4.0],
"position": [0.0, 0.0, 0.0],
"is_cylinder": false
},
{
"id": "I-002",
"origin_dims": [5.0, 5.0, 2.0],
"rotation_instruction": "perm(0, 2, 1)",
"rotated_dims": [5.0, 2.0, 5.0],
"position": [2.0, 0.0, 0.0],
"is_cylinder": true
}
]
}
],
"packed_item_ids": ["I-001", "I-002"],
"unpacked_item_ids": []
}
}
Packing Data Models
/slot
Sub-200ms Dynamic Slotting Engine with Smart Cascade & Fast-Track. Intercepts inbound WMS dock scans in real-time. Calculates global SKU velocity against rolling hourly picks to dynamically route items to the Golden, Silver, or Dead Zones.
Request Body
Details about the incoming item, including its rolling hourly pick history for velocity calculation.
Thresholds for zone classifications and multi-bin drain support rules.
The current home bin (if any) and available empty bins for the engine to consider.
{
"sku": {
"sku_id": "SKU-992-BLK",
"length": 10.0,
"width": 10.0,
"height": 10.0,
"rolling_hourly_picks": [10, 15, 8, 45]
},
"warehouse_context": {
"site_id": "wh_uk_london_01",
"golden_zone_velocity_threshold_per_hour": 30.0,
"silver_zone_velocity_threshold_per_hour": 15.0,
"multi_bin_drain_supported": true,
"dim_unit": "cm"
},
"bin_options": {
"current_home_bin": {
"bin_id": "RES-09-02",
"zone": "Dead Zone",
"available_volume": 100.0,
"current_quantity_left": 50
},
"empty_bins": [
{
"bin_id": "A-04-12",
"zone": "Silver Zone",
"available_volume": 500.0,
"current_quantity_left": 0
}
]
}
}
{
"meta": {
"request_id": "req-8x7d6c5b4a",
"sku_id": "SKU-992-BLK",
"decision_code": "UPGRADE_CONSOLIDATE",
"status": 200
},
"allocations": [
{
"bin_id": "A-04-12",
"role": "new_primary",
"action": "putaway",
"inbound_putaway_qty": 120,
"sweep_in_qty": 50,
"sweep_out_qty": 0,
"total_expected_qty": 170
},
{
"bin_id": "RES-09-02",
"role": "old_home",
"action": "sweep_out",
"inbound_putaway_qty": 0,
"sweep_in_qty": 0,
"sweep_out_qty": 50,
"total_expected_qty": 0
}
],
"telemetry": {
"trend_classification": "FAST_TRACK_SILVER",
"calculated_slow_velocity": 12.5,
"calculated_fast_velocity": 22.6,
"calculated_velocity_ratio": 1.8,
"golden_threshold_applied": 30.0,
"silver_threshold_applied": 15.0,
"target_zone": "silver",
"assigned_zone": "silver"
}
}
Slotting Data Models
/v1/pallet-packing/solve
Computes a 3D packing solution for loading items onto a pallet. Calculates center of gravity, manages stackability constraints, handles interlock patterns, and accounts for pallet capacity limits.
Request Body
Unique tracking ID for this packing operation.
Declares the dimension (e.g. "cm") and mass (e.g. "kg") units shared by all geometry in the request.
The inventory requiring placement onto the pallet.
Dimensions and limitations of the target pallet.
Physics rules: support ratios, edge clearance, and interlock requirements.
Deterministic search controls for search depth and Large Neighborhood Search parameters.
{
"job_id": "PAL-8819",
"units": { "dimension": "cm", "mass": "kg" },
"pallet": {
"pallet_id": "EUR-EPAL",
"dimensions": { "length": 120.0, "width": 80.0, "height": 14.4 },
"deck_height": 14.4,
"tare_mass": 25.0,
"max_payload": 1500.0,
"max_load_height": 180.0,
"usable_area": { "x": 0, "y": 0, "length": 120.0, "width": 80.0 }
},
"items": [
{
"item_id": "ITEM-01",
"dimensions": { "length": 40.0, "width": 30.0, "height": 30.0 },
"mass": 12.5,
"allowed_orientations": ["upright"],
"bottom_required": false,
"stackable": true,
"can_support_load": true,
"max_top_load": 50.0
}
]
}
{
"schema_version": "1.0",
"job_id": "PAL-8819",
"status": "FEASIBLE",
"summary": {
"items_requested": 1,
"items_placed": 1,
"total_height": 44.4,
"gross_mass": 37.5
},
"placements": [
{
"item_id": "ITEM-01",
"orientation_id": "upright",
"position": { "x": 0.0, "y": 0.0, "z": 0.0 },
"absolute_cog": { "x": 20.0, "y": 15.0, "z": 29.4 }
}
]
}
Pallet Packing Models
/v1/loading
Optimizes the placement of grouped handling units (e.g. pallets, master cartons) into vehicles, containers, or trailers to maximize payload efficiency and check physical limits.
Request Body
Reference identifier for tracking this loading operation.
Dimensions and payload limits of the truck or container.
Items requiring placement. Must contain at least one item.
Define measurement bases. dimension_unit defaults to "cm" (accepts "mm", "cm", "m", "in"). weight_unit defaults to "kg" (accepts "kg", "lb").
{
"job_id": "LOAD-099",
"vehicle": {
"vehicle_id": "TRUCK-1",
"internal_length": 1360.0,
"internal_width": 245.0,
"internal_height": 270.0,
"max_payload_weight": 24000.0
},
"handling_units": [
{
"handling_unit_id": "PALLET-A",
"length": 120.0,
"width": 80.0,
"height": 150.0,
"weight": 600.0,
"quantity": 12,
"stackable": false,
"rotatable": true
}
],
"dimension_unit": "cm",
"weight_unit": "kg"
}
{
"job_id": "LOAD-099",
"status": "stub",
"message": "Loading strategy successfully generated",
"vehicle_id": "TRUCK-1",
"loaded_units": [
{ "handling_unit_id": "PALLET-A", "quantity": 12 }
],
"unloaded_units": [],
"safety_summary": {
"total_weight": 7200.0,
"max_payload_weight": 24000.0,
"weight_within_limit": true,
"estimated_volume_utilization": 38.4,
"warnings": []
},
"warnings": []
}
