Great questions — this is exactly where PrestaShop’s API design is confusing, so you’re not missing anything obvious.
Let’s reset the mental model first, because this is the key part.
How PrestaShop “Update Order” actually works
PrestaShop does not support partial updates for orders.
When you call Update Order, you are effectively doing a full order update, even if you only want to change the status.
That means:
-
order_id identifies which order
-
but all required order fields must still be present
-
id_address_delivery is mandatory, even if you are not changing it
That’s why:
Both behaviors are expected.
Where id_address_delivery comes from
You do not invent it and you do not pass it separately.
The correct pattern is always:
-
Get Order (using Order ID)
-
Read the existing id_address_delivery from the response
-
Reuse that value in the Update Order payload
You are essentially saying:
“Update this order, but keep using the same delivery address.”
Where the Order Status value goes
Order status is not a top-level field.
In PrestaShop, the status is changed by updating:
current_state
So the status you want after the update is passed as:
current_state = <status_id>
Example:
Minimal working logic (conceptual)
The flow must be:
-
Get Order
-
Update Order
If you skip step 1, PrestaShop has no way to know the required fields — and it fails.
Why this feels harder than it should
This isn’t a Make issue.
This is exactly how the PrestaShop Orders API behaves, and it surprises a lot of people because it looks like a simple status update.
Once you follow the Get → Reuse required fields → Update pattern, the 404 and missing-field errors disappear.
If you want, next step I can show: