Get a project
A project with its vehicles, items, groups, options and a summary of its current plan (with the PDF link while the plan is the one an API job saved).
Free: no credits are charged.
المصادقة
معاملات المسار
idstringمطلوبProject 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"
}
}الاستجابات
200OKThe project.
الاسمالنوعمطلوبالوصفidstringstringلاProject id (prj_…).
objectstringstringلاprojectnamestringstringلاstatusstringstringلاdraft= never packed or inputs replaced;calculated= has a current plan;stale= a setting changed since the plan was made.draftcalculatedstaleerroritem_countintegerintegerلاItem units (sum of quantities).
vehicle_countintegerintegerلاVehicles (sum of quantities).
app_urlstringstringلاOpens the project in the app's 3D editor.
created_byUserRef | nullUserRef | nullلاThe member who created it (for API calls: the member who created the key).
nullwhen unknown.idstringstringلاMember id (usr_…). Filter lists with ?created_by=.
namestringstringلاupdated_byUserRef | nullUserRef | nullلاThe member who last changed it.
idstringstringلاMember id (usr_…). Filter lists with ?created_by=.
namestringstringلاcreated_atstringstringلاRFC 3339.
updated_atstringstringلاRFC 3339.
optionsProjectOptionsProjectOptionsلاThe pack options a project stores.
packing_modestringstringلاauto= when the listed vehicles are full, more copies of the most suitable vehicle are added (up to the job's vehicle limit);fleet_only= only the listed vehicles are used, anything that does not fit is reported as unplaced.autofleet_onlyالافتراضي"auto"group_routingstringstringلاnone= groups are informational;wall= each group gets its own section of the vehicle;routing= groups load in order and a later group may sit on or beside an earlier one but never below it (multi-stop delivery);no_stack= groups load in order side by side, never on top of each other.nonewallroutingno_stackالافتراضي"none"allow_overweightbooleanbooleanلاIgnore vehicle payload limits.
الافتراضيfalsevehiclesProjectVehicle[]ProjectVehicle[]لاidstringstringلاSlot id (pv_…). Results of the project's jobs refer to it as vehicle_id. Read-only.
vehicle_idstringمطلوبstringنعمA vehicle id from GET /v1/vehicles (preset or veh_…).
namestringstringلاThe saved vehicle's name. Read-only.
typestringstringلاThe saved vehicle's type. Read-only.
trucktrailerflatbedcontainerpalletaircraftshiplengthnumber · cmnumber · cmلاThe size the slot packs with; sent, an override of the saved vehicle's.
widthnumber · cmnumber · cmلاThe size the slot packs with; sent, an override of the saved vehicle's.
heightnumber · cmnumber · cmلاThe size the slot packs with; sent, an override of the saved vehicle's.
max_weightnumber · kgnumber · kgلاThe size the slot packs with; sent, an override of the saved vehicle's.
quantityintegerintegerلاHow many identical vehicles of this definition are available.
الافتراضي11–100aux_deckbooleanbooleanلاThe vehicle has a second deck (double-decker).
الافتراضيfalseaux_deck_heightnumber · cmnumber · cmلاSecond deck height above the floor. Required when
aux_deckistrue.aux_deck_max_weightnumber · kgnumber · kgلاLoad limit of the second deck. Required when
aux_deckistrue.blocked_areasRect[]Rect[]لاFloor zones nothing may stand on (wheel arches, damage, reserved space). Each must lie on the vehicle floor.
≤ 32 itemsxnumber · cmمطلوبnumber · cmنعمDistance from the front wall to the rectangle's near edge.
znumber · cmمطلوبnumber · cmنعمDistance from the right wall (z = 0; right as seen from the door looking in) to the rectangle's near edge.
lengthnumber · cmمطلوبnumber · cmنعمExtent along x.
widthnumber · cmمطلوبnumber · cmنعمExtent along z.
tractor_weightيتطلب صلاحية وصولnumber · kgnumber · kgلاSemi-trailer axle model: tractor unit mass.
empty_trailer_weightيتطلب صلاحية وصولnumber · kgnumber · kgلاSemi-trailer axle model: unladen trailer mass.
front_axle_to_middle_axleيتطلب صلاحية وصولnumber · cmnumber · cmلاSemi-trailer axle model: tractor front axle to drive (middle) axle.
front_axle_to_tractor_cogيتطلب صلاحية وصولnumber · cmnumber · cmلاSemi-trailer axle model: front axle to tractor centre of gravity.
front_axle_to_kingpinيتطلب صلاحية وصولnumber · cmnumber · cmلاSemi-trailer axle model: front axle to kingpin (fifth wheel).
kingpin_to_rear_axleيتطلب صلاحية وصولnumber · cmnumber · cmلاSemi-trailer axle model: kingpin to trailer rear axle group.
trailer_cog_to_rear_axleيتطلب صلاحية وصولnumber · cmnumber · cmلاSemi-trailer axle model: trailer centre of gravity to rear axle group.
trailer_start_to_kingpinيتطلب صلاحية وصولnumber · cmnumber · cmلاSemi-trailer axle model: trailer front to kingpin.
max_middle_axle_weightيتطلب صلاحية وصولnumber · kgnumber · kgلاSemi-trailer axle model: legal drive (middle) axle limit.
max_rear_axle_weightيتطلب صلاحية وصولnumber · kgnumber · kgلاSemi-trailer axle model: legal rear axle group limit.
itemsItem[]Item[]لاCargo in the /v1/pack Item shape; ids are item_….
idstringstringلاYour identifier, unique within the request. Results refer to it as item_id. Defaults to template_id.
≤ 128 charstemplate_idstringstringلاA template id (tpl_…) from GET /v1/templates. Supplies every item field; fields sent next to it override them.
labelstringstringلاDisplay label (defaults to the id).
≤ 255 charsshapestringstringلاItem shape.
cylinderanddrumuseradius+heightinstead oflength+width;palletanddrumalways stay upright.boxcylinderpalletbagdrumالافتراضي"box"lengthnumber · cmnumber · cmلاLength. Required unless
shapeiscylinderordrum.widthnumber · cmnumber · cmلاWidth. Required unless
shapeiscylinderordrum.heightnumber · cmمطلوبnumber · cmنعمHeight (the vertical side when the item stands as defined).
radiusnumber · cmnumber · cmلاRadius. Required when
shapeiscylinderordrum.weightnumber · kgمطلوبnumber · kgنعمWeight of ONE unit.
quantityintegerintegerلاNumber of identical units.
الافتراضي11–10000stackablebooleanbooleanلاOther items may be placed on top of this one.
الافتراضيtruemax_stack_weightnumber · kgnumber · kgلاMaximum weight that may rest on one unit. 0 = unlimited.
الافتراضي0rotationstringstringلاall= any of the six orientations;upright= may only turn around the vertical axis (this side up);fixed= never rotated.alluprightfixedالافتراضي"all"hazardousbooleanbooleanلاDangerous goods: kept low and separated from other hazardous items.
الافتراضيfalsepriorityintegerintegerلاLoad priority. Higher = loaded first and kept when space runs out. 0 = none.
الافتراضي0groupstringstringلاName of the group this item belongs to (see
groupsandoptions.group_routing).colorstringstringلاDisplay colour as #rrggbb (viewer and PDF only).
nesting_heightnumber · cmnumber · cmلاTelescoping overlap when identical units stack (nested crates, buckets).
الافتراضي0groupsGroup[]Group[]لاnamestringمطلوبstringنعمGroup name, referenced by Item.group.
≤ 128 charsorderintegerintegerلاLoading order (lower = loaded first). Defaults to the position in the list.
colorstringstringلاDisplay colour as #rrggbb.
planProjectPlan | nullProjectPlan | nullلاThe current plan;
nullwhen the project has none.items_placedintegerintegerلاUnits placed.
items_unplacedintegerintegerلاUnits that could not be placed.
vehicles_usedintegerintegerلاVehicles carrying at least one item.
total_weightnumber · kgnumber · kgلاWeight loaded.
volume_utilizationnumbernumberلاAverage volume utilization of the used vehicles, 0–1.
job_idstringstringلاThe API job whose plan this is, while nothing changed it since. Empty for a plan made or edited in the app.
pdf_urlstringstringلاThat job's PDF link (until its expires_at). Empty otherwise.
401Unauthorized
unauthorizedkey_revokedkey_expiredunauthorizedMissing, malformed or unknown API key.key_revokedThe key was revoked.key_expiredThe key passed its expiry date.
كل رموز الأخطاءالاسمالنوعمطلوبالوصفerrorErrorBodyمطلوبErrorBodyنعمcodestringمطلوبstringنعمMachine code (snake_case). Branch on this, never on
message.messagestringمطلوبstringنعمEnglish explanation.
request_idstringمطلوبstringنعمSame as the X-Request-Id header. Quote it when contacting support.
detailsErrorDetail[]ErrorDetail[]لاPer-field problems (
validation_failed).pathstringstringلاJSON path of the offending field, e.g. 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لاEnglish explanation.
403Forbidden
ip_not_allowedsubscription_inactiveaccount_inactivescope_missingip_not_allowedThe calling IP is not on the key's allowlist.subscription_inactiveThe organization has no active subscription that includes the API.account_inactiveThe organization is suspended, or has no owner whose account is active.scope_missingThe key lacks a scope this endpoint needs.
كل رموز الأخطاءالاسمالنوعمطلوبالوصفerrorErrorBodyمطلوبErrorBodyنعمcodestringمطلوبstringنعمMachine code (snake_case). Branch on this, never on
message.messagestringمطلوبstringنعمEnglish explanation.
request_idstringمطلوبstringنعمSame as the X-Request-Id header. Quote it when contacting support.
detailsErrorDetail[]ErrorDetail[]لاPer-field problems (
validation_failed).pathstringstringلاJSON path of the offending field, e.g. 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لاEnglish explanation.
404Not found
project_not_foundproject_not_foundNo project with this id in your organization.
كل رموز الأخطاءالاسمالنوعمطلوبالوصفerrorErrorBodyمطلوبErrorBodyنعمcodestringمطلوبstringنعمMachine code (snake_case). Branch on this, never on
message.messagestringمطلوبstringنعمEnglish explanation.
request_idstringمطلوبstringنعمSame as the X-Request-Id header. Quote it when contacting support.
detailsErrorDetail[]ErrorDetail[]لاPer-field problems (
validation_failed).pathstringstringلاJSON path of the offending field, e.g. 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لاEnglish explanation.
429Too many requests
rate_limitedrate_limitedToo many requests in the current minute, hour or day (per key or per organization), or more than 60 failed authentications per minute from your IP address.
كل رموز الأخطاءالاسمالنوعمطلوبالوصفerrorErrorBodyمطلوبErrorBodyنعمcodestringمطلوبstringنعمMachine code (snake_case). Branch on this, never on
message.messagestringمطلوبstringنعمEnglish explanation.
request_idstringمطلوبstringنعمSame as the X-Request-Id header. Quote it when contacting support.
detailsErrorDetail[]ErrorDetail[]لاPer-field problems (
validation_failed).pathstringstringلاJSON path of the offending field, e.g. 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لاEnglish explanation.
500Internal server error
internal_errorinternal_errorSomething failed on our side.
كل رموز الأخطاءالاسمالنوعمطلوبالوصفerrorErrorBodyمطلوبErrorBodyنعمcodestringمطلوبstringنعمMachine code (snake_case). Branch on this, never on
message.messagestringمطلوبstringنعمEnglish explanation.
request_idstringمطلوبstringنعمSame as the X-Request-Id header. Quote it when contacting support.
detailsErrorDetail[]ErrorDetail[]لاPer-field problems (
validation_failed).pathstringstringلاJSON path of the offending field, e.g. 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لاEnglish explanation.
503Service unavailable
api_disabledapi_disabledThe API is temporarily disabled (maintenance) or switched off for the organization.
كل رموز الأخطاءالاسمالنوعمطلوبالوصفerrorErrorBodyمطلوبErrorBodyنعمcodestringمطلوبstringنعمMachine code (snake_case). Branch on this, never on
message.messagestringمطلوبstringنعمEnglish explanation.
request_idstringمطلوبstringنعمSame as the X-Request-Id header. Quote it when contacting support.
detailsErrorDetail[]ErrorDetail[]لاPer-field problems (
validation_failed).pathstringstringلاJSON path of the offending field, e.g. 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لاEnglish explanation.