{"files":{"SKILL.md":"---\nname: catalog-api-seller-portal\ndescription: \"Catalog API - Seller Portal API skill. Use when working with Catalog API - Seller Portal for api. Covers 16 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Catalog API - Seller Portal\n\n## Auth\nApiKey X-VTEX-API-AppKey in header | ApiKey X-VTEX-API-AppToken in header | ApiKey VtexIdclientAutCookie in header\n\n## Base URL\nhttps://apiexamples.vtexcommercestable.com.br\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /api/catalog-seller-portal/skus/_search -- verify access\n3. POST /api/catalog-seller-portal/products -- create first products\n\n## Endpoints\n\n16 endpoints across 1 groups. See references/api-spec.lap for full details.\n\n### api\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /api/catalog-seller-portal/products/{productId} | Get product by ID |\n| PUT | /api/catalog-seller-portal/products/{productId} | Update product |\n| GET | /api/catalog-seller-portal/products/{productId}/description | Get product description by product ID |\n| PUT | /api/catalog-seller-portal/products/{productId}/description | Update product description by product ID |\n| GET | /api/catalog-seller-portal/products/{param} | Get product by external ID,  SKU ID, SKU external ID or slug |\n| POST | /api/catalog-seller-portal/products | Create product |\n| GET | /api/catalog-seller-portal/skus/_search | Search for SKU |\n| GET | /api/catalog-seller-portal/skus/ids | Get list of SKUs |\n| GET | /api/catalog-seller-portal/brands | Get list of brands |\n| POST | /api/catalog-seller-portal/brands | Create brand |\n| GET | /api/catalog-seller-portal/brands/{brandId} | Get brand by ID |\n| PUT | /api/catalog-seller-portal/brands/{brandId} | Update brand |\n| GET | /api/catalog-seller-portal/category-tree | Get category tree |\n| PUT | /api/catalog-seller-portal/category-tree | Update category tree |\n| GET | /api/catalog-seller-portal/category-tree/categories/{categoryId} | Get category by ID |\n| POST | /api/catalog-seller-portal/category-tree/categories | Create category |\n\n## Common Questions\n\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Get product details?\" -> GET /api/catalog-seller-portal/products/{productId}\n- \"Update a product?\" -> PUT /api/catalog-seller-portal/products/{productId}\n- \"List all description?\" -> GET /api/catalog-seller-portal/products/{productId}/description\n- \"Get product details?\" -> GET /api/catalog-seller-portal/products/{param}\n- \"Create a product?\" -> POST /api/catalog-seller-portal/products\n- \"List all _search?\" -> GET /api/catalog-seller-portal/skus/_search\n- \"List all ids?\" -> GET /api/catalog-seller-portal/skus/ids\n- \"Search brands?\" -> GET /api/catalog-seller-portal/brands\n- \"Create a brand?\" -> POST /api/catalog-seller-portal/brands\n- \"Get brand details?\" -> GET /api/catalog-seller-portal/brands/{brandId}\n- \"Update a brand?\" -> PUT /api/catalog-seller-portal/brands/{brandId}\n- \"List all category-tree?\" -> GET /api/catalog-seller-portal/category-tree\n- \"Get category details?\" -> GET /api/catalog-seller-portal/category-tree/categories/{categoryId}\n- \"Create a category?\" -> POST /api/catalog-seller-portal/category-tree/categories\n- \"How to authenticate?\" -> See Auth section\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Create/update endpoints typically return the created/updated object\n\n## CLI\n\n```bash\n# Update this spec to the latest version\nnpx @lap-platform/lapsh get catalog-api-seller-portal -o references/api-spec.lap\n\n# Search for related APIs\nnpx @lap-platform/lapsh search catalog-api-seller-portal\n```\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Catalog API - Seller Portal\n@base https://apiexamples.vtexcommercestable.com.br\n@auth ApiKey X-VTEX-API-AppKey in header | ApiKey X-VTEX-API-AppToken in header | ApiKey VtexIdclientAutCookie in header\n@common_fields {Content-Type: str # Type of the content being sent., Accept: str # HTTP Client Negotiation _Accept_ Header. Indicates the types of responses the client can understand.}\n@endpoints 16\n@toc api(16)\n\n@endpoint GET /api/catalog-seller-portal/products/{productId}\n@desc Get product by ID\n@required {productId: str # Product unique identifier number.}\n@returns(200) {id: str, externalId: str, status: str, name: str, brandId: str, description: str, brandName: str, categoryIds: [str], categoryNames: [str], specs: [map], attributes: [map], slug: str, images: [map], skus: [map], transportModal: str?, taxCode: str?, origin: str, createdAt: str, updatedAt: str} # OK\n\n@endpoint PUT /api/catalog-seller-portal/products/{productId}\n@desc Update product\n@required {productId: str # Product unique identifier number., status: str # Status of the product. Its values can be `active` or `inactive`., name: str # Product name. Use simple words and avoid other languages or complex writing. This field is essential for SEO and must respect the 150 character limit., brandId: str # Product's brand unique identifier number., categoryIds: [str] # Product's categories unique identifier numbers. It can have multiples IDs for each category and subcategories., specs: [map{name!: str, values!: [str]}] # Specifications that will differentiate the possible product SKUs., attributes: [map{name!: str, value!: str}] # Attributes of the product. Attributes are additional properties used to create site browsing filters., slug: str # Reference of the product in the URL of the store., images: [map{id!: str, url!: str, alt: str}] # Information of the images of the product., skus: [map{id: str, name: str, externalId: str, description: str, ean: str, manufacturerCode: str, isActive!: bool, weight!: int, dimensions!: map, RealWeight: num, RealDimensions: map, specs!: [map], images!: [str]}] # SKUs of the product., origin: str # Origin account of the product. It is not possible to alter products where the origin is `marketplace`.}\n@optional {id: str # Product's unique identifier number., externalId: str # Product reference unique identifier number in the store., description: str # New description data for SKU/product., transportModal: str # Transport modal of the product., taxCode: str # Product tax code.}\n@returns(204) No Content\n\n@endpoint GET /api/catalog-seller-portal/products/{productId}/description\n@desc Get product description by product ID\n@required {productId: str # Product unique identifier number.}\n@returns(200) {productId: str, createdAt: str, updatedAt: str} # OK\n\n@endpoint PUT /api/catalog-seller-portal/products/{productId}/description\n@desc Update product description by product ID\n@required {productId: str # Product unique identifier number., productId: str # Product's unique identifier number., description: str # Product description.}\n@returns(204) No Content\n\n@endpoint GET /api/catalog-seller-portal/products/{param}\n@desc Get product by external ID,  SKU ID, SKU external ID or slug\n@required {param: str # This part of the path must follow this format: `{param}={value}`. Replace `{param}` with the name of the parameter used to fetch a product, which can be one of the following: `external-id` (product reference unique identifier number in the store), `sku-id` (SKU unique identifier number), `sku-external-id` (SKU reference unique identifier number in the store) or `slug` (reference of the product in the URL of the store). Replace `{value}` with the value of the selected param. Make sure there is a `=` between them.}\n@returns(200) {id: str, externalId: str, description: str, status: str, name: str, brandId: str, brandName: str, categoryIds: [str], categoryNames: [str], specs: [map], attributes: [map], slug: str, images: [map], skus: [map], transportModal: str, taxCode: str, origin: str, createdAt: str, updatedAt: str} # OK\n\n@endpoint POST /api/catalog-seller-portal/products\n@desc Create product\n@required {status: str # Status of the product. Its values can be `active` or `inactive`., name: str # Product name. Use simple words and avoid other languages or complex writing. This field is essential for SEO and must respect the 150 character limit., brandId: str # Product's brand unique identifier number., categoryIds: [str] # Product's categories unique identifier numbers. It can have multiples IDs for each category and subcategories., specs: [map{name!: str, values!: [str]}] # Specifications that will differentiate the possible product SKUs., attributes: [map{name!: str, value!: str}] # Attributes of the product. Attributes are additional properties used to create site browsing filters., slug: str # Reference of the product in the URL of the store., images: [map{id!: str, url!: str, alt: str}] # Information of the images of the product., skus: [map{name!: str, externalId: str, description: str, ean: str, manufacturerCode: str, isActive!: bool, weight!: int, dimensions!: map, RealWeight: num, RealDimensions: map, specs!: [map], images!: [str]}] # SKUs of the product., origin: str # Origin account of the product. It is not possible to alter products where the origin is `marketplace`.}\n@optional {externalId: str # Product reference unique identifier number in the store., description: str # Product's data description., transportModal: str # Transport modal of the product., taxCode: str # Product tax code.}\n@returns(200) {id: str, externalId: str, status: str, name: str, brandId: str, brandName: str, description: str, categoryIds: [str], categoryNames: [str], specs: [map], attributes: [map], slug: str, images: [map], skus: [map], origin: str, transportModal: str?, taxCode: str?, createdAt: str, updatedAt: str} # OK\n@returns(204) No Content\n\n@endpoint GET /api/catalog-seller-portal/skus/_search\n@desc Search for SKU\n@optional {from: str # The first page of the interval of the product list., to: str # The last page of the interval of the product list., id: int # SKU unique idenfier number., externalid: int # SKU reference unique identifier number in the store.}\n@returns(200) {data: [map], _metadata: map{total: int, from: int, to: int}} # OK\n\n@endpoint GET /api/catalog-seller-portal/skus/ids\n@desc Get list of SKUs\n@optional {from: str # The first page of the interval of the product list., to: str # The last page of the interval of the product list.}\n@returns(200) {data: [str], _metadata: map{total: int, from: int, to: int}} # OK\n\n@endpoint GET /api/catalog-seller-portal/brands\n@desc Get list of brands\n@optional {q: str # Search word., from: str # The first page of the interval of the brand list., to: str # The last page of the interval of the brand list., orderBy: str # The order that the list is displayed. You can select `name`, or `updated_at` to select the order criteria. Then you can add `,` , `asc` or `desc` to define the brands order., name: str # Brand name.}\n@returns(200) {data: [map], _metadata: map{total: int, from: int, to: int, orderBy: str}} # OK\n\n@endpoint POST /api/catalog-seller-portal/brands\n@desc Create brand\n@required {name: str # Brand name., isActive: bool # The condition defines if the brand is active (`true`) or inactive (`false`).}\n@returns(200) {id: str, name: str, isActive: bool, createdAt: str, updatedAt: str} # OK\n\n@endpoint GET /api/catalog-seller-portal/brands/{brandId}\n@desc Get brand by ID\n@required {brandId: str # Brand unique identifier number.}\n@returns(200) {id: str, name: str, isActive: bool, createdAt: str, updatedAt: str} # OK\n\n@endpoint PUT /api/catalog-seller-portal/brands/{brandId}\n@desc Update brand\n@required {brandId: str # Brand unique identifier number., id: str # Brand unique identifier number., name: str # Brand name., isActive: bool # The condition defines if the brand is active (`true`) or inactive (`false`).}\n@returns(204) No Content\n@example_request {\"id\":\"20\",\"name\":\"Zwilling\",\"isActive\":true}\n\n@endpoint GET /api/catalog-seller-portal/category-tree\n@desc Get category tree\n@optional {depth: int # Category tree level.}\n@returns(200) {roots: [map], createdAt: str, updatedAt: str} # OK\n\n@endpoint PUT /api/catalog-seller-portal/category-tree\n@desc Update category tree\n@required {roots: [map{value!: map, children!: [map]}] # List of all categories of the store.}\n@returns(204) No Content\n\n@endpoint GET /api/catalog-seller-portal/category-tree/categories/{categoryId}\n@desc Get category by ID\n@required {categoryId: str # Category unique identifier number.}\n@returns(200) {value: map{id: str, name: str, isActive: bool}, children: [map]} # OK\n\n@endpoint POST /api/catalog-seller-portal/category-tree/categories\n@desc Create category\n@required {parentId: str # Parent category unique identifier number., Name: str # Category name.}\n@returns(200) {value: map{id: str, name: str, isActive: bool}, children: [map]} # OK\n@example_request {\"parentId\":\"567\",\"Name\":\"Beauty\"}\n\n@end\n"}}