Loads a package list into one loading space and returns the plan, not an estimate
Loads a package list into one loading space and returns the plan, not an estimate. The floor starts as one free surface; packages are sorted by footprint, then height, then weight, then identifier, and each one is placed on the lowest, then frontmost, then smallest free surface it fits on, turned by 90 degrees around the vertical axis where that makes it fit.
6000 (raw units)
price
1
calls / 30d
1
unique payers
2026-09-07
updated
Provider
handel.halowerk.com · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "6000",
"maxTimeoutSeconds": 300
}
]Output schema
{
"bazaar": {
"info": {
"input": {
"body": {
"axles": [
{
"axle_id": "front",
"max_load_kg": 7000,
"position_mm": 900
},
{
"axle_id": "rear",
"max_load_kg": 18000,
"position_mm": 4600
}
],
"container": {
"height_mm": 2390,
"length_mm": 5900,
"max_payload_kg": 28000,
"width_mm": 2350
},
"items": [
{
"height_mm": 1600,
"item_id": "EUR-PAL-HIGH",
"length_mm": 1200,
"quantity": 4,
"rotatable": true,
"stackable": false,
"weight_kg": 620,
"width_mm": 800
},
{
"height_mm": 750,
"item_id": "EUR-PAL-LOW",
"length_mm": 1200,
"max_stack_load_kg": 900,
"quantity": 8,
"rotatable": true,
"stackable": true,
"weight_kg": 410,
"width_mm": 800
},
{
"height_mm": 400,
"item_id": "CRATE-S",
"length_mm": 600,
"max_stack_load_kg": 120,
"quantity": 20,
"rotatable": true,
"stackable": true,
"weight_kg": 35,
"width_mm": 400
}
]
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"axles": {
"description": "Exactly two axle groups, for the static axle load. With more than two the load split is statically indeterminate and cannot be computed from geometry alone, so only two are accepted.",
"items": {
"additionalProperties": false,
"properties": {
"axle_id": {
"description": "Your label for this axle group, for example front or bogie.",
"maxLength": 32,
"minLength": 1,
"type": "string"
},
"max_load_kg": {
"description": "Permitted load on this axle group in kilograms, payload share only.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"position_mm": {
"description": "Position along the x axis in millimetres, measured from the front wall of the loading space. May be negative if the axle sits ahead of it.",
"maximum": 60000,
"minimum": -30000,
"type": "number"
}
},
"required": [
"axle_id",
"position_mm"
],
"type": "object"
},
"maxItems": 2,
"minItems": 2,
"type": "array"
},
"container": {
"additionalProperties": false,
"description": "Inner loading space and payload of the container, trailer or swap body.",
"properties": {
"height_mm": {
"description": "Inner height in millimetres. The z axis.",
"maximum": 5000,
"minimum": 1,
"type": "number"
},
"length_mm": {
"description": "Inner length in millimetres. The x axis, measured from the front wall.",
"maximum": 30000,
"minimum": 1,
"type": "number"
},
"max_payload_kg": {
"description": "Payload in kilograms. Loading stops before this is exceeded.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"width_mm": {
"description": "Inner width in millimetres. The y axis.",
"maximum": 5000,
"minimum": 1,
"type": "number"
}
},
"required": [
"length_mm",
"width_mm",
"height_mm",
"max_payload_kg"
],
"type": "object"
},
"items": {
"description": "The packages to load. Each entry is one type with a quantity.",
"items": {
"additionalProperties": false,
"properties": {
"height_mm": {
"description": "Height of one package in millimetres. Never used as a footprint side: packages are not tipped.",
"maximum": 30000,
"minimum": 1,
"type": "number"
},
"item_id": {
"description": "Your identifier for this package type. Must be unique within the request.",
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"length_mm": {
"description": "Length of one package in millimetres.",
"maximum": 30000,
"minimum": 1,
"type": "number"
},
"max_stack_load_kg": {
"description": "How much weight one package can carry on top of it. Checked against the load actually resting on it.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"quantity": {
"default": 1,
"description": "How many packages of this type.",
"maximum": 1000,
"minimum": 1,
"type": "integer"
},
"rotatable": {
"default": true,
"description": "Whether the package may be turned by 90 degrees around the vertical axis. Never tipped.",
"type": "boolean"
},
"stackable": {
"default": true,
"description": "Whether anything may be placed on top of this package. False ends the stack above it.",
"type": "boolean"
},
"weight_kg": {
"description": "Weight of one package in kilograms.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"width_mm": {
"description": "Width of one package in millimetres.",
"maximum": 30000,
"minimum": 1,
"type": "number"
}
},
"required": [
"item_id",
"length_mm",
"width_mm",
"height_mm",
"weight_kg"
],
"type": "object"
},
"maxItems": 200,
"minItems": 1,
"type": "array"
}
},
"required": [
"container",
"items"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://handel.halowerk.com/v1/container-load" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://handel.halowerk.com/v1/container-load");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://handel.halowerk.com/v1/container-load")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/15345.json, and this resource appears in /discovery/resources and /discovery/search.