创建装载任务
校验请求,从积分中预留最高可能费用,并将任务加入队列。
返回 202 和该任务;之后轮询 GET /v1/jobs/{id},或传入 ?wait= 让响应等到任务结束再返回。校验失败(422)不收费,也不会创建任务。
认证
查询参数
waitinteger响应等待任务完成的最长秒数。在此时间内完成:返回 200,结果内联在响应中;否则返回 202。
00–60请求头参数
Idempotency-Keystring任意唯一字符串,例如 UUID 或您的订单号。24 小时内使用相同的键会返回原任务,而不会创建新任务并再次扣费。
请求体参数
application/jsonreferencestring您自己的参考编号(订单号、货运单号…)。会原样返回在任务中。
vehiclesVehicle[]必填车辆定义。每项的 quantity 可大于 1。至少一项。
idstring您定义的标识符,在请求内唯一。结果中以 vehicle_id 引用。默认为 vehicle_id。
vehicle_idstring来自 GET /v1/vehicles 的车辆 ID:预设车辆或您组织的车辆(veh_…)。提供类型、名称、尺寸、载重及其他所有已保存的值。
typestring车辆类型。未提供 vehicle_id 时必填。仅接受 GET /v1/limits 中列出的类型(allowed_vehicle_types)。
trucktrailerflatbedcontainerpalletaircraftshipnamestring显示名称(默认为已保存车辆的名称或 id)。
lengthnumber · cm货厢内部长度,沿 x 轴(从前壁指向车门)。未提供 vehicle_id 时必填。
widthnumber · cm货厢内部宽度,沿 z 轴。未提供 vehicle_id 时必填。
heightnumber · cm货厢内部高度,沿 y 轴。未提供 vehicle_id 时必填。
max_weightnumber · kg最大载重。未提供 vehicle_id 时必填。
quantityinteger按此定义可用的相同车辆数量。
11–100floor_load_capacitynumber · kg/m²地板承重:0 或更大(0 = 不限)。
aux_deckboolean车辆有第二层甲板(双层车)。
falseaux_deck_heightnumber · cm第二层甲板距地板的高度。aux_deck 为 true 时必填。
aux_deck_max_weightnumber · kg第二层甲板的载重上限。aux_deck 为 true 时必填。
blocked_areasRect[]禁止放置货物的地板区域(轮拱、破损处、预留空间)。每个区域都必须位于车辆地板范围内。
xnumber · cm必填前壁到矩形近边的距离。
znumber · cm必填右壁(z = 0;从车门向内看的右侧)到矩形近边的距离。
lengthnumber · cm必填沿 x 轴的长度。
widthnumber · cm必填沿 z 轴的宽度。
axle_positions需申请开通number[] · cm车轴(支撑点)位置,从货厢前端起算;负值 = 位于货厢前方。数组长度与 axle_max_loads 相同。每个值介于 −300(位于货厢前方的车轴,例如单体卡车驾驶室下方的前轴)与车辆长度之间。
axle_max_loads需申请开通number[] · kg每根车轴的最大货物载荷,顺序与 axle_positions 一致。每个值须大于 0 且不超过 100000。
cog_range_x需申请开通number · cm重心相对长度中点的允许偏移:0 到 length / 2。
cog_range_y需申请开通number · cm重心相对宽度中点的允许偏移:0 到 width / 2。
tractor_weight需申请开通number · kg半挂车轴荷模型:牵引车质量。
empty_trailer_weight需申请开通number · kg半挂车轴荷模型:挂车空载质量。
front_axle_to_middle_axle需申请开通number · cm半挂车轴荷模型:牵引车前轴到驱动轴(中轴)的距离。
front_axle_to_tractor_cog需申请开通number · cm半挂车轴荷模型:前轴到牵引车重心的距离。
front_axle_to_kingpin需申请开通number · cm半挂车轴荷模型:前轴到牵引销(鞍座)的距离。
kingpin_to_rear_axle需申请开通number · cm半挂车轴荷模型:牵引销到挂车后轴组的距离。
trailer_cog_to_rear_axle需申请开通number · cm半挂车轴荷模型:挂车重心到后轴组的距离。
trailer_start_to_kingpin需申请开通number · cm半挂车轴荷模型:挂车前端到牵引销的距离。
max_middle_axle_weight需申请开通number · kg半挂车轴荷模型:驱动轴(中轴)的法定限值。
max_rear_axle_weight需申请开通number · kg半挂车轴荷模型:后轴组的法定限值。
itemsItem[]必填物品定义。每项的 quantity 可大于 1。至少一项。
idstring您定义的标识符,在请求内唯一。结果中以 item_id 引用。默认为 template_id。
template_idstring引用模板,由模板提供物品的全部字段;与其一同发送的字段会覆盖模板中的值。模板 ID(tpl_…)取自 GET /v1/templates.
labelstring显示标签(默认取 id 的值)。
shapestring物品形状。cylinder 和 drum 使用 radius + height,而非 length + width;pallet 和 drum 始终保持直立。
boxcylinderpalletbagdrum默认值 "box"lengthnumber · cm长度。除非 shape 为 cylinder 或 drum,否则必填。
widthnumber · cm宽度。除非 shape 为 cylinder 或 drum,否则必填。
heightnumber · cm必填高度(物品按定义摆放时的竖直边)。
radiusnumber · cm半径。shape 为 cylinder 或 drum 时必填。
weightnumber · kg必填单件物品的重量。
quantityinteger相同物品的件数。
11–10000stackableboolean允许在其上方放置其他物品。
truemax_stack_weightnumber · kg单件物品上方可承受的最大重量。0 = 不限。
0rotationstringall = 六种朝向均可;upright = 只能绕竖直轴旋转(此面朝上);fixed = 不旋转。
alluprightfixed默认值 "all"hazardousboolean危险品:放在低处,并与其他危险品隔开。
falsepriorityinteger装载优先级。值越高越先装载,空间不足时优先保留。0 = 无。
0groupstring该物品所属分组的名称(参见 groups 和 options.group_routing)。
colorstring显示颜色,格式为 #rrggbb(仅用于查看器和 PDF)。
nesting_heightnumber · cm相同物品堆叠时相互嵌套的重叠高度(如可嵌套的周转箱、桶)。
0groupsGroup[]可选的分组(客户、站点、订单)。当 options.group_routing 不为 "none" 时,物品引用的每个分组都必须在此列出;否则会按物品中分组名称的出现顺序自动创建分组。
namestring必填分组名称,由 Item.group 引用。
orderinteger装载顺序(值越小越先装载)。默认为在列表中的位置。
colorstring显示颜色,格式为 #rrggbb。
optionsOptions装载选项。所有字段均为可选。
packing_modestringauto = 列出的车辆装满后,自动追加最合适的车辆(不超过任务的车辆上限);fleet_only = 只使用列出的车辆,装不下的物品报告为未装载。
autofleet_only默认值 "auto"group_routingstringnone = 分组仅作标识;wall = 每个分组占用车辆中独立的区段;routing = 分组按顺序装载,后装的分组可以放在先装分组的上方或旁边,但不能在其下方(多站点配送);no_stack = 分组按顺序并排装载,互不堆叠。
nonewallroutingno_stack默认值 "none"allow_overweightboolean忽略车辆载重上限。
falsemax_stack_itemsinteger单个堆垛中的最大物品数。0 = 不限。
0max_stack_density_kg_m2number · kg/m²单位地板面积上的最大堆叠重量。0 = 不限。
0lock_rotationsboolean保持第一个符合车辆高度的朝向。
falsegroup_identical_binsboolean将相同的车辆视为一个车辆池。
falsetime_limitnumber · s整个任务计算时长的上限。0 = 自动(不超过 GET /v1/limits 返回的 max_time_limit_seconds)。达到上限时,返回目前找到的最佳方案。只按实际使用的计算时长付费。
0enforce_axle需申请开通boolean对填写了全部十个轴荷模型字段的车辆,拒绝会使轴组超载的摆放。
false请求示例
curl -X POST "https://runner.cargoduo.com/v1/pack" \
-H "Authorization: Bearer $CARGODUO_API_KEY" \
-H "Idempotency-Key: order-1042-v1" \
-H "Content-Type: application/json" \
-d '{
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright"
}
],
"options": {
"packing_mode": "auto"
}
}'const res = await fetch("https://runner.cargoduo.com/v1/pack", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CARGODUO_API_KEY}`,
"Idempotency-Key": "order-1042-v1",
"Content-Type": "application/json",
},
body: JSON.stringify({
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright"
}
],
"options": {
"packing_mode": "auto"
}
}),
});
const data = await res.json();
console.log(res.status, data);import os
import requests
response = requests.post(
"https://runner.cargoduo.com/v1/pack",
headers={"Authorization": f"Bearer {os.environ['CARGODUO_API_KEY']}", "Idempotency-Key": "order-1042-v1"},
json={
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000,
},
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": False,
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright",
},
],
"options": {
"packing_mode": "auto",
},
},
)
print(response.status_code, response.json())package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
body := strings.NewReader(`{
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright"
}
],
"options": {
"packing_mode": "auto"
}
}`)
req, err := http.NewRequest("POST", "https://runner.cargoduo.com/v1/pack", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("CARGODUO_API_KEY"))
req.Header.Set("Idempotency-Key", "order-1042-v1")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.StatusCode, string(out))
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String body = """
{
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright"
}
],
"options": {
"packing_mode": "auto"
}
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://runner.cargoduo.com/v1/pack"))
.header("Authorization", "Bearer " + System.getenv("CARGODUO_API_KEY"))
.header("Idempotency-Key", "order-1042-v1")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("CARGODUO_API_KEY"));
client.DefaultRequestHeaders.Add("Idempotency-Key", "order-1042-v1");
var json = """
{
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright"
}
],
"options": {
"packing_mode": "auto"
}
}
""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://runner.cargoduo.com/v1/pack")
{
Content = new StringContent(json, Encoding.UTF8, "application/json"),
};
var response = await client.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");<?php
$payload = <<<'JSON'
{
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright"
}
],
"options": {
"packing_mode": "auto"
}
}
JSON;
$ch = curl_init('https://runner.cargoduo.com/v1/pack');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CARGODUO_API_KEY'),
'Idempotency-Key: order-1042-v1',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), ' ', $response, PHP_EOL;require "net/http"
require "uri"
uri = URI("https://runner.cargoduo.com/v1/pack")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer #{ENV.fetch("CARGODUO_API_KEY")}"
request["Idempotency-Key"] = "order-1042-v1"
request["Content-Type"] = "application/json"
request.body = <<~'JSON'
{
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright"
}
],
"options": {
"packing_mode": "auto"
}
}
JSON
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts response.code, response.body响应示例
{
"id": "job_4bK9mT2xQe7LpW1zRc8VdN3f",
"object": "job",
"status": "queued",
"reference": "order-1042",
"source": "api",
"created_at": "2026-10-19T09:12:03Z",
"started_at": null,
"finished_at": null,
"progress": {
"stage": "queued",
"vehicles_done": 0,
"placed_items": 0
},
"summary": {
"items_requested": 58,
"items_placed": 0,
"items_unplaced": 0,
"vehicles_used": 0,
"total_weight": 0,
"volume_utilization": 0,
"queue_ms": 0,
"compute_ms": 0
},
"cost": {
"credits": 0,
"reserved_credits": 1.11,
"rate_card_version": 1,
"breakdown": {
"base": 0,
"vehicles": 0,
"compute": 0,
"large_load": 0
}
},
"error": null,
"warnings": [],
"result_url": "https://runner.cargoduo.com/v1/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f/result",
"pdf_url": "",
"expires_at": "2026-11-02T09:12:03Z"
}响应
200OK任务在 ?wait 时间内完成,结果已内联。已结束任务的幂等重放也返回此状态。
名称类型必填说明idstring必填string是任务 ID(job_…)。
objectstring必填string是始终为
job。jobstatusstring必填string是queued→running→succeeded|failed|canceled。queuedrunningsucceededfailedcanceledreferencestringstring否请求中提供的参考编号。
sourcestringstring否任务的创建来源。
apiplaygroundproject_idstringstring否POST /v1/projects/{id}/pack 任务将方案保存到的项目(prj_…)。其他任务不含此字段。
created_atstring必填string是RFC 3339 时间戳。
started_atstring | nullstring | null否开始计算的时间(RFC 3339),或
null。finished_atstring | nullstring | null否任务结束时间(RFC 3339),或
null。progressJobProgressJobProgress否排队中/运行中的实时进度。
stagestringstring否当前阶段,例如
queued、running、finalizing或done。仅供参考:请根据Job.status进行分支处理。vehicles_doneintegerinteger否目前已完成装载的车辆数。
placed_itemsintegerinteger否目前已摆放的物品件数。
summaryJobSummaryJobSummary否计数和耗时。
items_requestedintegerinteger否物品总件数(所有数量之和)。
items_placedintegerinteger否已摆放的件数。
items_unplacedintegerinteger否未能摆放的件数。
vehicles_usedintegerinteger否至少装载一件物品的车辆数。
total_weightnumber · kgnumber · kg否已装载重量。
volume_utilizationnumbernumber否已用车辆的平均容积利用率,0–1。
queue_msintegerinteger否等待计算槽位的时间(不计费)。
compute_msintegerinteger否计算时长(计费)。
costJobCostJobCost否已扣积分(任务结束后为最终值)以及运行期间预留的积分。
creditsnumber · creditsnumber · credits否已扣积分(任务结束前为 0)。失败的任务不收费,但 time_limit_exceeded 除外,它按已取消任务计费。
reserved_creditsnumber · creditsnumber · credits否任务排队/运行期间预留的积分(即最高可能费用)。任务结束时释放。
rate_card_versionintegerinteger否该任务计价所用的价目表。
breakdownCostBreakdownCostBreakdown否费用明细。
basenumber · creditsnumber · credits否任务基础费。
vehiclesnumber · creditsnumber · credits否按装载的车辆计费(已取消或 time_limit_exceeded 的任务不收取)。
computenumber · creditsnumber · credits否按计算秒计费,按毫秒比例折算。
large_loadnumber · creditsnumber · credits否超出大批量装载阈值的部分,每 100 件收取的附加费(不足 100 件按 100 件计)。
errorJobError | nullJobError | null否任务失败或被取消的原因;否则为
null。codestringstring否机器可读的错误码(参见“错误”)。
messagestringstring否英文说明。
warningsWarning[]Warning[]否关于请求的非阻断性提示(结果中也会重复列出)。
codestringstring否机器可读的代码。
messagestringstring否英文说明。
result_urlstringstring否status为succeeded后,对此 URL 发起 GET 请求以获取完整结果。pdf_urlstringstring否浏览器链接,打开后会将装载方案生成为 PDF(3D 视图 + 装载步骤)。在 expires_at 之前有效,过期后为空。
expires_atstringstring否请求体/结果体和 PDF 链接的删除时间(RFC 3339)。任务元数据和扣费记录会保留。
resultResultResult否完整结果,仅在请求时(?include=result)或 POST /v1/pack?wait= 按时完成时内联返回。
job_idstringstring否所属任务。
vehiclesResultVehicle[]ResultVehicle[]否按装载顺序排列的已装载车辆(不含空车)。
indexintegerinteger否在方案中的位置,从 0 开始。
vehicle_idstringstring否您的车辆定义 ID(项目任务中为车辆条目 ID,pv_…)。
copyintegerinteger否该车辆定义的副本序号,从 1 开始(quantity > 1,或在 auto 模式下添加时)。
auto_addedbooleanboolean否在您列出的
quantity之外,由packing_modeauto自动添加。namestringstring否车辆名称。
typestringstring否车辆类型。
lengthnumber · cmnumber · cm否货厢长度。
widthnumber · cmnumber · cm否货厢宽度。
heightnumber · cmnumber · cm否货厢高度。
max_weightnumber · kgnumber · kg否载重上限。
items_placedintegerinteger否此车内的件数。
total_weightnumber · kgnumber · kg否此车装载的重量。
volume_utilizationnumbernumber否已用容积 / 货厢容积,0–1。
weight_utilizationnumbernumber否total_weight / max_weight,0–1(启用 allow_overweight 时可能超过 1)。
center_of_gravityPointPoint否货物的重心(cm)。
xnumber · cmnumber · cm否ynumber · cmnumber · cm否znumber · cmnumber · cm否placementsPlacement[]Placement[]否此车内每件物品的摆放位置。
item_idstringstring否您的物品定义 ID(项目任务中为物品 ID,item_…)。
instanceintegerinteger否该物品定义内从 1 开始的件序号(在整个方案中唯一)。
labelstringstring否物品标签。
xnumber · cmnumber · cm否最小角点沿长度方向的位置。
ynumber · cmnumber · cm否最小角点距地板的高度。
znumber · cmnumber · cm否最小角点沿宽度方向的位置。
lengthnumber · cmnumber · cm否摆放后沿 x 轴的尺寸。
widthnumber · cmnumber · cm否摆放后沿 z 轴的尺寸。
heightnumber · cmnumber · cm否摆放后沿 y 轴的尺寸。
rotatedbooleanboolean否以不同于定义的朝向摆放。
orientationstringstring否定义中的哪条边分别沿 x、z、y 轴:
lwh= 与定义一致,wlh= 绕竖直轴旋转 90°,lhw、hwl、whl、hlw= 侧放。stepintegerinteger否该车内从 1 开始的装载步骤(按升序装载)。
weightnumber · kgnumber · kg否单件重量。
axle_loads需申请开通AxleLoad[]AxleLoad[]否各轴载荷(仅限含车轴数据的车辆)。
namestringstring否Axle 1、Axle 2…,顺序与axle_positions一致。positionnumber · cmnumber · cm否车轴距货厢前端的位置。
loadnumber · kgnumber · kg否该轴承受的货物载荷。
maxnumber · kgnumber · kg否配置的上限(0 = 无上限)。
okbooleanboolean否load≤max(未设上限时始终为true)。unplacedUnplacedItem[]UnplacedItem[]否未能摆放的物品及原因。
item_idstringstring否您的物品定义 ID。
instanceintegerinteger否件序号,从 1 开始。
labelstringstring否物品标签。
reasonstringstring否无法摆放的原因。
warningsWarning[]Warning[]否关于方案的提示。
codestringstring否机器可读的代码。
messagestringstring否英文说明。
pdf_urlstringstring否浏览器链接,打开后会将方案生成为 PDF。
expires_atstringstring否此结果的删除时间(RFC 3339)。
202Accepted任务已接受(排队中或运行中)。
名称类型必填说明idstring必填string是任务 ID(job_…)。
objectstring必填string是始终为
job。jobstatusstring必填string是queued→running→succeeded|failed|canceled。queuedrunningsucceededfailedcanceledreferencestringstring否请求中提供的参考编号。
sourcestringstring否任务的创建来源。
apiplaygroundproject_idstringstring否POST /v1/projects/{id}/pack 任务将方案保存到的项目(prj_…)。其他任务不含此字段。
created_atstring必填string是RFC 3339 时间戳。
started_atstring | nullstring | null否开始计算的时间(RFC 3339),或
null。finished_atstring | nullstring | null否任务结束时间(RFC 3339),或
null。progressJobProgressJobProgress否排队中/运行中的实时进度。
stagestringstring否当前阶段,例如
queued、running、finalizing或done。仅供参考:请根据Job.status进行分支处理。vehicles_doneintegerinteger否目前已完成装载的车辆数。
placed_itemsintegerinteger否目前已摆放的物品件数。
summaryJobSummaryJobSummary否计数和耗时。
items_requestedintegerinteger否物品总件数(所有数量之和)。
items_placedintegerinteger否已摆放的件数。
items_unplacedintegerinteger否未能摆放的件数。
vehicles_usedintegerinteger否至少装载一件物品的车辆数。
total_weightnumber · kgnumber · kg否已装载重量。
volume_utilizationnumbernumber否已用车辆的平均容积利用率,0–1。
queue_msintegerinteger否等待计算槽位的时间(不计费)。
compute_msintegerinteger否计算时长(计费)。
costJobCostJobCost否已扣积分(任务结束后为最终值)以及运行期间预留的积分。
creditsnumber · creditsnumber · credits否已扣积分(任务结束前为 0)。失败的任务不收费,但 time_limit_exceeded 除外,它按已取消任务计费。
reserved_creditsnumber · creditsnumber · credits否任务排队/运行期间预留的积分(即最高可能费用)。任务结束时释放。
rate_card_versionintegerinteger否该任务计价所用的价目表。
breakdownCostBreakdownCostBreakdown否费用明细。
basenumber · creditsnumber · credits否任务基础费。
vehiclesnumber · creditsnumber · credits否按装载的车辆计费(已取消或 time_limit_exceeded 的任务不收取)。
computenumber · creditsnumber · credits否按计算秒计费,按毫秒比例折算。
large_loadnumber · creditsnumber · credits否超出大批量装载阈值的部分,每 100 件收取的附加费(不足 100 件按 100 件计)。
errorJobError | nullJobError | null否任务失败或被取消的原因;否则为
null。codestringstring否机器可读的错误码(参见“错误”)。
messagestringstring否英文说明。
warningsWarning[]Warning[]否关于请求的非阻断性提示(结果中也会重复列出)。
codestringstring否机器可读的代码。
messagestringstring否英文说明。
result_urlstringstring否status为succeeded后,对此 URL 发起 GET 请求以获取完整结果。pdf_urlstringstring否浏览器链接,打开后会将装载方案生成为 PDF(3D 视图 + 装载步骤)。在 expires_at 之前有效,过期后为空。
expires_atstringstring否请求体/结果体和 PDF 链接的删除时间(RFC 3339)。任务元数据和扣费记录会保留。
resultResultResult否完整结果,仅在请求时(?include=result)或 POST /v1/pack?wait= 按时完成时内联返回。
job_idstringstring否所属任务。
vehiclesResultVehicle[]ResultVehicle[]否按装载顺序排列的已装载车辆(不含空车)。
indexintegerinteger否在方案中的位置,从 0 开始。
vehicle_idstringstring否您的车辆定义 ID(项目任务中为车辆条目 ID,pv_…)。
copyintegerinteger否该车辆定义的副本序号,从 1 开始(quantity > 1,或在 auto 模式下添加时)。
auto_addedbooleanboolean否在您列出的
quantity之外,由packing_modeauto自动添加。namestringstring否车辆名称。
typestringstring否车辆类型。
lengthnumber · cmnumber · cm否货厢长度。
widthnumber · cmnumber · cm否货厢宽度。
heightnumber · cmnumber · cm否货厢高度。
max_weightnumber · kgnumber · kg否载重上限。
items_placedintegerinteger否此车内的件数。
total_weightnumber · kgnumber · kg否此车装载的重量。
volume_utilizationnumbernumber否已用容积 / 货厢容积,0–1。
weight_utilizationnumbernumber否total_weight / max_weight,0–1(启用 allow_overweight 时可能超过 1)。
center_of_gravityPointPoint否货物的重心(cm)。
xnumber · cmnumber · cm否ynumber · cmnumber · cm否znumber · cmnumber · cm否placementsPlacement[]Placement[]否此车内每件物品的摆放位置。
item_idstringstring否您的物品定义 ID(项目任务中为物品 ID,item_…)。
instanceintegerinteger否该物品定义内从 1 开始的件序号(在整个方案中唯一)。
labelstringstring否物品标签。
xnumber · cmnumber · cm否最小角点沿长度方向的位置。
ynumber · cmnumber · cm否最小角点距地板的高度。
znumber · cmnumber · cm否最小角点沿宽度方向的位置。
lengthnumber · cmnumber · cm否摆放后沿 x 轴的尺寸。
widthnumber · cmnumber · cm否摆放后沿 z 轴的尺寸。
heightnumber · cmnumber · cm否摆放后沿 y 轴的尺寸。
rotatedbooleanboolean否以不同于定义的朝向摆放。
orientationstringstring否定义中的哪条边分别沿 x、z、y 轴:
lwh= 与定义一致,wlh= 绕竖直轴旋转 90°,lhw、hwl、whl、hlw= 侧放。stepintegerinteger否该车内从 1 开始的装载步骤(按升序装载)。
weightnumber · kgnumber · kg否单件重量。
axle_loads需申请开通AxleLoad[]AxleLoad[]否各轴载荷(仅限含车轴数据的车辆)。
namestringstring否Axle 1、Axle 2…,顺序与axle_positions一致。positionnumber · cmnumber · cm否车轴距货厢前端的位置。
loadnumber · kgnumber · kg否该轴承受的货物载荷。
maxnumber · kgnumber · kg否配置的上限(0 = 无上限)。
okbooleanboolean否load≤max(未设上限时始终为true)。unplacedUnplacedItem[]UnplacedItem[]否未能摆放的物品及原因。
item_idstringstring否您的物品定义 ID。
instanceintegerinteger否件序号,从 1 开始。
labelstringstring否物品标签。
reasonstringstring否无法摆放的原因。
warningsWarning[]Warning[]否关于方案的提示。
codestringstring否机器可读的代码。
messagestringstring否英文说明。
pdf_urlstringstring否浏览器链接,打开后会将方案生成为 PDF。
expires_atstringstring否此结果的删除时间(RFC 3339)。
400Bad request
invalid_jsonidempotency_key_invalidinvalid_json请求体不是有效的 JSON,或某个字段类型错误。idempotency_key_invalidIdempotency-Key 请求头超过 128 个字符。
全部错误码名称类型必填说明errorErrorBody必填ErrorBody是codestring必填string是机器可读的错误码(snake_case)。请根据它进行分支处理,切勿依据
message。messagestring必填string是英文说明。
request_idstring必填string是与 X-Request-Id 响应头相同。联系技术支持时请提供。
detailsErrorDetail[]ErrorDetail[]否逐字段列出的问题(
validation_failed)。pathstringstring否出错字段的 JSON 路径,例如 items[3].length。
codestringstring否required、invalid_value、out_of_range、duplicate_id、unknown_vehicle、unknown_template、type_not_allowed、unknown_group、does_not_fit、too_many_items、too_many_vehicles、unknown_field、invalid_json。messagestringstring否英文说明。
401Unauthorized
unauthorizedkey_revokedkey_expiredunauthorizedAPI 密钥缺失、格式错误或无法识别。key_revoked密钥已被撤销。key_expired密钥已过期。
全部错误码名称类型必填说明errorErrorBody必填ErrorBody是codestring必填string是机器可读的错误码(snake_case)。请根据它进行分支处理,切勿依据
message。messagestring必填string是英文说明。
request_idstring必填string是与 X-Request-Id 响应头相同。联系技术支持时请提供。
detailsErrorDetail[]ErrorDetail[]否逐字段列出的问题(
validation_failed)。pathstringstring否出错字段的 JSON 路径,例如 items[3].length。
codestringstring否required、invalid_value、out_of_range、duplicate_id、unknown_vehicle、unknown_template、type_not_allowed、unknown_group、does_not_fit、too_many_items、too_many_vehicles、unknown_field、invalid_json。messagestringstring否英文说明。
402Payment required
insufficient_creditsinsufficient_credits可用积分不足以支付该任务的最低可能费用。
全部错误码名称类型必填说明errorErrorBody必填ErrorBody是codestring必填string是机器可读的错误码(snake_case)。请根据它进行分支处理,切勿依据
message。messagestring必填string是英文说明。
request_idstring必填string是与 X-Request-Id 响应头相同。联系技术支持时请提供。
detailsErrorDetail[]ErrorDetail[]否逐字段列出的问题(
validation_failed)。pathstringstring否出错字段的 JSON 路径,例如 items[3].length。
codestringstring否required、invalid_value、out_of_range、duplicate_id、unknown_vehicle、unknown_template、type_not_allowed、unknown_group、does_not_fit、too_many_items、too_many_vehicles、unknown_field、invalid_json。messagestringstring否英文说明。
403Forbidden
ip_not_allowedsubscription_inactiveaccount_inactivescope_missingip_not_allowed调用方 IP 不在该密钥的 IP 白名单中。subscription_inactive组织没有包含 API 的有效订阅。account_inactive组织已被暂停使用,或其所有者的账户均未处于有效状态。scope_missing密钥缺少此接口所需的权限范围。
全部错误码名称类型必填说明errorErrorBody必填ErrorBody是codestring必填string是机器可读的错误码(snake_case)。请根据它进行分支处理,切勿依据
message。messagestring必填string是英文说明。
request_idstring必填string是与 X-Request-Id 响应头相同。联系技术支持时请提供。
detailsErrorDetail[]ErrorDetail[]否逐字段列出的问题(
validation_failed)。pathstringstring否出错字段的 JSON 路径,例如 items[3].length。
codestringstring否required、invalid_value、out_of_range、duplicate_id、unknown_vehicle、unknown_template、type_not_allowed、unknown_group、does_not_fit、too_many_items、too_many_vehicles、unknown_field、invalid_json。messagestringstring否英文说明。
413Payload too large
payload_too_largepayload_too_large请求体超过 10 MB。
全部错误码名称类型必填说明errorErrorBody必填ErrorBody是codestring必填string是机器可读的错误码(snake_case)。请根据它进行分支处理,切勿依据
message。messagestring必填string是英文说明。
request_idstring必填string是与 X-Request-Id 响应头相同。联系技术支持时请提供。
detailsErrorDetail[]ErrorDetail[]否逐字段列出的问题(
validation_failed)。pathstringstring否出错字段的 JSON 路径,例如 items[3].length。
codestringstring否required、invalid_value、out_of_range、duplicate_id、unknown_vehicle、unknown_template、type_not_allowed、unknown_group、does_not_fit、too_many_items、too_many_vehicles、unknown_field、invalid_json。messagestringstring否英文说明。
422Unprocessable entity
validation_failedvalidation_failed请求是格式正确的 JSON,但描述的任务无效。details[] 列出了所有问题。
全部错误码名称类型必填说明errorErrorBody必填ErrorBody是codestring必填string是机器可读的错误码(snake_case)。请根据它进行分支处理,切勿依据
message。messagestring必填string是英文说明。
request_idstring必填string是与 X-Request-Id 响应头相同。联系技术支持时请提供。
detailsErrorDetail[]ErrorDetail[]否逐字段列出的问题(
validation_failed)。pathstringstring否出错字段的 JSON 路径,例如 items[3].length。
codestringstring否required、invalid_value、out_of_range、duplicate_id、unknown_vehicle、unknown_template、type_not_allowed、unknown_group、does_not_fit、too_many_items、too_many_vehicles、unknown_field、invalid_json。messagestringstring否英文说明。
429Too many requests
too_many_jobsrate_limitedtoo_many_jobs组织的排队中 + 运行中任务数已达上限。rate_limited当前分钟、小时或天内的请求过多(按密钥或按组织计),或您的 IP 地址每分钟认证失败超过 60 次。
全部错误码名称类型必填说明errorErrorBody必填ErrorBody是codestring必填string是机器可读的错误码(snake_case)。请根据它进行分支处理,切勿依据
message。messagestring必填string是英文说明。
request_idstring必填string是与 X-Request-Id 响应头相同。联系技术支持时请提供。
detailsErrorDetail[]ErrorDetail[]否逐字段列出的问题(
validation_failed)。pathstringstring否出错字段的 JSON 路径,例如 items[3].length。
codestringstring否required、invalid_value、out_of_range、duplicate_id、unknown_vehicle、unknown_template、type_not_allowed、unknown_group、does_not_fit、too_many_items、too_many_vehicles、unknown_field、invalid_json。messagestringstring否英文说明。
500Internal server error
internal_errorinternal_error服务端发生内部错误。
全部错误码名称类型必填说明errorErrorBody必填ErrorBody是codestring必填string是机器可读的错误码(snake_case)。请根据它进行分支处理,切勿依据
message。messagestring必填string是英文说明。
request_idstring必填string是与 X-Request-Id 响应头相同。联系技术支持时请提供。
detailsErrorDetail[]ErrorDetail[]否逐字段列出的问题(
validation_failed)。pathstringstring否出错字段的 JSON 路径,例如 items[3].length。
codestringstring否required、invalid_value、out_of_range、duplicate_id、unknown_vehicle、unknown_template、type_not_allowed、unknown_group、does_not_fit、too_many_items、too_many_vehicles、unknown_field、invalid_json。messagestringstring否英文说明。
503Service unavailable
api_disabledapi_disabledAPI 暂时停用(维护中),或已对该组织关闭。
全部错误码名称类型必填说明errorErrorBody必填ErrorBody是codestring必填string是机器可读的错误码(snake_case)。请根据它进行分支处理,切勿依据
message。messagestring必填string是英文说明。
request_idstring必填string是与 X-Request-Id 响应头相同。联系技术支持时请提供。
detailsErrorDetail[]ErrorDetail[]否逐字段列出的问题(
validation_failed)。pathstringstring否出错字段的 JSON 路径,例如 items[3].length。
codestringstring否required、invalid_value、out_of_range、duplicate_id、unknown_vehicle、unknown_template、type_not_allowed、unknown_group、does_not_fit、too_many_items、too_many_vehicles、unknown_field、invalid_json。messagestringstring否英文说明。