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

Estimer une tâche de chargement

Effectue la même validation que POST /v1/pack et renvoie la fourchette de prix, sans créer de tâche ni réserver de crédits.

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

Gratuit. Une requête invalide répond 200 avec valid: false et tous les problèmes dans errors[].

Authentification

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

Paramètres du corps

application/json
NomTypeObligatoireDescription
referencestring
string
Non

Votre propre référence (numéro de commande, ID d'expédition…). Renvoyée telle quelle dans la tâche.

≤ 128 chars
vehiclesVehicle[]obligatoire
Vehicle[]
Oui

Définitions de véhicules. Chacune peut avoir quantity > 1. Au moins une.

itemsItem[]obligatoire
Item[]
Oui

Définitions d'articles. Chacune peut avoir quantity > 1. Au moins une.

groupsGroup[]
Group[]
Non

Groupes facultatifs (clients, arrêts, commandes). Obligatoires pour chaque groupe cité par un article lorsque options.group_routing ne vaut pas "none" ; sinon, les groupes sont créés à partir des noms de groupe des articles, dans leur ordre d'apparition.

optionsOptions
Options
Non

Options de chargement. Tous les champs sont facultatifs.

Exemple de requête

curl -X POST "https://runner.cargoduo.com/v1/estimate" \
  -H "Authorization: Bearer $CARGODUO_API_KEY" \
  -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"
    }
  }'

Exemple de réponse

200 OK · Estimate
{
  "valid": true,
  "errors": [],
  "warnings": [],
  "items": 58,
  "max_vehicles": 3,
  "estimated_cost": {
    "min_credits": 0.26,
    "max_credits": 1.11
  },
  "estimated_seconds": 90,
  "balance": {
    "available_credits": 147.75
  }
}

Réponses

  • 200OKRésultat de la validation et fourchette de prix.
    NomTypeObligatoireDescription
    validboolean
    boolean
    Non

    La requête serait acceptée par POST /v1/pack.

    errorsErrorDetail[]
    ErrorDetail[]
    Non

    Erreurs de validation (vide si la requête est valide).

    warningsWarning[]
    Warning[]
    Non

    Remarques non bloquantes.

    itemsinteger
    integer
    Non

    Nombre total d'unités d'articles.

    max_vehiclesinteger
    integer
    Non

    Nombre maximal de véhicules que la tâche peut charger.

    estimated_costCostRange
    CostRange
    Non

    Fourchette de prix en crédits.

    estimated_secondsnumber · s
    number · s
    Non

    Budget de calcul dont disposerait la tâche (une borne supérieure ; la plupart se terminent plus tôt).

    balanceEstimateBalance
    EstimateBalance
    Non

    Vos crédits disponibles.

  • 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
  • 403Forbiddenip_not_allowedsubscription_inactiveaccount_inactivescope_missing
    • 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
  • 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