Aller au contenu
Documentation développeursRéférence de l'APIProjets

Créer un projet

Crée un projet qui s'ouvre dans l'application : un nom et, en option, des véhicules (véhicules enregistrés, par vehicle_id), des articles et des groupes au format de /v1/pack, ainsi que les options enregistrées.

POSThttps://runner.cargoduo.com/v1/projects

Calculez son chargement avec POST /v1/projects/{id}/pack. Gratuit : aucun crédit n'est débité.

Authentification

Clé API Bearer avec l'autorisationresources:writeEn savoir plus

Paramètres du corps

application/json
NomTypeObligatoireDescription
namestringobligatoire
string
Oui
≤ 255 chars
vehiclesProjectVehicle[]
ProjectVehicle[]
Non

Véhicules du projet.

itemsItem[]
Item[]
Non

Articles (500 définitions au maximum).

groupsGroup[]
Group[]
Non

Groupes, avec leur ordre de chargement.

optionsProjectOptions
ProjectOptions
Non

Les options de chargement enregistrées dans un projet.

Exemple de requête

curl -X POST "https://runner.cargoduo.com/v1/projects" \
  -H "Authorization: Bearer $CARGODUO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Order 1042",
    "vehicles": [
      {
        "vehicle_id": "standard-trailer-13-6m"
      }
    ],
    "items": [
      {
        "template_id": "tpl_42",
        "quantity": 18
      },
      {
        "template_id": "tpl_43",
        "quantity": 40
      }
    ]
  }'

Exemple de réponse

201 · Project
{
  "id": "prj_3051",
  "object": "project",
  "name": "Order 1042",
  "status": "draft",
  "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:10:03Z",
  "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": null
}

Réponses

  • 201Le nouveau projet.
    NomTypeObligatoireDescription
    idstring
    string
    Non

    ID du projet (prj_…).

    objectstring
    string
    Non
    project
    namestring
    string
    Non
    statusstring
    string
    Non

    draft = jamais calculé ou données remplacées ; calculated = possède un plan actuel ; stale = un paramètre a changé depuis la création du plan.

    draftcalculatedstaleerror
    item_countinteger
    integer
    Non

    Unités d'articles (somme des quantités).

    vehicle_countinteger
    integer
    Non

    Véhicules (somme des quantités).

    app_urlstring
    string
    Non

    Ouvre le projet dans l'éditeur 3D de l'application.

    created_byUserRef | null
    UserRef | null
    Non

    Le membre qui l'a créé (pour les appels API : le membre qui a créé la clé). null si inconnu.

    updated_byUserRef | null
    UserRef | null
    Non

    Le dernier membre à l'avoir modifié.

    created_atstring
    string
    Non

    RFC 3339.

    updated_atstring
    string
    Non

    RFC 3339.

    optionsProjectOptions
    ProjectOptions
    Non

    Les options de chargement enregistrées dans un projet.

    vehiclesProjectVehicle[]
    ProjectVehicle[]
    Non
    itemsItem[]
    Item[]
    Non

    Fret au format Item de /v1/pack ; les ID sont de la forme item_….

    groupsGroup[]
    Group[]
    Non
    planProjectPlan | null
    ProjectPlan | null
    Non

    Le plan actuel ; null si le projet n'en a pas.

  • 400Bad requestinvalid_json
    • invalid_jsonLe corps n'est pas un JSON valide ou un champ a un type incorrect.
    NomTypeObligatoireDescription
    errorErrorBodyobligatoire
    ErrorBody
    Oui
    Tous les codes d'erreur
  • 401Unauthorizedunauthorizedkey_revokedkey_expired
    • unauthorizedClé 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.
    NomTypeObligatoireDescription
    errorErrorBodyobligatoire
    ErrorBody
    Oui
    Tous les codes d'erreur
  • 403Forbiddenplan_limit_reachedip_not_allowedsubscription_inactiveaccount_inactivescope_missing
    • plan_limit_reachedLe forfait de l'organisation n'autorise pas davantage de projets ou d'articles.
    • ip_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.
    NomTypeObligatoireDescription
    errorErrorBodyobligatoire
    ErrorBody
    Oui
    Tous les codes d'erreur
  • 413Payload too largepayload_too_large
    • payload_too_largeLe corps de la requête dépasse 10 MB.
    NomTypeObligatoireDescription
    errorErrorBodyobligatoire
    ErrorBody
    Oui
    Tous les codes d'erreur
  • 422Unprocessable entityvalidation_failed
    • validation_failedLa requête est un JSON bien formé, mais décrit une tâche invalide. details[] liste tous les problèmes.
    NomTypeObligatoireDescription
    errorErrorBodyobligatoire
    ErrorBody
    Oui
    Tous les codes d'erreur
  • 429Too many requestsrate_limited
    • rate_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.
    NomTypeObligatoireDescription
    errorErrorBodyobligatoire
    ErrorBody
    Oui
    Tous les codes d'erreur
  • 500Internal server errorinternal_error
    • internal_errorUne erreur s'est produite de notre côté.
    NomTypeObligatoireDescription
    errorErrorBodyobligatoire
    ErrorBody
    Oui
    Tous les codes d'erreur
  • 503Service unavailableapi_disabled
    • api_disabledL'API est temporairement désactivée (maintenance) ou désactivée pour l'organisation.
    NomTypeObligatoireDescription
    errorErrorBodyobligatoire
    ErrorBody
    Oui
    Tous les codes d'erreur