Zum Inhalt springen
EntwicklerdokumentationAPI-ReferenzLadeplanung

Job-Kosten schätzen

Führt dieselbe Validierung wie POST /v1/pack aus und gibt die Preisspanne zurück, ohne einen Job anzulegen oder Credits zu reservieren.

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

Kostenlos. Eine ungültige Anfrage liefert 200 mit valid: false und allen Problemen in errors[].

Authentifizierung

Bearer-API-Schlüssel mit Berechtigungpack:writeMehr erfahren

Body-Parameter

application/json
NameTypErforderlichBeschreibung
referencestring
string
Nein

Ihre eigene Referenz (Bestellnummer, Sendungs-ID …). Wird am Job zurückgegeben.

≤ 128 chars
vehiclesVehicle[]erforderlich
Vehicle[]
Ja

Fahrzeugdefinitionen. Jede darf quantity > 1 haben. Mindestens eine.

itemsItem[]erforderlich
Item[]
Ja

Artikeldefinitionen. Jede darf quantity > 1 haben. Mindestens eine.

groupsGroup[]
Group[]
Nein

Optionale Gruppen (Kunden, Stopps, Aufträge). Erforderlich für jede Gruppe, die ein Artikel nennt, wenn options.group_routing nicht "none" ist; andernfalls werden Gruppen aus den Gruppennamen der Artikel in der Reihenfolge ihres Auftretens angelegt.

optionsOptions
Options
Nein

Ladeoptionen. Alle Felder sind optional.

Beispielanfrage

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"
    }
  }'

Beispielantwort

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
  }
}

Antworten

  • 200OKValidierungsergebnis und Preisspanne.
    NameTypErforderlichBeschreibung
    validboolean
    boolean
    Nein

    Die Anfrage wäre gültig für POST /v1/pack.

    errorsErrorDetail[]
    ErrorDetail[]
    Nein

    Validierungsfehler (leer, wenn gültig).

    warningsWarning[]
    Warning[]
    Nein

    Nicht blockierende Hinweise.

    itemsinteger
    integer
    Nein

    Artikeleinheiten insgesamt.

    max_vehiclesinteger
    integer
    Nein

    Höchstzahl an Fahrzeugen, die der Job beladen darf.

    estimated_costCostRange
    CostRange
    Nein

    Preisspanne in Credits.

    estimated_secondsnumber · s
    number · s
    Nein

    Rechenzeitbudget, das der Job erhielte (eine Obergrenze; die meisten Jobs sind früher fertig).

    balanceEstimateBalance
    EstimateBalance
    Nein

    Ihre verfügbaren Credits.

  • 400Bad requestinvalid_json
    • invalid_jsonDer Body ist kein gültiges JSON, oder ein Feld hat den falschen Typ.
    NameTypErforderlichBeschreibung
    errorErrorBodyerforderlich
    ErrorBody
    Ja
    Alle Fehlercodes
  • 401Unauthorizedunauthorizedkey_revokedkey_expired
    • unauthorizedAPI-Schlüssel fehlt, ist fehlerhaft oder unbekannt.
    • key_revokedDer Schlüssel wurde widerrufen.
    • key_expiredDer Schlüssel ist abgelaufen.
    NameTypErforderlichBeschreibung
    errorErrorBodyerforderlich
    ErrorBody
    Ja
    Alle Fehlercodes
  • 403Forbiddenip_not_allowedsubscription_inactiveaccount_inactivescope_missing
    • ip_not_allowedDie aufrufende IP-Adresse steht nicht auf der Allowlist des Schlüssels.
    • subscription_inactiveDie Organisation hat kein aktives Abonnement, das die API enthält.
    • account_inactiveDie Organisation ist gesperrt oder hat keinen Inhaber mit aktivem Konto.
    • scope_missingDem Schlüssel fehlt eine Berechtigung, die dieser Endpoint benötigt.
    NameTypErforderlichBeschreibung
    errorErrorBodyerforderlich
    ErrorBody
    Ja
    Alle Fehlercodes
  • 413Payload too largepayload_too_large
    • payload_too_largeDer Anfrage-Body ist größer als 10 MB.
    NameTypErforderlichBeschreibung
    errorErrorBodyerforderlich
    ErrorBody
    Ja
    Alle Fehlercodes
  • 429Too many requestsrate_limited
    • rate_limitedZu viele Anfragen in der aktuellen Minute, Stunde oder am aktuellen Tag (pro Schlüssel oder pro Organisation) oder mehr als 60 fehlgeschlagene Authentifizierungen pro Minute von Ihrer IP-Adresse.
    NameTypErforderlichBeschreibung
    errorErrorBodyerforderlich
    ErrorBody
    Ja
    Alle Fehlercodes
  • 500Internal server errorinternal_error
    • internal_errorAuf unserer Seite ist ein Fehler aufgetreten.
    NameTypErforderlichBeschreibung
    errorErrorBodyerforderlich
    ErrorBody
    Ja
    Alle Fehlercodes
  • 503Service unavailableapi_disabled
    • api_disabledDie API ist vorübergehend deaktiviert (Wartung) oder für die Organisation abgeschaltet.
    NameTypErforderlichBeschreibung
    errorErrorBodyerforderlich
    ErrorBody
    Ja
    Alle Fehlercodes