---
title: "Get aggregated Product / Variant details for a bulk selection"
method: POST
path: "/products/aggregatedDetails"
tags: ["Products", "PCS-11332"]
---

# Get aggregated Product / Variant details for a bulk selection

`POST /products/aggregatedDetails`

## Request

- Base URL: `https://api.pics.io`
- URL: `https://api.pics.io/products/aggregatedDetails`
- Auth: HTTP bearer

Accepts either explicit record ids (`items`, up to 50000) or the current products search (`query`). Ids are loaded from the database in chunks with a field projection. Select All must send `query` (the same body as POST /products/search). Optional `recordState` (`draft` or `published`) forces that catalog layer: Has published reads each record's live snapshot and Has draft reads the working copy, even when stored listingStatus values differ. Without `recordState`, the layer is inferred from the documents and mixed Draft/Published statuses are rejected. Same values become state=common; differing or partially empty values become state=multiple; all-empty becomes state=empty. Missing/deleted ids are listed in selection.missing. Incompatible mixed contexts are rejected. Published aggregation uses each record's live snapshot and is read-only.

## Request body

- object
  - `type` 'master' | 'channel', required
  - `items` string[]
  - `query` object
  - `recordState` 'draft' | 'published'

## Response `200`

Ok

- object
  - `context` object
  - `selection` object
  - `product` object
  - `variant` object
  - `editable` boolean
  - `productsHaveVariants` boolean

## Other responses

- `400`: Selection contains records from incompatible contexts
- `404`: Product not found
- `409`: Can not get aggregated product details

---

[API](https://skmtc.dev/pics/apis/pics-io-rest-api.md) - [All operations](https://skmtc.dev/pics/apis/pics-io-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/pics/apis/pics-io-rest-api/revisions/ea41cba5ac37?raw)
