And where do you see that $id_cart is not passed?
$cart = new Cart() => return $cart->id !!
You can also directly call Hook::exec
$cart = new Cart(); /* or $cart = new Cart(int) $id_cart); */ $data = [ 'cart' => $cart, 'product' => $product, 'id_product_attribute' => $id_product_attribute, 'id_customization' => $id_customization, 'quantity' => $quantity, 'operator' => $operator, 'id_address_delivery' => $id_address_delivery, 'shop' => $shop, 'auto_add_cart_rule' => $auto_add_cart_rule, ]; Hook::exec('actionCartUpdateQuantityBefore', $data);