Get a job
A job's status, progress, summary and cost.
Poll it every 1–2 s until status is succeeded, failed or canceled.
المصادقة
معاملات المسار
idstringمطلوبJob id (job_…).
معاملات الاستعلام
includestringresult inlines the load plan once the job succeeded.
resultمثال على الطلب
curl -X GET "https://runner.cargoduo.com/v1/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f" \
-H "Authorization: Bearer $CARGODUO_API_KEY"const res = await fetch("https://runner.cargoduo.com/v1/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f", {
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/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f",
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/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f", 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/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f"))
.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/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f");
var response = await client.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");<?php
$ch = curl_init('https://runner.cargoduo.com/v1/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f');
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/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f")
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": "job_4bK9mT2xQe7LpW1zRc8VdN3f",
"object": "job",
"status": "succeeded",
"reference": "order-1042",
"source": "api",
"created_at": "2026-10-19T09:12:03Z",
"started_at": "2026-10-19T09:12:03Z",
"finished_at": "2026-10-19T09:12:07Z",
"progress": {
"stage": "done",
"vehicles_done": 1,
"placed_items": 58
},
"summary": {
"items_requested": 58,
"items_placed": 58,
"items_unplaced": 0,
"vehicles_used": 1,
"total_weight": 8580,
"volume_utilization": 0.3116,
"queue_ms": 12,
"compute_ms": 4210
},
"cost": {
"credits": 0.28105,
"reserved_credits": 1.11,
"rate_card_version": 1,
"breakdown": {
"base": 0.06,
"vehicles": 0.2,
"compute": 0.02105,
"large_load": 0
}
},
"error": null,
"warnings": [],
"result_url": "https://runner.cargoduo.com/v1/jobs/job_4bK9mT2xQe7LpW1zRc8VdN3f/result",
"pdf_url": "https://app.cargoduo.com/r/Xq7Lm2Vt9KbR4cN8wZp1Hs6Yd3Fg5Jk0Ta2Ue7Wn4Ci",
"expires_at": "2026-11-02T09:12:03Z"
}الاستجابات
200OKThe job.
الاسمالنوعمطلوبالوصفidstringمطلوبstringنعمJob id (job_…).
objectstringمطلوبstringنعمAlways
job.jobstatusstringمطلوبstringنعمqueued→running→succeeded|failed|canceled.queuedrunningsucceededfailedcanceledreferencestringstringلاYour reference from the request.
sourcestringstringلاWhere the job was created.
apiplaygroundproject_idstringstringلاThe project (prj_…) a POST /v1/projects/{id}/pack job saves its plan into. Absent on other jobs.
created_atstringمطلوبstringنعمRFC 3339 timestamp.
started_atstring | nullstring | nullلاWhen computing started (RFC 3339) or
null.finished_atstring | nullstring | nullلاWhen the job ended (RFC 3339) or
null.progressJobProgressJobProgressلاLive progress while queued/running.
stagestringstringلاCurrent stage, such as
queued,running,finalizingordone. Informational: branch onJob.status.vehicles_doneintegerintegerلاVehicles packed so far.
placed_itemsintegerintegerلاItem units placed so far.
summaryJobSummaryJobSummaryلاCounts and timings.
items_requestedintegerintegerلاTotal item units (sum of quantities).
items_placedintegerintegerلاUnits placed.
items_unplacedintegerintegerلاUnits that could not be placed.
vehicles_usedintegerintegerلاVehicles that carry at least one item.
total_weightnumber · kgnumber · kgلاWeight loaded.
volume_utilizationnumbernumberلاAverage volume utilization of the used vehicles, 0–1.
queue_msintegerintegerلاTime spent waiting for a compute slot (not billed).
compute_msintegerintegerلاCompute time (billed).
costJobCostJobCostلاCredits charged (final once the job ended) and the reservation held while it ran.
creditsnumber · creditsnumber · creditsلاCredits charged (0 until the job ends). Failed jobs are not charged, except time_limit_exceeded, which is charged like a canceled job.
reserved_creditsnumber · creditsnumber · creditsلاCredits held while the job was queued/running (the worst-case price). Released when it ends.
rate_card_versionintegerintegerلاRate card the job is priced with.
breakdownCostBreakdownCostBreakdownلاItemized price.
basenumber · creditsnumber · creditsلاPer-job fee.
vehiclesnumber · creditsnumber · creditsلاPer loaded vehicle (not charged for canceled or time_limit_exceeded jobs).
computenumber · creditsnumber · creditsلاPer compute-second, pro-rated per millisecond.
large_loadnumber · creditsnumber · creditsلاSurcharge per started 100 items above the large-load threshold.
errorJobError | nullJobError | nullلاWhy the job failed or was canceled;
nullotherwise.codestringstringلاMachine code (see Errors).
messagestringstringلاEnglish explanation.
warningsWarning[]Warning[]لاNon-blocking remarks about the request (also repeated in the result).
codestringstringلاMachine code.
messagestringstringلاEnglish explanation.
result_urlstringstringلاGET this URL for the full result once
statusissucceeded.pdf_urlstringstringلاA browser link that renders the load plan as a PDF (3D views + loading steps). Valid until expires_at. Empty after expiry.
expires_atstringstringلاWhen the request/result bodies and the PDF link are deleted (RFC 3339). Job metadata and charges are kept.
resultResultResultلاThe full result, inlined only when requested (?include=result) or when POST /v1/pack?wait= finished in time.
job_idstringstringلاThe job.
vehiclesResultVehicle[]ResultVehicle[]لاLoaded vehicles in loading order (empty vehicles are left out).
indexintegerintegerلا0-based position in the plan.
vehicle_idstringstringلاYour vehicle definition id (for a project job: the slot id, pv_…).
copyintegerintegerلا1-based copy number of that definition (quantity > 1, or added in auto mode).
auto_addedbooleanbooleanلاAdded by
packing_modeautobeyond thequantityyou listed.namestringstringلاVehicle name.
typestringstringلاVehicle type.
lengthnumber · cmnumber · cmلاCargo-space length.
widthnumber · cmnumber · cmلاCargo-space width.
heightnumber · cmnumber · cmلاCargo-space height.
max_weightnumber · kgnumber · kgلاPayload limit.
items_placedintegerintegerلاUnits in this vehicle.
total_weightnumber · kgnumber · kgلاWeight in this vehicle.
volume_utilizationnumbernumberلاUsed volume / cargo-space volume, 0–1.
weight_utilizationnumbernumberلاtotal_weight / max_weight, 0–1 (may exceed 1 with allow_overweight).
center_of_gravityPointPointلاCentre of gravity of the load (cm).
xnumber · cmnumber · cmلاynumber · cmnumber · cmلاznumber · cmnumber · cmلاplacementsPlacement[]Placement[]لاEvery unit in this vehicle.
item_idstringstringلاYour item definition id (for a project job: the item id, item_…).
instanceintegerintegerلا1-based unit number within that item definition (unique across the whole plan).
labelstringstringلاItem label.
xnumber · cmnumber · cmلاMin-corner position along the length.
ynumber · cmnumber · cmلاMin-corner height above the floor.
znumber · cmnumber · cmلاMin-corner position across the width.
lengthnumber · cmnumber · cmلاSize along x as placed.
widthnumber · cmnumber · cmلاSize along z as placed.
heightnumber · cmnumber · cmلاSize along y as placed.
rotatedbooleanbooleanلاPlaced in a different orientation than defined.
orientationstringstringلاWhich defined side lies along x, z and y:
lwh= as defined,wlh= turned 90° around the vertical axis,lhw,hwl,whl,hlw= tipped onto a side.stepintegerintegerلا1-based loading step within the vehicle (load in ascending order).
weightnumber · kgnumber · kgلاUnit weight.
axle_loadsيتطلب صلاحية وصولAxleLoad[]AxleLoad[]لاLoad per axle (vehicles with axle data only).
namestringstringلاAxle 1,Axle 2… in the order ofaxle_positions.positionnumber · cmnumber · cmلاAxle position from the front of the cargo area.
loadnumber · kgnumber · kgلاCargo load on the axle.
maxnumber · kgnumber · kgلاConfigured maximum (0 = none).
okbooleanbooleanلاload≤max(alwaystruewithout a maximum).unplacedUnplacedItem[]UnplacedItem[]لاUnits that could not be placed, with the reason.
item_idstringstringلاYour item definition id.
instanceintegerintegerلا1-based unit number.
labelstringstringلاItem label.
reasonstringstringلاWhy it could not be placed.
warningsWarning[]Warning[]لاRemarks about the plan.
codestringstringلاMachine code.
messagestringstringلاEnglish explanation.
pdf_urlstringstringلاBrowser link that renders the plan as a PDF.
expires_atstringstringلاWhen this result is deleted (RFC 3339).
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
job_not_foundjob_not_foundNo job 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.