Zum Inhalt springen
EntwicklerdokumentationAPI-ReferenzProjekte

Projekt aktualisieren

Benennt ein Projekt um, ändert seine Optionen oder ersetzt seine Fahrzeuge oder seine Artikel (mit Gruppen).

PATCHhttps://runner.cargoduo.com/v1/projects/{id}

Werden Fahrzeuge oder Artikel ersetzt, wird der gespeicherte Plan gelöscht; offene App-Sitzungen laden neu. Kostenlos: Es werden keine Credits abgebucht.

Authentifizierung

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

Pfadparameter

NameTypErforderlichBeschreibung
idstringerforderlich
string
Ja

Projekt-ID (prj_…).

Body-Parameter

application/json
NameTypErforderlichBeschreibung
namestring
string
Nein
≤ 255 chars
vehiclesProjectVehicle[]
ProjectVehicle[]
Nein

Fahrzeug-Slots.

itemsItem[]
Item[]
Nein

Artikel (höchstens 500 Definitionen).

groupsGroup[]
Group[]
Nein

Gruppen mit ihrer Ladereihenfolge.

optionsProjectOptions
ProjectOptions
Nein

Die Ladeoptionen, die ein Projekt speichert.

Beispielanfrage

curl -X PATCH "https://runner.cargoduo.com/v1/projects/prj_3051" \
  -H "Authorization: Bearer $CARGODUO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "vehicles": [
      {
        "vehicle_id": "veh_118",
        "quantity": 2
      }
    ]
  }'

Beispielantwort

200 OK · Project
{
  "id": "prj_3051",
  "object": "project",
  "name": "Order 1042",
  "status": "draft",
  "item_count": 58,
  "vehicle_count": 2,
  "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:22:03Z",
  "options": {
    "packing_mode": "auto",
    "group_routing": "none",
    "allow_overweight": false
  },
  "vehicles": [
    {
      "id": "pv_5121",
      "vehicle_id": "veh_118",
      "name": "Mega trailer 13.6 m",
      "type": "trailer",
      "quantity": 2,
      "length": 1360,
      "width": 248,
      "height": 300,
      "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
}

Antworten

  • 200OKDas Projekt nach der Änderung.
    NameTypErforderlichBeschreibung
    idstring
    string
    Nein

    Projekt-ID (prj_…).

    objectstring
    string
    Nein
    project
    namestring
    string
    Nein
    statusstring
    string
    Nein

    draft = nie berechnet oder Eingaben ersetzt; calculated = hat einen aktuellen Plan; stale = seit der Erstellung des Plans wurde eine Einstellung geändert.

    draftcalculatedstaleerror
    item_countinteger
    integer
    Nein

    Artikeleinheiten (Summe der Mengen).

    vehicle_countinteger
    integer
    Nein

    Fahrzeuge (Summe der Mengen).

    app_urlstring
    string
    Nein

    Öffnet das Projekt im 3D-Editor der App.

    created_byUserRef | null
    UserRef | null
    Nein

    Das Mitglied, das es erstellt hat (bei API-Aufrufen: das Mitglied, das den Schlüssel erstellt hat). null, wenn unbekannt.

    updated_byUserRef | null
    UserRef | null
    Nein

    Das Mitglied, das es zuletzt geändert hat.

    created_atstring
    string
    Nein

    RFC 3339.

    updated_atstring
    string
    Nein

    RFC 3339.

    optionsProjectOptions
    ProjectOptions
    Nein

    Die Ladeoptionen, die ein Projekt speichert.

    vehiclesProjectVehicle[]
    ProjectVehicle[]
    Nein
    itemsItem[]
    Item[]
    Nein

    Ladung im Item-Format von /v1/pack; IDs sind item_….

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

    Der aktuelle Plan; null, wenn das Projekt keinen hat.

  • 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
  • 403Forbiddenplan_limit_reachedip_not_allowedsubscription_inactiveaccount_inactivescope_missing
    • plan_limit_reachedDer Tarif der Organisation erlaubt keine weiteren Projekte oder Artikel.
    • 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
  • 404Not foundproject_not_found
    • project_not_foundKein Projekt mit dieser ID in Ihrer Organisation.
    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
  • 422Unprocessable entityvalidation_failed
    • validation_failedDie Anfrage ist wohlgeformtes JSON, beschreibt aber einen ungültigen Job. details[] listet alle Probleme auf.
    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