2

Magento 2 product rest API provided stock_item details in /V1/products/:sku API. But V1/products rest API not included stock_item details in products.

I want to need stock_item details in to the list of the products rest API.

Method: GET

URL: http://localhost/magentosample230/rest/V1/products?searchCriteria[pageSize]=10&searchCriteria[filter_groups][0][filters][0][field]=category_id&searchCriteria[filter_groups][0][filters][0][value]=4&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

Actual Response:

{
    "items": [
        {
            "id": 1,
            "sku": "24-MB01",
            "name": "Joust Duffle Bag",
            "attribute_set_id": 15,
            "price": 34,
            "status": 1,
            "visibility": 4,
            "type_id": "simple",
            "created_at": "2019-08-30 07:14:51",
            "updated_at": "2019-08-30 07:14:51",
            "extension_attributes": {
                "website_ids": [
                    1
                ],
                "category_links": [
                    {
                        "position": 0,
                        "category_id": "3"
                    }
                ]
            },
            "product_links": [
                {
                    "sku": "24-MB01",
                    "link_type": "crosssell",
                    "linked_product_sku": "24-WG086",
                    "linked_product_type": "simple",
                    "position": 1
                }
            ],
            "options": [],
            "media_gallery_entries": [
                {
                    "id": 1,
                    "media_type": "image",
                    "label": "Image",
                    "position": 1,
                    "disabled": false,
                    "types": [
                        "image",
                        "small_image",
                        "thumbnail"
                    ],
                    "file": "/m/b/mb01-blue-0.jpg"
                }
            ],
            "tier_prices": [],
            "custom_attributes": [
                {
                    "attribute_code": "image",
                    "value": "/m/b/mb01-blue-0.jpg"
                },
                {
                    "attribute_code": "small_image",
                    "value": "/m/b/mb01-blue-0.jpg"
                },
                {
                    "attribute_code": "description",
                    "value": "<p>The sporty Joust Duffle Bag can't be beat - not in the gym, not on the luggage carousel, not anywhere. Big enough to haul a basketball or soccer ball and some sneakers with plenty of room to spare, it's ideal for athletes with places to go.<p>\n<ul>\n<li>Dual top handles.</li>\n<li>Adjustable shoulder strap.</li>\n<li>Full-length zipper.</li>\n<li>L 29\" x W 13\" x H 11\".</li>\n</ul>"
                }
            ]
        },
        {
            "id": 2,
            "sku": "24-MB04",
            "name": "Strive Shoulder Pack",
            "attribute_set_id": 15,
            "price": 32,
            "status": 1,
            "visibility": 4,
            "type_id": "simple",
            "created_at": "2019-08-30 07:14:52",
            "updated_at": "2019-08-30 07:14:52",
            "extension_attributes": {
                "website_ids": [
                    1
                ],
                "category_links": [
                    {
                        "position": 0,
                        "category_id": "3"
                    },
                    {
                        "position": 0,
                        "category_id": "7"
                    }
                ]
            },
            "product_links": [
                {
                    "sku": "24-MB04",
                    "link_type": "crosssell",
                    "linked_product_sku": "24-UG03",
                    "linked_product_type": "simple",
                    "position": 1
                }
            ],
            "options": [],
            "media_gallery_entries": [
                {
                    "id": 2,
                    "media_type": "image",
                    "label": "Image",
                    "position": 1,
                    "disabled": false,
                    "types": [
                        "image",
                        "small_image",
                        "thumbnail"
                    ],
                    "file": "/m/b/mb04-black-0.jpg"
                }
            ],
            "tier_prices": [],
            "custom_attributes": [
                {
                    "attribute_code": "image",
                    "value": "/m/b/mb04-black-0.jpg"
                },
                {
                    "attribute_code": "small_image",
                    "value": "/m/b/mb04-black-0.jpg"
                },
                {
                    "attribute_code": "description",
                    "value": "<p>Convenience is next to nothing when your day is crammed with action. So whether you're heading to class, gym, or the unbeaten path, make sure you've got your Strive Shoulder Pack stuffed with all your essentials, and extras as well.</p>\n<ul>\n<li>Zippered main compartment.</li>\n<li>Front zippered pocket.</li>\n<li>Side mesh pocket.</li>\n<li>Cell phone pocket on strap.</li>\n<li>Adjustable shoulder strap and top carry handle.</li>\n</ul>"
                },
                {
                    "attribute_code": "activity",
                    "value": "11,21,23,18"
                },
                {
                    "attribute_code": "erin_recommends",
                    "value": "1"
                },
                {
                    "attribute_code": "sale",
                    "value": "1"
                }
            ]
        },
    ],
}

Expected Response:

{
    "items": [
        {
            "id": 1,
            "sku": "24-MB01",
            "name": "Joust Duffle Bag",
            "attribute_set_id": 15,
            "price": 34,
            "status": 1,
            "visibility": 4,
            "type_id": "simple",
            "created_at": "2019-08-30 07:14:51",
            "updated_at": "2019-08-30 07:14:51",
            "extension_attributes": {
                "stock_item": {
                    "item_id": 1,
                    "product_id": 1,
                    "stock_id": 1,
                    "qty": 100,
                    "is_in_stock": true,
                    "is_qty_decimal": false,
                    "show_default_notification_message": false,
                    "use_config_min_qty": true,
                    "min_qty": 0,
                    "use_config_min_sale_qty": 1,
                    "min_sale_qty": 1,
                    "use_config_max_sale_qty": true,
                    "max_sale_qty": 10000,
                    "use_config_backorders": true,
                    "backorders": 0,
                    "use_config_notify_stock_qty": true,
                    "notify_stock_qty": 1,
                    "use_config_qty_increments": true,
                    "qty_increments": 0,
                    "use_config_enable_qty_inc": true,
                    "enable_qty_increments": false,
                    "use_config_manage_stock": true,
                    "manage_stock": true,
                    "low_stock_date": null,
                    "is_decimal_divided": false,
                    "stock_status_changed_auto": 0
                }
                "website_ids": [
                    1
                ],
                "category_links": [
                    {
                        "position": 0,
                        "category_id": "3"
                    }
                ]
            },
            "product_links": [
                {
                    "sku": "24-MB01",
                    "link_type": "crosssell",
                    "linked_product_sku": "24-WG086",
                    "linked_product_type": "simple",
                    "position": 1
                }
            ],
            "options": [],
            "media_gallery_entries": [
                {
                    "id": 1,
                    "media_type": "image",
                    "label": "Image",
                    "position": 1,
                    "disabled": false,
                    "types": [
                        "image",
                        "small_image",
                        "thumbnail"
                    ],
                    "file": "/m/b/mb01-blue-0.jpg"
                }
            ],
            "tier_prices": [],
            "custom_attributes": [
                {
                    "attribute_code": "image",
                    "value": "/m/b/mb01-blue-0.jpg"
                },
                {
                    "attribute_code": "small_image",
                    "value": "/m/b/mb01-blue-0.jpg"
                },
                {
                    "attribute_code": "description",
                    "value": "<p>The sporty Joust Duffle Bag can't be beat - not in the gym, not on the luggage carousel, not anywhere. Big enough to haul a basketball or soccer ball and some sneakers with plenty of room to spare, it's ideal for athletes with places to go.<p>\n<ul>\n<li>Dual top handles.</li>\n<li>Adjustable shoulder strap.</li>\n<li>Full-length zipper.</li>\n<li>L 29\" x W 13\" x H 11\".</li>\n</ul>"
                }
            ]
        },
        {
            "id": 2,
            "sku": "24-MB04",
            "name": "Strive Shoulder Pack",
            "attribute_set_id": 15,
            "price": 32,
            "status": 1,
            "visibility": 4,
            "type_id": "simple",
            "created_at": "2019-08-30 07:14:52",
            "updated_at": "2019-08-30 07:14:52",
            "extension_attributes": {

                "stock_item": {
                    "item_id": 2,
                    "product_id": 2,
                    "stock_id": 2,
                    "qty": 100,
                    "is_in_stock": true,
                    "is_qty_decimal": false,
                    "show_default_notification_message": false,
                    "use_config_min_qty": true,
                    "min_qty": 0,
                    "use_config_min_sale_qty": 1,
                    "min_sale_qty": 1,
                    "use_config_max_sale_qty": true,
                    "max_sale_qty": 10000,
                    "use_config_backorders": true,
                    "backorders": 0,
                    "use_config_notify_stock_qty": true,
                    "notify_stock_qty": 1,
                    "use_config_qty_increments": true,
                    "qty_increments": 0,
                    "use_config_enable_qty_inc": true,
                    "enable_qty_increments": false,
                    "use_config_manage_stock": true,
                    "manage_stock": true,
                    "low_stock_date": null,
                    "is_decimal_divided": false,
                    "stock_status_changed_auto": 0
                }

                "website_ids": [
                    1
                ],
                "category_links": [
                    {
                        "position": 0,
                        "category_id": "3"
                    }
                ]
            },
            "product_links": [
                {
                    "sku": "24-MB04",
                    "link_type": "crosssell",
                    "linked_product_sku": "24-UG03",
                    "linked_product_type": "simple",
                    "position": 1
                }
            ],
            "options": [],
            "media_gallery_entries": [
                {
                    "id": 2,
                    "media_type": "image",
                    "label": "Image",
                    "position": 1,
                    "disabled": false,
                    "types": [
                        "image",
                        "small_image",
                        "thumbnail"
                    ],
                    "file": "/m/b/mb04-black-0.jpg"
                }
            ],
            "tier_prices": [],
            "custom_attributes": [
                {
                    "attribute_code": "image",
                    "value": "/m/b/mb04-black-0.jpg"
                },
                {
                    "attribute_code": "small_image",
                    "value": "/m/b/mb04-black-0.jpg"
                },
                {
                    "attribute_code": "description",
                    "value": "<p>Convenience is next to nothing when your day is crammed with action. So whether you're heading to class, gym, or the unbeaten path, make sure you've got your Strive Shoulder Pack stuffed with all your essentials, and extras as well.</p>\n<ul>\n<li>Zippered main compartment.</li>\n<li>Front zippered pocket.</li>\n<li>Side mesh pocket.</li>\n<li>Cell phone pocket on strap.</li>\n<li>Adjustable shoulder strap and top carry handle.</li>\n</ul>"
                },
                {
                    "attribute_code": "activity",
                    "value": "11,21,23,18"
                },
                {
                    "attribute_code": "style_bags",
                    "value": "27,29,30"
                }
            ]
        },
    ],
}

1 Answer 1

6

Magento2 does not suggest to add stock info to listing Api a MSI add to 2.3 version.

But if you want don't use MSI to your system then you can below solution

1.Create di.xml at your app/code/StackExchange/Magento

Update ExtensionPool data of Magento\Catalog\Api\Data\ProductInterface and add stock_item data provider.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\EntityManager\Operation\ExtensionPool">
        <arguments>
            <argument name="extensionActions" xsi:type="array">
                <item name="Magento\Catalog\Api\Data\ProductInterface" xsi:type="array">
                    <item name="read" xsi:type="array">
                        <item name="stock_item" xsi:type="string">StackExchange\Magento\Model\ReadHandler</item>
                    </item>
                </item>
            </argument>
        </arguments>
    </type>
</config>

2. Define ReadHandler class.

 <?php

namespace StackExchange\Magento\Model;


class ReadHandler implements \Magento\Framework\EntityManager\Operation\ExtensionInterface
{

    /**
     * @var \Magento\CatalogInventory\Api\StockRegistryInterface
     */
    private $stockRegistry;

    public function __construct(
    \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry     
    ) {

        $this->stockRegistry = $stockRegistry;
    }
    /**
     * Magento\CatalogInventory\Api\Data\StockItemInterface
     * @param type $product
     * @param type $arguments
     */
    public function execute($product, $arguments = [])
    {
        if ($product->getExtensionAttributes()->getStockItem() !== null) {
            return $product;
        }

        $stockItem =$this->stockRegistry->getStockItem($product->getId());
        $extensionAttributes = $product->getExtensionAttributes();
        $extensionAttributes->setStockItem($stockItem);
        $product->setExtensionAttributes($extensionAttributes);

        return $product;        
    }

}
3

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.