Documentation développeursPremiers pas
Démarrage rapide
Créez une clé, envoyez une requête, lisez le plan.
Créer une clé API
Dans la console développeur, ouvrez Clés API et créez une clé. Le secret ne s'affiche qu'une seule fois.
export CARGODUO_API_KEY="cd_live_..."Créer une tâche
Avec ?wait=60, la réponse contient la tâche terminée si elle se termine en moins de 60 s.
curl -X POST "https://runner.cargoduo.com/v1/pack?wait=60" \
-H "Authorization: Bearer $CARGODUO_API_KEY" \
-H "Idempotency-Key: order-1042-v1" \
-H "Content-Type: application/json" \
-d '{
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright"
}
],
"options": {
"packing_mode": "auto"
}
}'const res = await fetch("https://runner.cargoduo.com/v1/pack?wait=60", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CARGODUO_API_KEY}`,
"Idempotency-Key": "order-1042-v1",
"Content-Type": "application/json",
},
body: JSON.stringify({
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000
}
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": false
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright"
}
],
"options": {
"packing_mode": "auto"
}
}),
});
const data = await res.json();
console.log(res.status, data);import os
import requests
response = requests.post(
"https://runner.cargoduo.com/v1/pack",
headers={"Authorization": f"Bearer {os.environ['CARGODUO_API_KEY']}", "Idempotency-Key": "order-1042-v1"},
params={
"wait": 60,
},
json={
"reference": "order-1042",
"vehicles": [
{
"id": "trailer",
"type": "trailer",
"name": "13.6 m trailer",
"length": 1360,
"width": 245,
"height": 270,
"max_weight": 24000,
},
],
"items": [
{
"id": "pallet-eu",
"label": "Euro pallet",
"length": 120,
"width": 80,
"height": 140,
"weight": 450,
"quantity": 18,
"stackable": False,
},
{
"id": "carton-a",
"label": "Carton A",
"length": 60,
"width": 40,
"height": 40,
"weight": 12,
"quantity": 40,
"rotation": "upright",
},
],
"options": {
"packing_mode": "auto",
},
},
)
print(response.status_code, response.json())Terminée à temps : 200, status: "succeeded" et le plan dans result. Toujours en cours : 202, passez à l'étape 3.
Interroger la tâche jusqu'à ce qu'elle se termine
curl "https://runner.cargoduo.com/v1/jobs/$JOB_ID?include=result" \
-H "Authorization: Bearer $CARGODUO_API_KEY"async function waitForJob(job) {
while (job.status === "queued" || job.status === "running") {
await new Promise((r) => setTimeout(r, 2000));
const res = await fetch(`https://runner.cargoduo.com/v1/jobs/${job.id}?include=result`, {
headers: { Authorization: `Bearer ${process.env.CARGODUO_API_KEY}` },
});
job = await res.json();
}
return job;
}import os, time, requests
def wait_for_job(job):
headers = {"Authorization": f"Bearer {os.environ['CARGODUO_API_KEY']}"}
while job["status"] in ("queued", "running"):
time.sleep(2)
job = requests.get(f"https://runner.cargoduo.com/v1/jobs/{job['id']}", params={"include": "result"}, headers=headers).json()
return jobLire le plan
| Champ | Contenu |
|---|---|
result.vehicles[].placements[] | Position, dimensions, orientation et step de chargement de chaque article |
result.unplaced[] | Articles qui n'ont pas pu être chargés, avec un reason |
cost.credits | Le montant facturé pour la tâche |
pdf_url | Un lien qui génère le PDF du plan de chargement |
POST /v1/estimate valide le même corps et en calcule le prix gratuitement.
Voir aussi
Créer une tâche de chargementValide la requête, réserve sur vos crédits le prix maximal possible et met une tâche en file d'attente.Résultats et coordonnéesOù se trouve chaque article, dans quelle orientation et dans quel ordre de chargement.IdempotenceRéessayez POST /v1/pack sans créer une deuxième tâche.