{"inputSchema":{"type":"object","required":["container","items"],"additionalProperties":false,"properties":{"container":{"type":"object","required":["length_mm","width_mm","height_mm","max_payload_kg"],"additionalProperties":false,"description":"Inner loading space and payload of the container, trailer or swap body.","properties":{"length_mm":{"type":"number","minimum":1,"maximum":30000,"description":"Inner length in millimetres. The x axis, measured from the front wall."},"width_mm":{"type":"number","minimum":1,"maximum":5000,"description":"Inner width in millimetres. The y axis."},"height_mm":{"type":"number","minimum":1,"maximum":5000,"description":"Inner height in millimetres. The z axis."},"max_payload_kg":{"type":"number","minimum":0,"maximum":100000,"description":"Payload in kilograms. Loading stops before this is exceeded."}}},"items":{"type":"array","minItems":1,"maxItems":200,"description":"The packages to load. Each entry is one type with a quantity.","items":{"type":"object","required":["item_id","length_mm","width_mm","height_mm","weight_kg"],"additionalProperties":false,"properties":{"item_id":{"type":"string","minLength":1,"maxLength":64,"description":"Your identifier for this package type. Must be unique within the request."},"length_mm":{"type":"number","minimum":1,"maximum":30000,"description":"Length of one package in millimetres."},"width_mm":{"type":"number","minimum":1,"maximum":30000,"description":"Width of one package in millimetres."},"height_mm":{"type":"number","minimum":1,"maximum":30000,"description":"Height of one package in millimetres. Never used as a footprint side: packages are not tipped."},"weight_kg":{"type":"number","minimum":0,"maximum":100000,"description":"Weight of one package in kilograms."},"quantity":{"type":"integer","minimum":1,"maximum":1000,"default":1,"description":"How many packages of this type."},"stackable":{"type":"boolean","default":true,"description":"Whether anything may be placed on top of this package. False ends the stack above it."},"rotatable":{"type":"boolean","default":true,"description":"Whether the package may be turned by 90 degrees around the vertical axis. Never tipped."},"max_stack_load_kg":{"type":"number","minimum":0,"maximum":100000,"description":"How much weight one package can carry on top of it. Checked against the load actually resting on it."}}}},"axles":{"type":"array","minItems":2,"maxItems":2,"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":{"type":"object","required":["axle_id","position_mm"],"additionalProperties":false,"properties":{"axle_id":{"type":"string","minLength":1,"maxLength":32,"description":"Your label for this axle group, for example front or bogie."},"position_mm":{"type":"number","minimum":-30000,"maximum":60000,"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."},"max_load_kg":{"type":"number","minimum":0,"maximum":100000,"description":"Permitted load on this axle group in kilograms, payload share only."}}}}}},"outputSchema":{"type":"object","properties":{"placements":{"type":"array"},"unloaded":{"type":"array"},"utilization":{"type":"object"},"centre_of_gravity":{"type":"object"},"axle_load":{"type":["object","null"]},"stack_load_violations":{"type":"array"},"method":{"type":"object"},"unavailable_fields":{"type":"array"}}},"priceModel":null,"requestExample":{"container":{"length_mm":5900,"width_mm":2350,"height_mm":2390,"max_payload_kg":28000},"items":[{"item_id":"EUR-PAL-HIGH","length_mm":1200,"width_mm":800,"height_mm":1600,"weight_kg":620,"quantity":4,"stackable":false,"rotatable":true},{"item_id":"EUR-PAL-LOW","length_mm":1200,"width_mm":800,"height_mm":750,"weight_kg":410,"quantity":8,"stackable":true,"rotatable":true,"max_stack_load_kg":900},{"item_id":"CRATE-S","length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"quantity":20,"stackable":true,"rotatable":true,"max_stack_load_kg":120}],"axles":[{"axle_id":"front","position_mm":900,"max_load_kg":7000},{"axle_id":"rear","position_mm":4600,"max_load_kg":18000}]},"price_usdc":"0.006","example_request":{"container":{"length_mm":5900,"width_mm":2350,"height_mm":2390,"max_payload_kg":28000},"items":[{"item_id":"EUR-PAL-HIGH","length_mm":1200,"width_mm":800,"height_mm":1600,"weight_kg":620,"quantity":4,"stackable":false,"rotatable":true},{"item_id":"EUR-PAL-LOW","length_mm":1200,"width_mm":800,"height_mm":750,"weight_kg":410,"quantity":8,"stackable":true,"rotatable":true,"max_stack_load_kg":900},{"item_id":"CRATE-S","length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"quantity":20,"stackable":true,"rotatable":true,"max_stack_load_kg":120}],"axles":[{"axle_id":"front","position_mm":900,"max_load_kg":7000},{"axle_id":"rear","position_mm":4600,"max_load_kg":18000}]},"serviceName":"container_load","tags":["logistics","freight","packing","container","load-planning"],"outputExample":{"placements":[{"item_id":"EUR-PAL-HIGH","unit_index":0,"x_mm":0,"y_mm":0,"z_mm":0,"length_mm":1200,"width_mm":800,"height_mm":1600,"weight_kg":620,"rotated":false,"stackable":false,"max_stack_load_kg":null,"load_on_top_kg":0,"stack_level":1,"supported_by":null},{"item_id":"EUR-PAL-HIGH","unit_index":1,"x_mm":0,"y_mm":800,"z_mm":0,"length_mm":1200,"width_mm":800,"height_mm":1600,"weight_kg":620,"rotated":false,"stackable":false,"max_stack_load_kg":null,"load_on_top_kg":0,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":0,"x_mm":0,"y_mm":1600,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":1,"x_mm":600,"y_mm":1600,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"EUR-PAL-HIGH","unit_index":2,"x_mm":1200,"y_mm":0,"z_mm":0,"length_mm":1200,"width_mm":800,"height_mm":1600,"weight_kg":620,"rotated":false,"stackable":false,"max_stack_load_kg":null,"load_on_top_kg":0,"stack_level":1,"supported_by":null},{"item_id":"EUR-PAL-HIGH","unit_index":3,"x_mm":1200,"y_mm":800,"z_mm":0,"length_mm":1200,"width_mm":800,"height_mm":1600,"weight_kg":620,"rotated":false,"stackable":false,"max_stack_load_kg":null,"load_on_top_kg":0,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":2,"x_mm":1200,"y_mm":1600,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":3,"x_mm":1800,"y_mm":1600,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"EUR-PAL-LOW","unit_index":0,"x_mm":2400,"y_mm":0,"z_mm":0,"length_mm":1200,"width_mm":800,"height_mm":750,"weight_kg":410,"rotated":false,"stackable":true,"max_stack_load_kg":900,"load_on_top_kg":410,"stack_level":1,"supported_by":null},{"item_id":"EUR-PAL-LOW","unit_index":1,"x_mm":2400,"y_mm":800,"z_mm":0,"length_mm":1200,"width_mm":800,"height_mm":750,"weight_kg":410,"rotated":false,"stackable":true,"max_stack_load_kg":900,"load_on_top_kg":410,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":4,"x_mm":2400,"y_mm":1600,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":5,"x_mm":3000,"y_mm":1600,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"EUR-PAL-LOW","unit_index":2,"x_mm":3600,"y_mm":0,"z_mm":0,"length_mm":1200,"width_mm":800,"height_mm":750,"weight_kg":410,"rotated":false,"stackable":true,"max_stack_load_kg":900,"load_on_top_kg":410,"stack_level":1,"supported_by":null},{"item_id":"EUR-PAL-LOW","unit_index":3,"x_mm":3600,"y_mm":800,"z_mm":0,"length_mm":1200,"width_mm":800,"height_mm":750,"weight_kg":410,"rotated":false,"stackable":true,"max_stack_load_kg":900,"load_on_top_kg":0,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":6,"x_mm":3600,"y_mm":1600,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":7,"x_mm":4200,"y_mm":1600,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"EUR-PAL-LOW","unit_index":4,"x_mm":4800,"y_mm":0,"z_mm":0,"length_mm":800,"width_mm":1200,"height_mm":750,"weight_kg":410,"rotated":true,"stackable":true,"max_stack_load_kg":900,"load_on_top_kg":0,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":8,"x_mm":4800,"y_mm":1200,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":9,"x_mm":4800,"y_mm":1600,"z_mm":0,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":35,"stack_level":1,"supported_by":null},{"item_id":"CRATE-S","unit_index":10,"x_mm":0,"y_mm":1600,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"CRATE-S","unit_index":11,"x_mm":600,"y_mm":1600,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"CRATE-S","unit_index":12,"x_mm":1200,"y_mm":1600,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"CRATE-S","unit_index":13,"x_mm":1800,"y_mm":1600,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"CRATE-S","unit_index":14,"x_mm":2400,"y_mm":1600,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"CRATE-S","unit_index":15,"x_mm":3000,"y_mm":1600,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"CRATE-S","unit_index":16,"x_mm":3600,"y_mm":1600,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"CRATE-S","unit_index":17,"x_mm":4200,"y_mm":1600,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"CRATE-S","unit_index":18,"x_mm":4800,"y_mm":1200,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"CRATE-S","unit_index":19,"x_mm":4800,"y_mm":1600,"z_mm":400,"length_mm":600,"width_mm":400,"height_mm":400,"weight_kg":35,"rotated":false,"stackable":true,"max_stack_load_kg":120,"load_on_top_kg":0,"stack_level":2,"supported_by":"CRATE-S"},{"item_id":"EUR-PAL-LOW","unit_index":5,"x_mm":2400,"y_mm":0,"z_mm":750,"length_mm":1200,"width_mm":800,"height_mm":750,"weight_kg":410,"rotated":false,"stackable":true,"max_stack_load_kg":900,"load_on_top_kg":0,"stack_level":2,"supported_by":"EUR-PAL-LOW"},{"item_id":"EUR-PAL-LOW","unit_index":6,"x_mm":2400,"y_mm":800,"z_mm":750,"length_mm":1200,"width_mm":800,"height_mm":750,"weight_kg":410,"rotated":false,"stackable":true,"max_stack_load_kg":900,"load_on_top_kg":0,"stack_level":2,"supported_by":"EUR-PAL-LOW"},{"item_id":"EUR-PAL-LOW","unit_index":7,"x_mm":3600,"y_mm":0,"z_mm":750,"length_mm":1200,"width_mm":800,"height_mm":750,"weight_kg":410,"rotated":false,"stackable":true,"max_stack_load_kg":900,"load_on_top_kg":0,"stack_level":2,"supported_by":"EUR-PAL-LOW"}],"unloaded":[],"utilization":{"packages_loaded":32,"packages_unloaded":0,"volume_used_l":13824,"volume_available_l":33137.35,"volume_pct":41.72,"payload_used_kg":6460,"payload_available_kg":28000,"payload_pct":23.07,"floor_area_used_mm2":11040000,"floor_area_pct":79.62,"floor_length_used_mm":5600,"loaded_height_mm":1600,"max_stack_level":2,"free_surfaces_left":26,"limiting_factor":"nothing: everything was loaded"},"centre_of_gravity":{"x_mm":2670.6,"y_mm":865.9,"z_mm":683.7,"reference":"front wall, left side, floor of the loading space","basis":"weighted mean of the package centres, payload only"},"axle_load":{"basis":"static lever rule on the payload only, tare weight is not included","centre_of_gravity_within_axle_span":true,"axles":[{"axle_id":"front","position_mm":900,"load_kg":3368.628,"max_load_kg":7000,"exceeded":false,"excess_kg":0},{"axle_id":"rear","position_mm":4600,"load_kg":3091.372,"max_load_kg":18000,"exceeded":false,"excess_kg":0}],"note":null},"stack_load_violations":[],"stack_load_check":"enforced during placement and re-verified after it: no package carries more than its max_stack_load_kg","method":{"packing":"guillotine free-surface packing: the floor is one surface, every placement splits the surface it used into two remainders and, where the package is stackable, opens a new surface on top of it at its height","order":"packages sorted by footprint descending, then height, then weight, then identifier","surface_choice":"lowest surface first, then front, then left, then smallest: the floor is filled before anything is stacked","tipping":"never: the stated height stays the height, only a 90 degree turn around the vertical axis is allowed","stack_load":"the chain of packages under a surface is checked before placing, so max_stack_load_kg is a constraint on the plan and not a warning about it","axle_load":"static lever rule between exactly two axle groups, payload only","deterministic":true,"optimality":"heuristic, not a proven optimum: three-dimensional packing is NP-hard. Every tie is broken by identifier so the same request always returns the same plan.","known_limitation":"a guillotine split cannot reuse an L-shaped remainder, so a small amount of space next to a placement stays unused even though it is physically reachable","out_of_scope":["load securing","lashing forces","friction coefficients","VDI 2700","dynamic axle loads","tare weight"],"limits":{"max_item_types":200,"max_units_total":1000,"max_quantity_per_item":1000}},"unavailable_fields":[]}}