<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">

    <!-- Product Service -->
    <route url="/V1/products" method="POST">
        <service class="Magento\Catalog\Api\ProductRepositoryInterface" method="save"/>
        <resources>
            <resource ref="Magento_Catalog::products" />
        </resources>
    </route>
    <route url="/V1/products/:sku" method="PUT">
        <service class="Magento\Catalog\Api\ProductRepositoryInterface" method="save" />
        <resources>
            <resource ref="Magento_Catalog::products" />
        </resources>
    </route>
    <route url="/V1/products/:sku" method="DELETE">
        <service class="Magento\Catalog\Api\ProductRepositoryInterface" method="deleteById"/>
        <resources>
            <resource ref="Magento_Catalog::products" />
        </resources>
    </route>
    <route url="/V1/products" method="GET">
        <service class="Magento\Catalog\Api\ProductRepositoryInterface" method="getList"/>
        <resources>
            <resource ref="Magento_Catalog::products" />
        </resources>
    </route>
    <route url="/V1/products/:sku" method="GET">
        <service class="Magento\Catalog\Api\ProductRepositoryInterface" method="get"/>
        <resources>
            <resource ref="Magento_Catalog::products" />
        </resources>
    </route>
    <route url="/V1/products/attributes/types" method="GET">
        <service class="Magento\Catalog\Api\ProductAttributeTypesListInterface" method="getItems"/>
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/products/attributes/:attributeCode" method="GET">
        <service class="Magento\Catalog\Api\ProductAttributeRepositoryInterface" method="get"/>
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/products/attributes" method="GET">
        <service class="Magento\Catalog\Api\ProductAttributeRepositoryInterface" method="getList" />
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/categories/attributes/:attributeCode" method="GET">
        <service class="Magento\Catalog\Api\CategoryAttributeRepositoryInterface" method="get" />
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/categories/attributes" method="GET">
        <service class="Magento\Catalog\Api\CategoryAttributeRepositoryInterface" method="getList" />
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/categories/attributes/:attributeCode/options" method="GET">
        <service class="Magento\Catalog\Api\CategoryAttributeOptionManagementInterface" method="getItems" />
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/products/attributes" method="POST">
        <service class="Magento\Catalog\Api\ProductAttributeRepositoryInterface" method="save"/>
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/products/attributes/:attributeCode" method="PUT">
        <service class="Magento\Catalog\Api\ProductAttributeRepositoryInterface" method="save"/>
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/products/attributes/:attributeCode" method="DELETE">
        <service class="Magento\Catalog\Api\ProductAttributeRepositoryInterface" method="deleteById"/>
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/products/types" method="GET">
        <service class="Magento\Catalog\Api\ProductTypeListInterface" method="getProductTypes"/>
        <resources>
            <resource ref="Magento_Catalog::products"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/sets/list" method="GET">
        <service class="Magento\Catalog\Api\AttributeSetRepositoryInterface" method="getList"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/:attributeSetId" method="GET">
        <service class="Magento\Catalog\Api\AttributeSetRepositoryInterface" method="get"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/:attributeSetId" method="DELETE">
        <service class="Magento\Catalog\Api\AttributeSetRepositoryInterface" method="deleteById"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets" method="POST">
        <service class="Magento\Catalog\Api\AttributeSetManagementInterface" method="create"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/:attributeSetId" method="PUT">
        <service class="Magento\Catalog\Api\AttributeSetRepositoryInterface" method="save"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/:attributeSetId/attributes" method="GET">
        <service class="Magento\Catalog\Api\ProductAttributeManagementInterface" method="getAttributes"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/attributes" method="POST">
        <service class="Magento\Catalog\Api\ProductAttributeManagementInterface" method="assign"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/:attributeSetId/attributes/:attributeCode" method="DELETE">
        <service class="Magento\Catalog\Api\ProductAttributeManagementInterface" method="unassign"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/groups/list" method="GET">
        <service class="Magento\Catalog\Api\ProductAttributeGroupRepositoryInterface" method="getList"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/groups" method="POST">
        <service class="Magento\Catalog\Api\ProductAttributeGroupRepositoryInterface" method="save"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/:attributeSetId/groups" method="PUT">
        <service class="Magento\Catalog\Api\ProductAttributeGroupRepositoryInterface" method="save"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attribute-sets/groups/:groupId" method="DELETE">
        <service class="Magento\Catalog\Api\ProductAttributeGroupRepositoryInterface" method="deleteById"/>
        <resources>
            <resource ref="Magento_Catalog::sets"/>
        </resources>
    </route>
    <route url="/V1/products/attributes/:attributeCode/options" method="GET">
        <service class="Magento\Catalog\Api\ProductAttributeOptionManagementInterface" method="getItems"/>
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/products/attributes/:attributeCode/options" method="POST">
        <service class="Magento\Catalog\Api\ProductAttributeOptionManagementInterface" method="add" />
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/products/attributes/:attributeCode/options/:optionId" method="DELETE">
        <service class="Magento\Catalog\Api\ProductAttributeOptionManagementInterface" method="delete" />
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes" />
        </resources>
    </route>
    <route url="/V1/products/media/types/:attributeSetName" method="GET">
        <service class="Magento\Catalog\Api\ProductMediaAttributeManagementInterface" method="getList"/>
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/media/:entryId" method="GET">
        <service class="Magento\Catalog\Api\ProductAttributeMediaGalleryManagementInterface" method="get"/>
        <resources>
            <resource ref="Magento_Catalog::attributes_attributes"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/media" method="POST">
        <service class="Magento\Catalog\Api\ProductAttributeMediaGalleryManagementInterface" method="create"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/media/:entryId" method="PUT">
        <service class="Magento\Catalog\Api\ProductAttributeMediaGalleryManagementInterface" method="update"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/media/:entryId" method="DELETE">
        <service class="Magento\Catalog\Api\ProductAttributeMediaGalleryManagementInterface" method="remove"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/media" method="GET">
        <service class="Magento\Catalog\Api\ProductAttributeMediaGalleryManagementInterface" method="getList"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>

    <!-- Tier Price -->
    <route url="/V1/products/:sku/group-prices/:customerGroupId/tiers" method="GET">
        <service class="Magento\Catalog\Api\ProductTierPriceManagementInterface" method="getList"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/group-prices/:customerGroupId/tiers/:qty/price/:price" method="POST">
        <service class="Magento\Catalog\Api\ProductTierPriceManagementInterface" method="add"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/group-prices/:customerGroupId/tiers/:qty" method="DELETE">
        <service class="Magento\Catalog\Api\ProductTierPriceManagementInterface" method="remove"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/tier-prices-information" method="POST">
        <service class="Magento\Catalog\Api\TierPriceStorageInterface" method="get"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/tier-prices" method="POST">
        <service class="Magento\Catalog\Api\TierPriceStorageInterface" method="update"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/tier-prices" method="PUT">
        <service class="Magento\Catalog\Api\TierPriceStorageInterface" method="replace"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/tier-prices-delete" method="POST">
        <service class="Magento\Catalog\Api\TierPriceStorageInterface" method="delete"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/base-prices-information" method="POST">
        <service class="Magento\Catalog\Api\BasePriceStorageInterface" method="get"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/base-prices" method="POST">
        <service class="Magento\Catalog\Api\BasePriceStorageInterface" method="update"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/cost-information" method="POST">
        <service class="Magento\Catalog\Api\CostStorageInterface" method="get"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/cost" method="POST">
        <service class="Magento\Catalog\Api\CostStorageInterface" method="update"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/cost-delete" method="POST">
        <service class="Magento\Catalog\Api\CostStorageInterface" method="delete"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/special-price-information" method="POST">
        <service class="Magento\Catalog\Api\SpecialPriceStorageInterface" method="get"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/special-price" method="POST">
        <service class="Magento\Catalog\Api\SpecialPriceStorageInterface" method="update"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/special-price-delete" method="POST">
        <service class="Magento\Catalog\Api\SpecialPriceStorageInterface" method="delete"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>

    <route url="/V1/categories/:categoryId" method="DELETE">
        <service class="Magento\Catalog\Api\CategoryRepositoryInterface" method="deleteByIdentifier" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>
    <route url="/V1/categories/:categoryId" method="GET">
        <service class="Magento\Catalog\Api\CategoryRepositoryInterface" method="get" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>
    <route url="/V1/categories" method="POST">
        <service class="Magento\Catalog\Api\CategoryRepositoryInterface" method="save" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>
    <route url="/V1/categories" method="GET">
        <service class="Magento\Catalog\Api\CategoryManagementInterface" method="getTree" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>
    <route url="/V1/categories/:id" method="PUT">
        <service class="Magento\Catalog\Api\CategoryRepositoryInterface" method="save" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>
    <route url="/V1/categories/:categoryId/move" method="PUT">
        <service class="Magento\Catalog\Api\CategoryManagementInterface" method="move" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>
    <route url="/V1/categories/list" method="GET">
        <service class="Magento\Catalog\Api\CategoryListInterface" method="getList" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>

    <!-- Product Custom Options -->
    <route url="/V1/products/options/types" method="GET">
        <service class="Magento\Catalog\Api\ProductCustomOptionTypeListInterface" method="getItems"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/options" method="GET">
        <service class="Magento\Catalog\Api\ProductCustomOptionRepositoryInterface" method="getList"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/options/:optionId" method="GET">
        <service class="Magento\Catalog\Api\ProductCustomOptionRepositoryInterface" method="get"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/options" method="POST">
        <service class="Magento\Catalog\Api\ProductCustomOptionRepositoryInterface" method="save"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/options/:optionId" method="PUT">
        <service class="Magento\Catalog\Api\ProductCustomOptionRepositoryInterface" method="save"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/options/:optionId" method="DELETE">
        <service class="Magento\Catalog\Api\ProductCustomOptionRepositoryInterface" method="deleteByIdentifier"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>

    <!-- Product Links -->
    <route url="/V1/products/links/types" method="GET">
        <service class="Magento\Catalog\Api\ProductLinkTypeListInterface" method="getItems"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/links/:type/attributes" method="GET">
        <service class="Magento\Catalog\Api\ProductLinkTypeListInterface" method="getItemAttributes"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/links/:type" method="GET">
        <service class="Magento\Catalog\Api\ProductLinkManagementInterface" method="getLinkedItemsByType"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/links" method="POST">
        <service class="Magento\Catalog\Api\ProductLinkManagementInterface" method="setProductLinks"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/links/:type/:linkedProductSku" method="DELETE">
        <service class="Magento\Catalog\Api\ProductLinkRepositoryInterface" method="deleteById"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>
    <route url="/V1/products/:sku/links" method="PUT">
        <service class="Magento\Catalog\Api\ProductLinkRepositoryInterface" method="save"/>
        <resources>
            <resource ref="Magento_Catalog::catalog"/>
        </resources>
    </route>

    <!-- Category Product Links -->
    <route url="/V1/categories/:categoryId/products" method="GET">
        <service class="Magento\Catalog\Api\CategoryLinkManagementInterface" method="getAssignedProducts" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>
    <route url="/V1/categories/:categoryId/products" method="POST">
        <service class="Magento\Catalog\Api\CategoryLinkRepositoryInterface" method="save" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>
    <route url="/V1/categories/:categoryId/products" method="PUT">
        <service class="Magento\Catalog\Api\CategoryLinkRepositoryInterface" method="save" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>
    <route url="/V1/categories/:categoryId/products/:sku" method="DELETE">
        <service class="Magento\Catalog\Api\CategoryLinkRepositoryInterface" method="deleteByIds" />
        <resources>
            <resource ref="Magento_Catalog::categories" />
        </resources>
    </route>

    <!-- Product Website Links -->
    <route url="/V1/products/:sku/websites" method="POST">
        <service class="Magento\Catalog\Api\ProductWebsiteLinkRepositoryInterface" method="save" />
        <resources>
            <resource ref="Magento_Catalog::products" />
        </resources>
    </route>
    <route url="/V1/products/:sku/websites" method="PUT">
        <service class="Magento\Catalog\Api\ProductWebsiteLinkRepositoryInterface" method="save" />
        <resources>
            <resource ref="Magento_Catalog::products" />
        </resources>
    </route>
    <route url="/V1/products/:sku/websites/:websiteId" method="DELETE">
        <service class="Magento\Catalog\Api\ProductWebsiteLinkRepositoryInterface" method="deleteById" />
        <resources>
            <resource ref="Magento_Catalog::products" />
        </resources>
    </route>
    <route url="/V1/products-render-info" method="GET">
        <service class="Magento\Catalog\Api\ProductRenderListInterface" method="getList"/>
        <resources>
            <resource ref="anonymous" />
        </resources>
    </route>
</routes>
