---
title: "Batched version of DeleteProductById. Deletes multiple templates by Guid id in a single request so callers don't have to fire one HTTP request per id (which was hitting rate limits when done via Promise.all on the client). Reuses the same per-id deletion logic (relation checks, soft/force delete, audit log) as the single-id endpoint. Invalid or missing ids are silently skipped instead of failing the whole batch."
method: POST
path: "/api/Product/DeleteProducts/ByIds"
tags: ["Templates"]
---

# Batched version of DeleteProductById. Deletes multiple templates by Guid id in a single request so callers don't have to fire one HTTP request per id (which was hitting rate limits when done via Promise.all on the client). Reuses the same per-id deletion logic (relation checks, soft/force delete, audit log) as the single-id endpoint. Invalid or missing ids are silently skipped instead of failing the whole batch.

`POST /api/Product/DeleteProducts/ByIds`

## Request body

- DeleteProductsByIdsDTO
  - `Ids` string[], nullable
  - `ForceDelete` boolean

## Response `200`

---

[API](https://skmtc.dev/customily/apis/customily-design-studio-api.md) · [All operations](https://skmtc.dev/customily/apis/customily-design-studio-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/customily/customily-design-studio-api/revisions/01547a5f31d7/schema)
