查询项目
项目及其车辆、物品、分组、选项和当前方案摘要(当前方案由 API 任务保存时,附带 PDF 链接)。
免费,不扣积分。
认证
路径参数
idstring必填项目 ID(prj_…)。
请求示例
curl -X GET "https://runner.cargoduo.com/v1/projects/prj_3051" \
-H "Authorization: Bearer $CARGODUO_API_KEY"const res = await fetch("https://runner.cargoduo.com/v1/projects/prj_3051", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.CARGODUO_API_KEY}`,
},
});
const data = await res.json();
console.log(res.status, data);import os
import requests
response = requests.get(
"https://runner.cargoduo.com/v1/projects/prj_3051",
headers={"Authorization": f"Bearer {os.environ['CARGODUO_API_KEY']}"},
)
print(response.status_code, response.json())package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://runner.cargoduo.com/v1/projects/prj_3051", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("CARGODUO_API_KEY"))
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 {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://runner.cargoduo.com/v1/projects/prj_3051"))
.header("Authorization", "Bearer " + System.getenv("CARGODUO_API_KEY"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.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"));
var request = new HttpRequestMessage(HttpMethod.Get, "https://runner.cargoduo.com/v1/projects/prj_3051");
var response = await client.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");<?php
$ch = curl_init('https://runner.cargoduo.com/v1/projects/prj_3051');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CARGODUO_API_KEY'),
],
]);
$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/projects/prj_3051")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer #{ENV.fetch("CARGODUO_API_KEY")}"
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": "prj_3051",
"object": "project",
"name": "Order 1042",
"status": "calculated",
"item_count": 58,
"vehicle_count": 1,
"app_url": "https://app.cargoduo.com/projects/3051",
"created_by": {
"id": "usr_7",
"name": "Elif Kaya"
},
"updated_by": {
"id": "usr_7",
"name": "Elif Kaya"
},
"created_at": "2026-10-19T09:10:03Z",
"updated_at": "2026-10-19T09:12:07Z",
"options": {
"packing_mode": "auto",
"group_routing": "none",
"allow_overweight": false
},
"vehicles": [
{
"id": "pv_5120",
"vehicle_id": "standard-trailer-13-6m",
"name": "Standard Trailer (13.6m)",
"type": "trailer",
"quantity": 1,
"length": 1362,
"width": 248,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "item_88410",
"label": "Euro pallet",
"shape": "box",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false,
"rotation": "all",
"color": "#3b82f6"
},
{
"id": "item_88411",
"label": "Carton A",
"shape": "box",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"stackable": true,
"rotation": "upright",
"color": "#f59e0b"
}
],
"groups": [],
"plan": {
"items_placed": 58,
"items_unplaced": 0,
"vehicles_used": 1,
"total_weight": 8580,
"volume_utilization": 0.3116,
"job_id": "job_4bK9mT2xQe7LpW1zRc8VdN3f",
"pdf_url": "https://app.cargoduo.com/r/Xq7Lm2Vt9KbR4cN8wZp1Hs6Yd3Fg5Jk0Ta2Ue7Wn4Ci"
}
}响应
200OK该项目。
名称类型必填说明idstringstring否项目 ID(prj_…)。
objectstringstring否projectnamestringstring否statusstringstring否draft= 从未计算过或输入已被替换;calculated= 有当前方案;stale= 方案生成后设置有变更。draftcalculatedstaleerroritem_countintegerinteger否物品件数(所有数量之和)。
vehicle_countintegerinteger否车辆数(所有数量之和)。
app_urlstringstring否在应用的 3D 编辑器中打开该项目。
created_byUserRef | nullUserRef | null否创建者(通过 API 调用时为创建该密钥的成员)。未知时为
null。idstringstring否成员 ID(usr_…)。可用 ?created_by= 筛选列表。
namestringstring否updated_byUserRef | nullUserRef | null否最后修改它的成员。
idstringstring否成员 ID(usr_…)。可用 ?created_by= 筛选列表。
namestringstring否created_atstringstring否RFC 3339 格式。
updated_atstringstring否RFC 3339 格式。
optionsProjectOptionsProjectOptions否项目保存的装载选项。
packing_modestringstring否auto= 列出的车辆装满后,自动追加最合适的车辆(不超过任务的车辆上限);fleet_only= 只使用列出的车辆,装不下的物品报告为未装载。autofleet_only默认值"auto"group_routingstringstring否none= 分组仅作标识;wall= 每个分组占用车辆中独立的区段;routing= 分组按顺序装载,后装的分组可以放在先装分组的上方或旁边,但不能在其下方(多站点配送);no_stack= 分组按顺序并排装载,互不堆叠。nonewallroutingno_stack默认值"none"allow_overweightbooleanboolean否忽略车辆载重上限。
默认值falsevehiclesProjectVehicle[]ProjectVehicle[]否idstringstring否车辆条目 ID(pv_…)。项目任务的结果中以 vehicle_id 引用。只读。
vehicle_idstring必填string是来自 GET /v1/vehicles 的车辆 ID(预设车辆或 veh_…)。
namestringstring否已保存车辆的名称。只读。
typestringstring否已保存车辆的类型。只读。
trucktrailerflatbedcontainerpalletaircraftshiplengthnumber · cmnumber · cm否该条目装载时使用的尺寸;发送时将覆盖已保存车辆的对应值。
widthnumber · cmnumber · cm否该条目装载时使用的尺寸;发送时将覆盖已保存车辆的对应值。
heightnumber · cmnumber · cm否该条目装载时使用的尺寸;发送时将覆盖已保存车辆的对应值。
max_weightnumber · kgnumber · kg否该条目装载时使用的尺寸;发送时将覆盖已保存车辆的对应值。
quantityintegerinteger否按此定义可用的相同车辆数量。
默认值11–100aux_deckbooleanboolean否车辆有第二层甲板(双层车)。
默认值falseaux_deck_heightnumber · cmnumber · cm否第二层甲板距地板的高度。
aux_deck为true时必填。aux_deck_max_weightnumber · kgnumber · kg否第二层甲板的载重上限。
aux_deck为true时必填。blocked_areasRect[]Rect[]否禁止放置货物的地板区域(轮拱、破损处、预留空间)。每个区域都必须位于车辆地板范围内。
≤ 32 itemsxnumber · cm必填number · cm是前壁到矩形近边的距离。
znumber · cm必填number · cm是右壁(z = 0;从车门向内看的右侧)到矩形近边的距离。
lengthnumber · cm必填number · cm是沿 x 轴的长度。
widthnumber · cm必填number · cm是沿 z 轴的宽度。
tractor_weight需申请开通number · kgnumber · kg否半挂车轴荷模型:牵引车质量。
empty_trailer_weight需申请开通number · kgnumber · kg否半挂车轴荷模型:挂车空载质量。
front_axle_to_middle_axle需申请开通number · cmnumber · cm否半挂车轴荷模型:牵引车前轴到驱动轴(中轴)的距离。
front_axle_to_tractor_cog需申请开通number · cmnumber · cm否半挂车轴荷模型:前轴到牵引车重心的距离。
front_axle_to_kingpin需申请开通number · cmnumber · cm否半挂车轴荷模型:前轴到牵引销(鞍座)的距离。
kingpin_to_rear_axle需申请开通number · cmnumber · cm否半挂车轴荷模型:牵引销到挂车后轴组的距离。
trailer_cog_to_rear_axle需申请开通number · cmnumber · cm否半挂车轴荷模型:挂车重心到后轴组的距离。
trailer_start_to_kingpin需申请开通number · cmnumber · cm否半挂车轴荷模型:挂车前端到牵引销的距离。
max_middle_axle_weight需申请开通number · kgnumber · kg否半挂车轴荷模型:驱动轴(中轴)的法定限值。
max_rear_axle_weight需申请开通number · kgnumber · kg否半挂车轴荷模型:后轴组的法定限值。
itemsItem[]Item[]否货物,结构与 /v1/pack 的 Item 相同;ID 形如 item_…。
idstringstring否您定义的标识符,在请求内唯一。结果中以 item_id 引用。默认为 template_id。
≤ 128 charstemplate_idstringstring否引用模板,由模板提供物品的全部字段;与其一同发送的字段会覆盖模板中的值。模板 ID(tpl_…)取自 GET /v1/templates.
labelstringstring否显示标签(默认取 id 的值)。
≤ 255 charsshapestringstring否物品形状。
cylinder和drum使用radius+height,而非length+width;pallet和drum始终保持直立。boxcylinderpalletbagdrum默认值"box"lengthnumber · cmnumber · cm否长度。除非
shape为cylinder或drum,否则必填。widthnumber · cmnumber · cm否宽度。除非
shape为cylinder或drum,否则必填。heightnumber · cm必填number · cm是高度(物品按定义摆放时的竖直边)。
radiusnumber · cmnumber · cm否半径。
shape为cylinder或drum时必填。weightnumber · kg必填number · kg是单件物品的重量。
quantityintegerinteger否相同物品的件数。
默认值11–10000stackablebooleanboolean否允许在其上方放置其他物品。
默认值truemax_stack_weightnumber · kgnumber · kg否单件物品上方可承受的最大重量。0 = 不限。
默认值0rotationstringstring否all= 六种朝向均可;upright= 只能绕竖直轴旋转(此面朝上);fixed= 不旋转。alluprightfixed默认值"all"hazardousbooleanboolean否危险品:放在低处,并与其他危险品隔开。
默认值falsepriorityintegerinteger否装载优先级。值越高越先装载,空间不足时优先保留。0 = 无。
默认值0groupstringstring否该物品所属分组的名称(参见
groups和options.group_routing)。colorstringstring否显示颜色,格式为 #rrggbb(仅用于查看器和 PDF)。
nesting_heightnumber · cmnumber · cm否相同物品堆叠时相互嵌套的重叠高度(如可嵌套的周转箱、桶)。
默认值0groupsGroup[]Group[]否namestring必填string是分组名称,由 Item.group 引用。
≤ 128 charsorderintegerinteger否装载顺序(值越小越先装载)。默认为在列表中的位置。
colorstringstring否显示颜色,格式为 #rrggbb。
planProjectPlan | nullProjectPlan | null否当前方案;项目没有方案时为
null。items_placedintegerinteger否已摆放的件数。
items_unplacedintegerinteger否未能摆放的件数。
vehicles_usedintegerinteger否至少装载一件物品的车辆数。
total_weightnumber · kgnumber · kg否已装载重量。
volume_utilizationnumbernumber否已用车辆的平均容积利用率,0–1。
job_idstringstring否生成此方案的 API 任务(方案此后未被修改时)。在应用中生成或编辑的方案为空。
pdf_urlstringstring否该任务的 PDF 链接(在其 expires_at 之前有效)。否则为空。
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否英文说明。
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否英文说明。
404Not found
project_not_foundproject_not_found您的组织中没有此 ID 的项目。
全部错误码名称类型必填说明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
rate_limitedrate_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否英文说明。