> For the complete documentation index, see [llms.txt](https://help.mimeeq.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.mimeeq.com/developers/product-categories.md).

# Product Categories

Hierarchical product categories (localized name, code, connected products).

## List Product Categories

> List the customer's product categories. Filter by name with \`search\`; the name comes back translated — to \`lang\` when given, otherwise to your customer's default language. The full \`{ language: text }\` map is a detail-read feature; the list is always translated. Cursor-paginated.\
> \
> Requires the \`productCategories:read\` scope.

```json
{"openapi":"3.1.0","info":{"title":"Mimeeq External API","version":"1.0.0"},"tags":[{"name":"Product Categories","description":"Hierarchical product categories (localized name, code, connected products)."}],"servers":[{"url":"https://admin.mimeeqapi.com","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key sent as a bearer token (mk_live_… / mk_test_…)."}},"schemas":{"ProductCategoriesList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"productCategoryId":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."},"name":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}]},{"type":"null"}],"description":"Translated text when `lang` is set, otherwise the full `{ language: text }` map. Languages with no text are omitted, and a field with no text at all is null."},"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE","INACTIVE"]},{"type":"null"}]},"parentProductCategoryId":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberOfProducts":{"type":"number"}},"required":["productCategoryId","name","code","status","parentProductCategoryId","numberOfProducts"],"additionalProperties":false}},"page":{"type":"object","properties":{"limit":{"type":"number"},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["limit","nextCursor"],"additionalProperties":false}},"required":["data","page"],"additionalProperties":false},"PublicError":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"description":"Optional error-specific details (e.g. per-field validation reasons)."}}}}},"paths":{"/v1/product-categories":{"get":{"summary":"List Product Categories","tags":["Product Categories"],"description":"List the customer's product categories. Filter by name with `search`; the name comes back translated — to `lang` when given, otherwise to your customer's default language. The full `{ language: text }` map is a detail-read feature; the list is always translated. Cursor-paginated.\n\nRequires the `productCategories:read` scope.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesList"}}}},"400":{"description":"Invalid request data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"The API key lacks the required scope (`scope_denied`), or the operation is not permitted for this account (`operation_not_permitted`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}}},"parameters":[{"name":"limit","in":"query","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":5000}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","minLength":1}},{"name":"search","in":"query","required":false,"schema":{"type":"string","minLength":1,"description":"Substring match on the category name."}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":10,"description":"Language code to translate localized fields to (falls back if unavailable)."}}]}}}}
```

## Create Product Category

> Create a product category. Only the localized name and unique code are required; you may also set a parent (must be one of your categories) and pass the general fields (status) and connected products to build the whole category in one call. Extras are applied by a follow-up update after the category exists; if that step fails the category is still created and the response shows it without them. New categories default to INACTIVE. Returns 409 if the code is taken.\
> \
> Requires the \`productCategories:write\` scope.

```json
{"openapi":"3.1.0","info":{"title":"Mimeeq External API","version":"1.0.0"},"tags":[{"name":"Product Categories","description":"Hierarchical product categories (localized name, code, connected products)."}],"servers":[{"url":"https://admin.mimeeqapi.com","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key sent as a bearer token (mk_live_… / mk_test_…)."}},"schemas":{"ProductCategoriesMutation":{"type":"object","properties":{"data":{"type":"object","properties":{"productCategoryId":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."},"name":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}]},{"type":"null"}],"description":"Translated text when `lang` is set, otherwise the full `{ language: text }` map. Languages with no text are omitted, and a field with no text at all is null."},"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE","INACTIVE"]},{"type":"null"}]},"parentProductCategoryId":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberOfProducts":{"type":"number"},"products":{"type":"array","items":{"type":"string"}}},"required":["productCategoryId"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"PublicError":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"description":"Optional error-specific details (e.g. per-field validation reasons)."}}},"ProductCategoriesCreateRequest":{"type":"object","properties":{"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Category name, keyed by language code."},"code":{"type":"string","minLength":1,"maxLength":255,"description":"Unique category code within the account."},"parentProductCategoryId":{"anyOf":[{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."},{"type":"null"}]},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]},"productIds":{"type":"array","items":{"type":"string","pattern":"^PROD-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product identifier (PROD-<uuid>)."}}},"required":["name","code"],"additionalProperties":false}}},"paths":{"/v1/product-categories":{"post":{"summary":"Create Product Category","tags":["Product Categories"],"description":"Create a product category. Only the localized name and unique code are required; you may also set a parent (must be one of your categories) and pass the general fields (status) and connected products to build the whole category in one call. Extras are applied by a follow-up update after the category exists; if that step fails the category is still created and the response shows it without them. New categories default to INACTIVE. Returns 409 if the code is taken.\n\nRequires the `productCategories:write` scope.","responses":{"201":{"description":"Created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesMutation"}}}},"400":{"description":"Invalid request data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"The API key lacks the required scope (`scope_denied`), or the operation is not permitted for this account (`operation_not_permitted`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"409":{"description":"Conflict with the current state (e.g. the resource already exists).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesCreateRequest"}}}}}}}}
```

## Get Product Category

> Get a product category with its connected products (read-only). The name is translated to \`lang\`; omit \`lang\` to get the full \`{ language: text }\` map instead — the update takes the whole map, so renaming one language means sending the others back with it.\
> \
> Requires the \`productCategories:read\` scope.

```json
{"openapi":"3.1.0","info":{"title":"Mimeeq External API","version":"1.0.0"},"tags":[{"name":"Product Categories","description":"Hierarchical product categories (localized name, code, connected products)."}],"servers":[{"url":"https://admin.mimeeqapi.com","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key sent as a bearer token (mk_live_… / mk_test_…)."}},"schemas":{"ProductCategoriesDetail":{"type":"object","properties":{"data":{"type":"object","properties":{"productCategoryId":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."},"name":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}]},{"type":"null"}],"description":"Translated text when `lang` is set, otherwise the full `{ language: text }` map. Languages with no text are omitted, and a field with no text at all is null."},"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE","INACTIVE"]},{"type":"null"}]},"parentProductCategoryId":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberOfProducts":{"type":"number"},"products":{"type":"array","items":{"type":"string"}}},"required":["productCategoryId","name","code","status","parentProductCategoryId","numberOfProducts","products"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"PublicError":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"description":"Optional error-specific details (e.g. per-field validation reasons)."}}}}},"paths":{"/v1/product-categories/{productCategoryId}":{"get":{"summary":"Get Product Category","tags":["Product Categories"],"description":"Get a product category with its connected products (read-only). The name is translated to `lang`; omit `lang` to get the full `{ language: text }` map instead — the update takes the whole map, so renaming one language means sending the others back with it.\n\nRequires the `productCategories:read` scope.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesDetail"}}}},"400":{"description":"Invalid request data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"The API key lacks the required scope (`scope_denied`), or the operation is not permitted for this account (`operation_not_permitted`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}}},"parameters":[{"name":"productCategoryId","in":"path","required":true,"schema":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":10,"description":"Language code to translate localized fields to (falls back if unavailable)."}}]}}}}
```

## Update Product Category

> Update the general fields (localized name, code, parent, status). Only the fields you send are changed; omitted fields keep their stored value. Connected products are preserved. 409 if the code is taken.\
> \
> Requires the \`productCategories:write\` scope.

```json
{"openapi":"3.1.0","info":{"title":"Mimeeq External API","version":"1.0.0"},"tags":[{"name":"Product Categories","description":"Hierarchical product categories (localized name, code, connected products)."}],"servers":[{"url":"https://admin.mimeeqapi.com","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key sent as a bearer token (mk_live_… / mk_test_…)."}},"schemas":{"ProductCategoriesDetail":{"type":"object","properties":{"data":{"type":"object","properties":{"productCategoryId":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."},"name":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}]},{"type":"null"}],"description":"Translated text when `lang` is set, otherwise the full `{ language: text }` map. Languages with no text are omitted, and a field with no text at all is null."},"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE","INACTIVE"]},{"type":"null"}]},"parentProductCategoryId":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberOfProducts":{"type":"number"},"products":{"type":"array","items":{"type":"string"}}},"required":["productCategoryId","name","code","status","parentProductCategoryId","numberOfProducts","products"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"PublicError":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"description":"Optional error-specific details (e.g. per-field validation reasons)."}}},"ProductCategoriesUpdateRequest":{"type":"object","properties":{"name":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Category name, keyed by language code."},"code":{"type":"string","minLength":1,"maxLength":255},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]},"parentProductCategoryId":{"anyOf":[{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."},{"type":"null"}]}},"additionalProperties":false}}},"paths":{"/v1/product-categories/{productCategoryId}":{"put":{"summary":"Update Product Category","tags":["Product Categories"],"description":"Update the general fields (localized name, code, parent, status). Only the fields you send are changed; omitted fields keep their stored value. Connected products are preserved. 409 if the code is taken.\n\nRequires the `productCategories:write` scope.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesDetail"}}}},"400":{"description":"Invalid request data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"The API key lacks the required scope (`scope_denied`), or the operation is not permitted for this account (`operation_not_permitted`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"409":{"description":"Conflict with the current state (e.g. the resource already exists).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}}},"parameters":[{"name":"productCategoryId","in":"path","required":true,"schema":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesUpdateRequest"}}}}}}}}
```

## Add Product Category Products

> Add products to the category without sending the whole list. Ids already connected are ignored, so the call is idempotent and never creates duplicates. Products that are not yours are ignored.\
> \
> Requires the \`productCategories:write\` scope.

```json
{"openapi":"3.1.0","info":{"title":"Mimeeq External API","version":"1.0.0"},"tags":[{"name":"Product Categories","description":"Hierarchical product categories (localized name, code, connected products)."}],"servers":[{"url":"https://admin.mimeeqapi.com","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key sent as a bearer token (mk_live_… / mk_test_…)."}},"schemas":{"ProductCategoriesDetail":{"type":"object","properties":{"data":{"type":"object","properties":{"productCategoryId":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."},"name":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}]},{"type":"null"}],"description":"Translated text when `lang` is set, otherwise the full `{ language: text }` map. Languages with no text are omitted, and a field with no text at all is null."},"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE","INACTIVE"]},{"type":"null"}]},"parentProductCategoryId":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberOfProducts":{"type":"number"},"products":{"type":"array","items":{"type":"string"}}},"required":["productCategoryId","name","code","status","parentProductCategoryId","numberOfProducts","products"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"PublicError":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"description":"Optional error-specific details (e.g. per-field validation reasons)."}}},"ProductCategoriesProductsRequest2":{"type":"object","properties":{"productIds":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^PROD-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product identifier (PROD-<uuid>)."}}},"required":["productIds"],"additionalProperties":false}}},"paths":{"/v1/product-categories/{productCategoryId}/products":{"post":{"summary":"Add Product Category Products","tags":["Product Categories"],"description":"Add products to the category without sending the whole list. Ids already connected are ignored, so the call is idempotent and never creates duplicates. Products that are not yours are ignored.\n\nRequires the `productCategories:write` scope.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesDetail"}}}},"400":{"description":"Invalid request data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"The API key lacks the required scope (`scope_denied`), or the operation is not permitted for this account (`operation_not_permitted`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}}},"parameters":[{"name":"productCategoryId","in":"path","required":true,"schema":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesProductsRequest2"}}}}}}}}
```

## Update Product Category Products

> Replace the full list of products in the category. Products omitted from the list are removed; products that are not yours are ignored.\
> \
> Requires the \`productCategories:write\` scope.

```json
{"openapi":"3.1.0","info":{"title":"Mimeeq External API","version":"1.0.0"},"tags":[{"name":"Product Categories","description":"Hierarchical product categories (localized name, code, connected products)."}],"servers":[{"url":"https://admin.mimeeqapi.com","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key sent as a bearer token (mk_live_… / mk_test_…)."}},"schemas":{"ProductCategoriesDetail":{"type":"object","properties":{"data":{"type":"object","properties":{"productCategoryId":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."},"name":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}]},{"type":"null"}],"description":"Translated text when `lang` is set, otherwise the full `{ language: text }` map. Languages with no text are omitted, and a field with no text at all is null."},"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE","INACTIVE"]},{"type":"null"}]},"parentProductCategoryId":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberOfProducts":{"type":"number"},"products":{"type":"array","items":{"type":"string"}}},"required":["productCategoryId","name","code","status","parentProductCategoryId","numberOfProducts","products"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"PublicError":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"description":"Optional error-specific details (e.g. per-field validation reasons)."}}},"ProductCategoriesProductsRequest":{"type":"object","properties":{"productIds":{"type":"array","items":{"type":"string","pattern":"^PROD-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product identifier (PROD-<uuid>)."}}},"required":["productIds"],"additionalProperties":false}}},"paths":{"/v1/product-categories/{productCategoryId}/products":{"put":{"summary":"Update Product Category Products","tags":["Product Categories"],"description":"Replace the full list of products in the category. Products omitted from the list are removed; products that are not yours are ignored.\n\nRequires the `productCategories:write` scope.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesDetail"}}}},"400":{"description":"Invalid request data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"The API key lacks the required scope (`scope_denied`), or the operation is not permitted for this account (`operation_not_permitted`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}}},"parameters":[{"name":"productCategoryId","in":"path","required":true,"schema":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesProductsRequest"}}}}}}}}
```

## Remove Product Category Products

> Remove a subset of products from the category by id. Ids that are not connected are ignored.\
> \
> Requires the \`productCategories:write\` scope.

```json
{"openapi":"3.1.0","info":{"title":"Mimeeq External API","version":"1.0.0"},"tags":[{"name":"Product Categories","description":"Hierarchical product categories (localized name, code, connected products)."}],"servers":[{"url":"https://admin.mimeeqapi.com","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key sent as a bearer token (mk_live_… / mk_test_…)."}},"schemas":{"ProductCategoriesDetail":{"type":"object","properties":{"data":{"type":"object","properties":{"productCategoryId":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."},"name":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}]},{"type":"null"}],"description":"Translated text when `lang` is set, otherwise the full `{ language: text }` map. Languages with no text are omitted, and a field with no text at all is null."},"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE","INACTIVE"]},{"type":"null"}]},"parentProductCategoryId":{"anyOf":[{"type":"string"},{"type":"null"}]},"numberOfProducts":{"type":"number"},"products":{"type":"array","items":{"type":"string"}}},"required":["productCategoryId","name","code","status","parentProductCategoryId","numberOfProducts","products"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"PublicError":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"description":"Optional error-specific details (e.g. per-field validation reasons)."}}},"ProductCategoriesProductsRemoveRequest":{"type":"object","properties":{"productIds":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^PROD-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product identifier (PROD-<uuid>)."}}},"required":["productIds"],"additionalProperties":false}}},"paths":{"/v1/product-categories/{productCategoryId}/products:remove":{"post":{"summary":"Remove Product Category Products","tags":["Product Categories"],"description":"Remove a subset of products from the category by id. Ids that are not connected are ignored.\n\nRequires the `productCategories:write` scope.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesDetail"}}}},"400":{"description":"Invalid request data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"403":{"description":"The API key lacks the required scope (`scope_denied`), or the operation is not permitted for this account (`operation_not_permitted`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicError"}}}}},"parameters":[{"name":"productCategoryId","in":"path","required":true,"schema":{"type":"string","pattern":"^PC-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"Product category identifier (PC-<uuid>)."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCategoriesProductsRemoveRequest"}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.mimeeq.com/developers/product-categories.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
