Lister les tâches
Les tâches de votre organisation, des plus récentes aux plus anciennes, page par page.
Authentification
Paramètres de requête
limitintegerTaille de page.
201–100cursorstringnext_cursor de la page précédente.
statusstringUniquement les tâches ayant ce statut.
queuedrunningsucceededfailedcanceledExemple de requête
curl -X GET "https://runner.cargoduo.com/v1/jobs?limit=2&status=succeeded" \
-H "Authorization: Bearer $CARGODUO_API_KEY"const res = await fetch("https://runner.cargoduo.com/v1/jobs?limit=2&status=succeeded", {
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",
headers={"Authorization": f"Bearer {os.environ['CARGODUO_API_KEY']}"},
params={
"limit": 2,
"status": "succeeded",
},
)
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?limit=2&status=succeeded", 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?limit=2&status=succeeded"))
.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?limit=2&status=succeeded");
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?limit=2&status=succeeded');
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?limit=2&status=succeeded")
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.bodyExemple de réponse
{
"data": [
{
"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"
},
{
"id": "job_7hN2wQ5rTb9xKc3LmP8sVa1d",
"object": "job",
"status": "succeeded",
"reference": "order-1039",
"source": "api",
"created_at": "2026-10-18T07:12:03Z",
"started_at": "2026-10-18T07:12:03Z",
"finished_at": "2026-10-18T07:12:05Z",
"progress": {
"stage": "done",
"vehicles_done": 1,
"placed_items": 24
},
"summary": {
"items_requested": 24,
"items_placed": 24,
"items_unplaced": 0,
"vehicles_used": 1,
"total_weight": 6240,
"volume_utilization": 0.2213,
"queue_ms": 9,
"compute_ms": 2870
},
"cost": {
"credits": 0.27435,
"reserved_credits": 1.11,
"rate_card_version": 1,
"breakdown": {
"base": 0.06,
"vehicles": 0.2,
"compute": 0.01435,
"large_load": 0
}
},
"error": null,
"warnings": [],
"result_url": "https://runner.cargoduo.com/v1/jobs/job_7hN2wQ5rTb9xKc3LmP8sVa1d/result",
"pdf_url": "https://app.cargoduo.com/r/Xq7Lm2Vt9KbR4cN8wZp1Hs6Yd3Fg5Jk0Ta2Ue7Wn4Ci",
"expires_at": "2026-11-01T07:12:03Z"
}
],
"next_cursor": "job_7hN2wQ5rTb9xKc3LmP8sVa1d"
}Réponses
200OKUne page de tâches.
NomTypeObligatoireDescriptiondataJob[]Job[]NonidstringobligatoirestringOuiID de la tâche (job_…).
objectstringobligatoirestringOuiToujours
job.jobstatusstringobligatoirestringOuiqueued→running→succeeded|failed|canceled.queuedrunningsucceededfailedcanceledreferencestringstringNonVotre référence, reprise de la requête.
sourcestringstringNonOrigine de la tâche.
apiplaygroundproject_idstringstringNonLe projet (prj_…) dans lequel une tâche POST /v1/projects/{id}/pack enregistre son plan. Absent pour les autres tâches.
created_atstringobligatoirestringOuiHorodatage RFC 3339.
started_atstring | nullstring | nullNonDate de début du calcul (RFC 3339) ou
null.finished_atstring | nullstring | nullNonDate de fin de la tâche (RFC 3339) ou
null.progressJobProgressJobProgressNonProgression en direct pendant l'attente ou l'exécution.
stagestringstringNonÉtape en cours, par exemple
queued,running,finalizingoudone. Informative uniquement : basez votre logique surJob.status.vehicles_doneintegerintegerNonVéhicules chargés jusqu'ici.
placed_itemsintegerintegerNonUnités d'articles placées jusqu'ici.
summaryJobSummaryJobSummaryNonCompteurs et durées.
items_requestedintegerintegerNonNombre total d'unités d'articles (somme des quantités).
items_placedintegerintegerNonUnités placées.
items_unplacedintegerintegerNonUnités qui n'ont pas pu être placées.
vehicles_usedintegerintegerNonVéhicules transportant au moins un article.
total_weightnumber · kgnumber · kgNonPoids chargé.
volume_utilizationnumbernumberNonTaux de remplissage moyen (en volume) des véhicules utilisés, 0–1.
queue_msintegerintegerNonTemps d'attente d'un créneau de calcul (non facturé).
compute_msintegerintegerNonTemps de calcul (facturé).
costJobCostJobCostNonCrédits débités (définitifs une fois la tâche terminée) et réservation bloquée pendant son exécution.
creditsnumber · creditsnumber · creditsNonCrédits débités (0 jusqu'à la fin de la tâche). Les tâches en échec ne sont pas facturées, sauf time_limit_exceeded, facturée comme une tâche annulée.
reserved_creditsnumber · creditsnumber · creditsNonCrédits bloqués pendant que la tâche était en file d'attente ou en cours (le prix maximal possible). Libérés à la fin.
rate_card_versionintegerintegerNonGrille tarifaire appliquée à la tâche.
breakdownCostBreakdownCostBreakdownNonDétail du prix.
basenumber · creditsnumber · creditsNonFrais de tâche.
vehiclesnumber · creditsnumber · creditsNonPar véhicule chargé (non facturé pour les tâches annulées ou en time_limit_exceeded).
computenumber · creditsnumber · creditsNonPar seconde de calcul, au prorata à la milliseconde près.
large_loadnumber · creditsnumber · creditsNonSupplément par tranche de 100 articles entamée au-delà du seuil de gros chargement.
errorJobError | nullJobError | nullNonRaison de l'échec ou de l'annulation de la tâche ;
nullsinon.codestringstringNonCode lisible par machine (voir Erreurs).
messagestringstringNonExplication en anglais.
warningsWarning[]Warning[]NonRemarques non bloquantes sur la requête (également reprises dans le résultat).
codestringstringNonCode lisible par machine.
messagestringstringNonExplication en anglais.
result_urlstringstringNonAppelez cette URL en GET pour obtenir le résultat complet une fois que
statusvautsucceeded.pdf_urlstringstringNonLien à ouvrir dans un navigateur, qui génère le plan de chargement en PDF (vues 3D + étapes de chargement). Valide jusqu'à expires_at. Vide après expiration.
expires_atstringstringNonDate de suppression des corps de requête et de résultat et du lien PDF (RFC 3339). Les métadonnées et la facturation de la tâche sont conservées.
resultResultResultNonLe résultat complet, inclus uniquement sur demande (?include=result) ou lorsque POST /v1/pack?wait= s'est terminé à temps.
job_idstringstringNonLa tâche.
vehiclesResultVehicle[]ResultVehicle[]NonVéhicules chargés, dans l'ordre de chargement (les véhicules vides sont omis).
indexintegerintegerNonPosition dans le plan, à partir de 0.
vehicle_idstringstringNonL'ID de votre définition de véhicule (pour une tâche de projet : l'ID du véhicule du projet, pv_…).
copyintegerintegerNonNuméro d'exemplaire de cette définition, à partir de 1 (quantity > 1, ou ajouté en mode auto).
auto_addedbooleanbooleanNonAjouté par
packing_modeautoau-delà de laquantityindiquée.namestringstringNonNom du véhicule.
typestringstringNonType de véhicule.
lengthnumber · cmnumber · cmNonLongueur de l'espace de chargement.
widthnumber · cmnumber · cmNonLargeur de l'espace de chargement.
heightnumber · cmnumber · cmNonHauteur de l'espace de chargement.
max_weightnumber · kgnumber · kgNonLimite de charge utile.
items_placedintegerintegerNonUnités dans ce véhicule.
total_weightnumber · kgnumber · kgNonPoids dans ce véhicule.
volume_utilizationnumbernumberNonVolume utilisé / volume de l'espace de chargement, 0–1.
weight_utilizationnumbernumberNontotal_weight / max_weight, 0–1 (peut dépasser 1 avec allow_overweight).
center_of_gravityPointPointNonCentre de gravité du chargement (cm).
xnumber · cmnumber · cmNonynumber · cmnumber · cmNonznumber · cmnumber · cmNonplacementsPlacement[]Placement[]NonToutes les unités de ce véhicule.
item_idstringstringNonL'ID de votre définition d'article (pour une tâche de projet : l'ID de l'article, item_…).
instanceintegerintegerNonNuméro d'unité, à partir de 1, au sein de cette définition d'article (unique dans tout le plan).
labelstringstringNonLibellé de l'article.
xnumber · cmnumber · cmNonPosition du coin minimal sur la longueur.
ynumber · cmnumber · cmNonHauteur du coin minimal au-dessus du plancher.
znumber · cmnumber · cmNonPosition du coin minimal sur la largeur.
lengthnumber · cmnumber · cmNonDimension selon x, telle que placée.
widthnumber · cmnumber · cmNonDimension selon z, telle que placée.
heightnumber · cmnumber · cmNonDimension selon y, telle que placée.
rotatedbooleanbooleanNonPlacé dans une orientation différente de celle définie.
orientationstringstringNonQuel côté défini est orienté selon x, z et y :
lwh= tel que défini,wlh= tourné de 90° autour de l'axe vertical,lhw,hwl,whl,hlw= basculé sur un côté.stepintegerintegerNonÉtape de chargement dans le véhicule, à partir de 1 (chargez dans l'ordre croissant).
weightnumber · kgnumber · kgNonPoids unitaire.
axle_loadsAccès requisAxleLoad[]AxleLoad[]NonCharge par essieu (véhicules avec données d'essieux uniquement).
namestringstringNonAxle 1,Axle 2… dans l'ordre du champaxle_positions.positionnumber · cmnumber · cmNonPosition de l'essieu depuis l'avant de l'espace de chargement.
loadnumber · kgnumber · kgNonCharge de la marchandise sur l'essieu.
maxnumber · kgnumber · kgNonMaximum configuré (0 = aucun).
okbooleanbooleanNonload≤max(toujourstrueen l'absence de maximum).unplacedUnplacedItem[]UnplacedItem[]NonUnités qui n'ont pas pu être placées, avec la raison.
item_idstringstringNonL'ID de votre définition d'article.
instanceintegerintegerNonNuméro d'unité, à partir de 1.
labelstringstringNonLibellé de l'article.
reasonstringstringNonRaison pour laquelle l'unité n'a pas pu être placée.
warningsWarning[]Warning[]NonRemarques sur le plan.
codestringstringNonCode lisible par machine.
messagestringstringNonExplication en anglais.
pdf_urlstringstringNonLien à ouvrir dans un navigateur, qui génère le plan en PDF.
expires_atstringstringNonDate de suppression de ce résultat (RFC 3339).
next_cursorstringstringNonÀ passer dans ?cursor= pour obtenir la page suivante ; vide sur la dernière page.
401Unauthorized
unauthorizedkey_revokedkey_expiredunauthorizedClé API absente, mal formée ou inconnue.key_revokedLa clé a été révoquée.key_expiredLa clé a dépassé sa date d'expiration.
Tous les codes d'erreurNomTypeObligatoireDescriptionerrorErrorBodyobligatoireErrorBodyOuicodestringobligatoirestringOuiCode lisible par machine (snake_case). Basez votre logique sur ce champ, jamais sur
message.messagestringobligatoirestringOuiExplication en anglais.
request_idstringobligatoirestringOuiIdentique à l'en-tête X-Request-Id. Indiquez-le lorsque vous contactez le support.
detailsErrorDetail[]ErrorDetail[]NonProblèmes par champ (
validation_failed).pathstringstringNonChemin JSON du champ en cause, par ex. items[3].length.
codestringstringNonrequired,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.messagestringstringNonExplication en anglais.
403Forbidden
ip_not_allowedsubscription_inactiveaccount_inactivescope_missingip_not_allowedL'adresse IP appelante ne figure pas dans la liste des adresses IP autorisées de la clé.subscription_inactiveL'organisation n'a aucun abonnement actif incluant l'API.account_inactiveL'organisation est suspendue ou n'a aucun propriétaire dont le compte est actif.scope_missingIl manque à la clé une autorisation requise par cet endpoint.
Tous les codes d'erreurNomTypeObligatoireDescriptionerrorErrorBodyobligatoireErrorBodyOuicodestringobligatoirestringOuiCode lisible par machine (snake_case). Basez votre logique sur ce champ, jamais sur
message.messagestringobligatoirestringOuiExplication en anglais.
request_idstringobligatoirestringOuiIdentique à l'en-tête X-Request-Id. Indiquez-le lorsque vous contactez le support.
detailsErrorDetail[]ErrorDetail[]NonProblèmes par champ (
validation_failed).pathstringstringNonChemin JSON du champ en cause, par ex. items[3].length.
codestringstringNonrequired,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.messagestringstringNonExplication en anglais.
422Unprocessable entity
validation_failedvalidation_failedLa requête est un JSON bien formé, mais décrit une tâche invalide. details[] liste tous les problèmes.
Tous les codes d'erreurNomTypeObligatoireDescriptionerrorErrorBodyobligatoireErrorBodyOuicodestringobligatoirestringOuiCode lisible par machine (snake_case). Basez votre logique sur ce champ, jamais sur
message.messagestringobligatoirestringOuiExplication en anglais.
request_idstringobligatoirestringOuiIdentique à l'en-tête X-Request-Id. Indiquez-le lorsque vous contactez le support.
detailsErrorDetail[]ErrorDetail[]NonProblèmes par champ (
validation_failed).pathstringstringNonChemin JSON du champ en cause, par ex. items[3].length.
codestringstringNonrequired,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.messagestringstringNonExplication en anglais.
429Too many requests
rate_limitedrate_limitedTrop de requêtes dans la minute, l'heure ou la journée en cours (par clé ou par organisation), ou plus de 60 échecs d'authentification par minute depuis votre adresse IP.
Tous les codes d'erreurNomTypeObligatoireDescriptionerrorErrorBodyobligatoireErrorBodyOuicodestringobligatoirestringOuiCode lisible par machine (snake_case). Basez votre logique sur ce champ, jamais sur
message.messagestringobligatoirestringOuiExplication en anglais.
request_idstringobligatoirestringOuiIdentique à l'en-tête X-Request-Id. Indiquez-le lorsque vous contactez le support.
detailsErrorDetail[]ErrorDetail[]NonProblèmes par champ (
validation_failed).pathstringstringNonChemin JSON du champ en cause, par ex. items[3].length.
codestringstringNonrequired,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.messagestringstringNonExplication en anglais.
500Internal server error
internal_errorinternal_errorUne erreur s'est produite de notre côté.
Tous les codes d'erreurNomTypeObligatoireDescriptionerrorErrorBodyobligatoireErrorBodyOuicodestringobligatoirestringOuiCode lisible par machine (snake_case). Basez votre logique sur ce champ, jamais sur
message.messagestringobligatoirestringOuiExplication en anglais.
request_idstringobligatoirestringOuiIdentique à l'en-tête X-Request-Id. Indiquez-le lorsque vous contactez le support.
detailsErrorDetail[]ErrorDetail[]NonProblèmes par champ (
validation_failed).pathstringstringNonChemin JSON du champ en cause, par ex. items[3].length.
codestringstringNonrequired,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.messagestringstringNonExplication en anglais.
503Service unavailable
api_disabledapi_disabledL'API est temporairement désactivée (maintenance) ou désactivée pour l'organisation.
Tous les codes d'erreurNomTypeObligatoireDescriptionerrorErrorBodyobligatoireErrorBodyOuicodestringobligatoirestringOuiCode lisible par machine (snake_case). Basez votre logique sur ce champ, jamais sur
message.messagestringobligatoirestringOuiExplication en anglais.
request_idstringobligatoirestringOuiIdentique à l'en-tête X-Request-Id. Indiquez-le lorsque vous contactez le support.
detailsErrorDetail[]ErrorDetail[]NonProblèmes par champ (
validation_failed).pathstringstringNonChemin JSON du champ en cause, par ex. items[3].length.
codestringstringNonrequired,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.messagestringstringNonExplication en anglais.