# Per API Lieferstatus einer Bestellung ändern

**URL:** <https://forum.shopware.com/t/per-api-lieferstatus-einer-bestellung-andern/65616>\
**Category:** Shopware Playground - API first Sandbox\
**Created:** [19. März 2020 um 17:36 UTC](https://forum.shopware.com/t/per-api-lieferstatus-einer-bestellung-andern/65616 "2020-03-19T17:36:20Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![ansgar](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/ansgar/32/7871_2.png) [@ansgar](https://forum.shopware.com/u/ansgar)\
**Post date:** [19. März 2020 um 17:36 UTC](https://forum.shopware.com/t/per-api-lieferstatus-einer-bestellung-andern/65616/1 "2020-03-19T17:36:20Z")

</div>

Hallo,

per Admin API kann ich bereits eine Paket-Sendungsnummer aus unserer Warenwirtschaft speichern:  
PATCH auf /api/v1/order-delivery/xyz mit PostField trackingCodes=[123]

Ich möchte nun auch den Lieferstatus von „open“ auf „shipped“ patchen, was aber nicht gelingt wenn ich einfach ein PostField „stateId“:xyz anhänge. Hierbei bekomme ich den Fehler „This field is write protected“.

Wie kann ich per API den Lieferstatus einer Bestellung von „open“ auf „shipped“ ändern?

Danke für Vorschläge!  
Ansgar

---

<div class="post-metadata">

**Author:** ![ansgar](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/ansgar/32/7871_2.png) [@ansgar](https://forum.shopware.com/u/ansgar)\
**Post date:** [20. März 2020 um 09:48 UTC](https://forum.shopware.com/t/per-api-lieferstatus-einer-bestellung-andern/65616/2 "2020-03-20T09:48:56Z")

</div>

Mein bisheriger Code funktioniert nur für trackingCodes, nicht aber für den Lieferstatus:

```
$statesShipped = $api->get('/api/v1/state-machine-state?filter[technicalName]=shipped');
$shippedStateId = $statesShipped->data[0]->id ?? null;

$deliv = $api->get('/api/v1/order-delivery?filter[orderId]=xyz');
foreach($deliv->data as $d) {
    $api->patch('/api/v1/order-delivery/'.$d->id,
        [
            'trackingCodes' => ['helloFoo12345'],
            //'stateId' => $shippedStateId <= "This field is write protected"
            //'relationships.stateMachineState.id' => $shippedStateId <= funzt auch nicht
            'relationships'=>['stateMachineState'=>['id' => $shippedStateId]]
        ]);
}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![ansgar](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/ansgar/32/7871_2.png) [@ansgar](https://forum.shopware.com/u/ansgar)\
**Post date:** [20. März 2020 um 13:37 UTC](https://forum.shopware.com/t/per-api-lieferstatus-einer-bestellung-andern/65616/3 "2020-03-20T13:37:54Z")

</div>

Konnte das durch die Untersuchung der XHR Aufrufe im Admin-Bereich herausfinden:

```
$api->post('/api/v1/_action/order_delivery/'.$delivery->id.'/state/ship');

```

Daraufhin wird auch die zugehörige Mail an den Kunden verschickt („Bestellung bei xyz wurde ausgeliefert“)

---

<div class="post-metadata">

**Author:** ![hanshuckebein](https://avatars.discourse-cdn.com/v4/letter/h/df705f/32.png) [@hanshuckebein](https://forum.shopware.com/u/hanshuckebein)\
**Post date:** [22. August 2020 um 11:44 UTC](https://forum.shopware.com/t/per-api-lieferstatus-einer-bestellung-andern/65616/4 "2020-08-22T11:44:39Z")

</div>

Danke. Es ist m. E. aber ein bisschen traurig, dass man solche Basics mit detektivischen Mitteln herausfinden muss…

---

<div class="post-metadata">

**Author:** ![Reimers](https://avatars.discourse-cdn.com/v4/letter/r/a88e57/32.png) [@Reimers](https://forum.shopware.com/u/Reimers)\
**Post date:** [30. Oktober 2020 um 14:54 UTC](https://forum.shopware.com/t/per-api-lieferstatus-einer-bestellung-andern/65616/5 "2020-10-30T14:54:14Z")

</div>

Mich wundert, dass “…/ship” der richtige Wert ist.

Laut [OrderDeliveryStates.php](https://github.com/shopware/core/blob/master/Checkout/Order/Aggregate/OrderDelivery/OrderDeliveryStates.php) wäre das doch “shipped”, oder verstehe ich das falsch?

&nbsp;

---

<div class="post-metadata">

**Author:** ![hanshuckebein](https://avatars.discourse-cdn.com/v4/letter/h/df705f/32.png) [@hanshuckebein](https://forum.shopware.com/u/hanshuckebein)\
**Post date:** [6. Dezember 2020 um 22:44 UTC](https://forum.shopware.com/t/per-api-lieferstatus-einer-bestellung-andern/65616/6 "2020-12-06T22:44:47Z")

</div>

In der Tabelle _state\_machine\_transition_ sind vier wesentliche Werte gespeichert: _action\_name_ (hier: ship), _from\_state\_id_ (die gegenwärtige stateId), _to\_state\_id_ (die stateId, die nach Ausführung der Aktion für die jeweilige Status-Rubrik _state\_machine\_id_ (in Tabelle state\_machine zu finden, enthält IDs für Bestellstatus, Zahlungsstatus, Lieferstatus) eingetragen wird).&nbsp;&nbsp;&nbsp;&nbsp;
