Pobierz projekt
Projekt z pojazdami, pozycjami, grupami, opcjami i podsumowaniem bieżącego planu (z linkiem do PDF, dopóki plan pochodzi z zadania API).
Bezpłatnie: nie pobieramy kredytów.
Uwierzytelnianie
Parametry ścieżki
idstringwymaganeID projektu (prj_…).
Przykładowe zapytanie
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.bodyPrzykładowa odpowiedź
{
"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"
}
}Odpowiedzi
200OKProjekt.
NazwaTypWymaganyOpisidstringstringNieID projektu (prj_…).
objectstringstringNieprojectnamestringstringNiestatusstringstringNiedraft= załadunku nigdy nie zaplanowano lub zastąpiono dane wejściowe;calculated= ma bieżący plan;stale= od utworzenia planu zmieniono ustawienie.draftcalculatedstaleerroritem_countintegerintegerNieLiczba sztuk (suma ilości).
vehicle_countintegerintegerNieLiczba pojazdów (suma ilości).
app_urlstringstringNieOtwiera projekt w edytorze 3D aplikacji.
created_byUserRef | nullUserRef | nullNieCzłonek organizacji, który go utworzył (przy wywołaniach API: twórca klucza).
null, gdy nieznany.idstringstringNieID członka (usr_…). Filtruj listy przez ?created_by=.
namestringstringNieupdated_byUserRef | nullUserRef | nullNieCzłonek organizacji, który ostatnio go zmienił.
idstringstringNieID członka (usr_…). Filtruj listy przez ?created_by=.
namestringstringNiecreated_atstringstringNieRFC 3339.
updated_atstringstringNieRFC 3339.
optionsProjectOptionsProjectOptionsNieOpcje załadunku zapisane w projekcie.
packing_modestringstringNieauto= gdy podane pojazdy są pełne, dodawane są kolejne egzemplarze najlepiej pasującego pojazdu (do limitu pojazdów zadania);fleet_only= używane są tylko podane pojazdy, a wszystko, co się nie zmieści, jest zgłaszane jako nierozmieszczone.autofleet_onlyDomyślnie"auto"group_routingstringstringNienone= grupy mają charakter informacyjny;wall= każda grupa dostaje własną sekcję pojazdu;routing= grupy są ładowane po kolei, a późniejsza grupa może stać na wcześniejszej lub obok niej, ale nigdy pod nią (dostawy do wielu punktów);no_stack= grupy są ładowane po kolei obok siebie, nigdy jedna na drugiej.nonewallroutingno_stackDomyślnie"none"allow_overweightbooleanbooleanNieIgnoruj limity ładowności pojazdów.
DomyślniefalsevehiclesProjectVehicle[]ProjectVehicle[]NieidstringstringNieID slotu (pv_…). Wyniki zadań projektu odwołują się do niego jako vehicle_id. Tylko do odczytu.
vehicle_idstringwymaganestringTakID pojazdu z GET /v1/vehicles (preset lub veh_…).
namestringstringNieNazwa zapisanego pojazdu. Tylko do odczytu.
typestringstringNieTyp zapisanego pojazdu. Tylko do odczytu.
trucktrailerflatbedcontainerpalletaircraftshiplengthnumber · cmnumber · cmNieWartość używana przy planowaniu slotu; wysłana nadpisuje wartość zapisanego pojazdu.
widthnumber · cmnumber · cmNieWartość używana przy planowaniu slotu; wysłana nadpisuje wartość zapisanego pojazdu.
heightnumber · cmnumber · cmNieWartość używana przy planowaniu slotu; wysłana nadpisuje wartość zapisanego pojazdu.
max_weightnumber · kgnumber · kgNieWartość używana przy planowaniu slotu; wysłana nadpisuje wartość zapisanego pojazdu.
quantityintegerintegerNieLiczba dostępnych identycznych pojazdów tej definicji.
Domyślnie11–100aux_deckbooleanbooleanNiePojazd ma drugi pokład (dwupoziomowy).
Domyślniefalseaux_deck_heightnumber · cmnumber · cmNieWysokość drugiego pokładu nad podłogą. Wymagana, gdy
aux_deckma wartośćtrue.aux_deck_max_weightnumber · kgnumber · kgNieLimit obciążenia drugiego pokładu. Wymagany, gdy
aux_deckma wartośćtrue.blocked_areasRect[]Rect[]NieObszary podłogi, na których nic nie może stać (nadkola, uszkodzenia, zarezerwowane miejsce). Każdy musi leżeć na podłodze pojazdu.
≤ 32 itemsxnumber · cmwymaganenumber · cmTakOdległość od przedniej ściany do bliższej krawędzi prostokąta.
znumber · cmwymaganenumber · cmTakOdległość od prawej ściany (z = 0; prawej, patrząc od drzwi do wnętrza) do bliższej krawędzi prostokąta.
lengthnumber · cmwymaganenumber · cmTakRozmiar wzdłuż osi x.
widthnumber · cmwymaganenumber · cmTakRozmiar wzdłuż osi z.
tractor_weightWymaga dostępunumber · kgnumber · kgNieModel osi naczepy: masa ciągnika.
empty_trailer_weightWymaga dostępunumber · kgnumber · kgNieModel osi naczepy: masa pustej naczepy.
front_axle_to_middle_axleWymaga dostępunumber · cmnumber · cmNieModel osi naczepy: od osi przedniej ciągnika do osi napędowej (środkowej).
front_axle_to_tractor_cogWymaga dostępunumber · cmnumber · cmNieModel osi naczepy: od osi przedniej do środka ciężkości ciągnika.
front_axle_to_kingpinWymaga dostępunumber · cmnumber · cmNieModel osi naczepy: od osi przedniej do sworznia królewskiego (siodła).
kingpin_to_rear_axleWymaga dostępunumber · cmnumber · cmNieModel osi naczepy: od sworznia królewskiego do grupy osi tylnych naczepy.
trailer_cog_to_rear_axleWymaga dostępunumber · cmnumber · cmNieModel osi naczepy: od środka ciężkości naczepy do grupy osi tylnych.
trailer_start_to_kingpinWymaga dostępunumber · cmnumber · cmNieModel osi naczepy: od przodu naczepy do sworznia królewskiego.
max_middle_axle_weightWymaga dostępunumber · kgnumber · kgNieModel osi naczepy: dopuszczalny nacisk na oś napędową (środkową).
max_rear_axle_weightWymaga dostępunumber · kgnumber · kgNieModel osi naczepy: dopuszczalny nacisk na grupę osi tylnych.
itemsItem[]Item[]NieŁadunek w formacie Item z /v1/pack; ID mają postać item_….
idstringstringNieTwój identyfikator, unikalny w obrębie zapytania. Wyniki odwołują się do niego jako item_id. Domyślnie template_id.
≤ 128 charstemplate_idstringstringNieID szablonu (tpl_…) z GET /v1/templates. Dostarcza wszystkie pola pozycji; pola wysłane obok niego je nadpisują.
labelstringstringNieWyświetlana etykieta (domyślnie ID).
≤ 255 charsshapestringstringNieKształt pozycji.
cylinderidrumużywająradius+heightzamiastlength+width;palletidrumzawsze stoją pionowo.boxcylinderpalletbagdrumDomyślnie"box"lengthnumber · cmnumber · cmNieDługość. Wymagana, chyba że
shapetocylinderlubdrum.widthnumber · cmnumber · cmNieSzerokość. Wymagana, chyba że
shapetocylinderlubdrum.heightnumber · cmwymaganenumber · cmTakWysokość (bok pionowy, gdy pozycja stoi zgodnie z definicją).
radiusnumber · cmnumber · cmNiePromień. Wymagany, gdy
shapetocylinderlubdrum.weightnumber · kgwymaganenumber · kgTakWaga JEDNEJ sztuki.
quantityintegerintegerNieLiczba identycznych sztuk.
Domyślnie11–10000stackablebooleanbooleanNieNa tej pozycji można stawiać inne pozycje.
Domyślnietruemax_stack_weightnumber · kgnumber · kgNieMaksymalna waga, która może spoczywać na jednej sztuce. 0 = bez limitu.
Domyślnie0rotationstringstringNieall= dowolna z sześciu orientacji;upright= obrót tylko wokół osi pionowej (tą stroną do góry);fixed= bez obracania.alluprightfixedDomyślnie"all"hazardousbooleanbooleanNieTowary niebezpieczne: umieszczane nisko i z dala od innych towarów niebezpiecznych.
DomyślniefalsepriorityintegerintegerNiePriorytet załadunku. Wyższy = ładowana wcześniej i zachowywana, gdy brakuje miejsca. 0 = brak.
Domyślnie0groupstringstringNieNazwa grupy, do której należy pozycja (zob.
groupsioptions.group_routing).colorstringstringNieKolor wyświetlania w formacie #rrggbb (tylko podgląd i PDF).
nesting_heightnumber · cmnumber · cmNieGłębokość, na jaką identyczne sztuki wsuwają się w siebie przy piętrowaniu (skrzynki, wiadra).
Domyślnie0groupsGroup[]Group[]NienamestringwymaganestringTakNazwa grupy, do której odwołuje się Item.group.
≤ 128 charsorderintegerintegerNieKolejność załadunku (niższa = ładowana wcześniej). Domyślnie miejsce na liście.
colorstringstringNieKolor wyświetlania w formacie #rrggbb.
planProjectPlan | nullProjectPlan | nullNieBieżący plan;
null, gdy projekt go nie ma.items_placedintegerintegerNieRozmieszczone sztuki.
items_unplacedintegerintegerNieSztuki, których nie udało się rozmieścić.
vehicles_usedintegerintegerNiePojazdy z co najmniej jedną pozycją.
total_weightnumber · kgnumber · kgNieZaładowana waga.
volume_utilizationnumbernumberNieŚrednie wykorzystanie objętości użytych pojazdów, 0–1.
job_idstringstringNieZadanie API, z którego pochodzi ten plan, dopóki nic go od tamtej pory nie zmieniło. Puste dla planu utworzonego lub edytowanego w aplikacji.
pdf_urlstringstringNieLink do PDF tego zadania (ważny do jego expires_at). W przeciwnym razie pusty.
401Unauthorized
unauthorizedkey_revokedkey_expiredunauthorizedBrak klucza API, nieprawidłowy format klucza lub nieznany klucz.key_revokedKlucz został unieważniony.key_expiredKlucz utracił ważność.
Wszystkie kody błędówNazwaTypWymaganyOpiserrorErrorBodywymaganeErrorBodyTakcodestringwymaganestringTakKod maszynowy (snake_case). Na nim opieraj logikę, nigdy na
message.messagestringwymaganestringTakWyjaśnienie po angielsku.
request_idstringwymaganestringTakTo samo co nagłówek X-Request-Id. Podaj je, kontaktując się z pomocą techniczną.
detailsErrorDetail[]ErrorDetail[]NieProblemy z poszczególnymi polami (
validation_failed).pathstringstringNieŚcieżka JSON błędnego pola, np. items[3].length.
codestringstringNierequired,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.messagestringstringNieWyjaśnienie po angielsku.
403Forbidden
ip_not_allowedsubscription_inactiveaccount_inactivescope_missingip_not_allowedAdresu IP, z którego przyszło wywołanie, nie ma na liście dozwolonych adresów klucza.subscription_inactiveOrganizacja nie ma aktywnej subskrypcji obejmującej API.account_inactiveOrganizacja jest zawieszona albo nie ma właściciela z aktywnym kontem.scope_missingKlucz nie ma zakresu wymaganego przez ten endpoint.
Wszystkie kody błędówNazwaTypWymaganyOpiserrorErrorBodywymaganeErrorBodyTakcodestringwymaganestringTakKod maszynowy (snake_case). Na nim opieraj logikę, nigdy na
message.messagestringwymaganestringTakWyjaśnienie po angielsku.
request_idstringwymaganestringTakTo samo co nagłówek X-Request-Id. Podaj je, kontaktując się z pomocą techniczną.
detailsErrorDetail[]ErrorDetail[]NieProblemy z poszczególnymi polami (
validation_failed).pathstringstringNieŚcieżka JSON błędnego pola, np. items[3].length.
codestringstringNierequired,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.messagestringstringNieWyjaśnienie po angielsku.
404Not found
project_not_foundproject_not_foundW Twojej organizacji nie ma projektu o tym ID.
Wszystkie kody błędówNazwaTypWymaganyOpiserrorErrorBodywymaganeErrorBodyTakcodestringwymaganestringTakKod maszynowy (snake_case). Na nim opieraj logikę, nigdy na
message.messagestringwymaganestringTakWyjaśnienie po angielsku.
request_idstringwymaganestringTakTo samo co nagłówek X-Request-Id. Podaj je, kontaktując się z pomocą techniczną.
detailsErrorDetail[]ErrorDetail[]NieProblemy z poszczególnymi polami (
validation_failed).pathstringstringNieŚcieżka JSON błędnego pola, np. items[3].length.
codestringstringNierequired,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.messagestringstringNieWyjaśnienie po angielsku.
429Too many requests
rate_limitedrate_limitedZa dużo zapytań w bieżącej minucie, godzinie lub dobie (na klucz lub na organizację) albo przekroczony limit nieudanych uwierzytelnień z Twojego adresu IP (60 na minutę).
Wszystkie kody błędówNazwaTypWymaganyOpiserrorErrorBodywymaganeErrorBodyTakcodestringwymaganestringTakKod maszynowy (snake_case). Na nim opieraj logikę, nigdy na
message.messagestringwymaganestringTakWyjaśnienie po angielsku.
request_idstringwymaganestringTakTo samo co nagłówek X-Request-Id. Podaj je, kontaktując się z pomocą techniczną.
detailsErrorDetail[]ErrorDetail[]NieProblemy z poszczególnymi polami (
validation_failed).pathstringstringNieŚcieżka JSON błędnego pola, np. items[3].length.
codestringstringNierequired,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.messagestringstringNieWyjaśnienie po angielsku.
500Internal server error
internal_errorinternal_errorWystąpił błąd po naszej stronie.
Wszystkie kody błędówNazwaTypWymaganyOpiserrorErrorBodywymaganeErrorBodyTakcodestringwymaganestringTakKod maszynowy (snake_case). Na nim opieraj logikę, nigdy na
message.messagestringwymaganestringTakWyjaśnienie po angielsku.
request_idstringwymaganestringTakTo samo co nagłówek X-Request-Id. Podaj je, kontaktując się z pomocą techniczną.
detailsErrorDetail[]ErrorDetail[]NieProblemy z poszczególnymi polami (
validation_failed).pathstringstringNieŚcieżka JSON błędnego pola, np. items[3].length.
codestringstringNierequired,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.messagestringstringNieWyjaśnienie po angielsku.
503Service unavailable
api_disabledapi_disabledAPI jest tymczasowo wyłączone (prace konserwacyjne) lub wyłączone dla organizacji.
Wszystkie kody błędówNazwaTypWymaganyOpiserrorErrorBodywymaganeErrorBodyTakcodestringwymaganestringTakKod maszynowy (snake_case). Na nim opieraj logikę, nigdy na
message.messagestringwymaganestringTakWyjaśnienie po angielsku.
request_idstringwymaganestringTakTo samo co nagłówek X-Request-Id. Podaj je, kontaktując się z pomocą techniczną.
detailsErrorDetail[]ErrorDetail[]NieProblemy z poszczególnymi polami (
validation_failed).pathstringstringNieŚcieżka JSON błędnego pola, np. items[3].length.
codestringstringNierequired,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.messagestringstringNieWyjaśnienie po angielsku.