Skip to content

Private Products API

  • Get products

    Deprecated. This endpoint will be removed on 2027-06-01. Use GET /v1/private/business-units/{businessUnitId}/catalog/products instead, which returns products with their variants nested inside them.

    HTTP method: GET

    Authentication: Business user OAuth Token

    URL: https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/products

    Parameters

    • skus, Optional array

      Optional sku filter for products.

      Example: ?skus=x-123,y-456,z-789


    • groupId, Optional string

      Optional group id filter for products. When sku filter is given, the group id filter is ignored.

      Example: ?groupId=XYZ


    • page, Optional integer

      Page number for pagination.

      Example: ?page=1


    • perPage, Optional integer

      The number of products to retrieve per page.

      Example: ?perPage=100


    • locale, Optional string

      The language in which the attributes attached to the products, if any, are returned.

      Example: ?locale=en-US


    • businessUnitId, Required string

      The BusinessUnitId that owns the products.

      Example: .../v1/private/business-units/5408d4b9065464000578ca81/products


    curl -X GET "https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/products" \
    -H "Authorization: Bearer YOUR-ACCESS-TOKEN"

    Response

    {
    "products": [
    {
    "id": "507f191e810c19729de860ea",
    "sku": "x-123",
    "googleMerchantCenterProductId": "Product_DK_1007653571_2874605123",
    "title": "Toy car",
    "link": "http://myshop.com/products/toy-car",
    "imageLink": "http://myshop.com/products/images/toy-car.jpg",
    "processedImages": [
    {
    "type": "100pxWide",
    "url": "https://product-reviews-images.trustpilot.com/5837640412df3f0aabf9989a_100pxWide.png"
    }
    ],
    "businessUnitId": "507f191e810c19729de860ea",
    "price": "99.95",
    "gtin": "3200000003774",
    "mpn": "HSC0424PP",
    "brand": "ToyProducer",
    "currency": "EUR",
    "description": "A metal toy car",
    "productCategory": {
    "id": "507f191e810c19729de860ea",
    "name": "Clothing"
    },
    "attributes": [
    {
    "id": "attributes-default-comfort",
    "name": "Comfort",
    "type": "range_1to5",
    "options": [
    null
    ]
    }
    ],
    "groupId": "123456",
    "variationAttributes": {
    "color": "blue",
    "pattern": null,
    "material": "suede",
    "ageGroup": "adult",
    "gender": "female",
    "size": "XS",
    "customVariationAttributes": [
    {
    "key": "weight",
    "value": "1kg"
    }
    ]
    }
    }
    ],
    "isLastPage": false
    }
  • Batch upsert products

    Deprecated. This endpoint will be removed on 2027-06-01. Use POST /v1/private/business-units/{businessUnitId}/catalog/products instead, which creates and updates products together with their variants.

    HTTP method: POST

    Authentication: Business user OAuth Token

    URL: https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/products

    Parameters

    • businessUnitId, Required string

      The ID of the business unit.

      Example: .../v1/private/business-units/5408d4b9065464000578ca81/products


    curl -X POST "https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/products" \
    -H "Content-Type: application/json" \
    -d '{
    "products": [
    {
    "sku": "example",
    "title": "example",
    "link": "example",
    "imageLink": "example",
    "gtin": "example",
    "mpn": "example",
    "brand": "example",
    "price": "example",
    "currency": "example",
    "description": "example",
    "googleMerchantCenterProductId": "example",
    "productCategoryGoogleId": "example",
    "groupId": "example",
    "variationAttributes": {
    "color": "example",
    "pattern": "example",
    "material": "example",
    "ageGroup": "example",
    "gender": "example",
    "size": "example",
    "customVariationAttributes": [
    {
    "key": "example",
    "value": "example"
    }
    ]
    }
    }
    ],
    "skuSameAsGoogleMerchantCenterProductId": true
    }' \
    -H "Authorization: Bearer YOUR-ACCESS-TOKEN"

    Request Body

    {
    "products": [
    {
    "sku": null,
    "title": null,
    "link": null,
    "imageLink": null,
    "gtin": null,
    "mpn": null,
    "brand": null,
    "price": null,
    "currency": null,
    "description": null,
    "googleMerchantCenterProductId": null,
    "productCategoryGoogleId": null,
    "groupId": null,
    "variationAttributes": {
    "color": null,
    "pattern": null,
    "material": null,
    "ageGroup": null,
    "gender": null,
    "size": null,
    "customVariationAttributes": [
    {
    "key": null,
    "value": null
    }
    ]
    }
    }
    ],
    "skuSameAsGoogleMerchantCenterProductId": null
    }

    Response

    {
    "products": [
    {
    "id": "507f191e810c19729de860ea",
    "businessUnitId": "507f191e810c19729de860ea",
    "sku": "Prod123",
    "title": "Toy car",
    "googleMerchantCenterProductId": "Product_DK_1007653571_2874605123",
    "imageLink": "http://myshop.com/products/images/toy-car.jpg",
    "link": "http://myshop.com/products/toy-car",
    "description": "A metal toy car",
    "price": 99.95,
    "currency": "EUR",
    "gtin": 3200000003774,
    "mpn": "HSC0424PP",
    "brand": "ToyProducer",
    "processedImages": [
    {
    "type": "100pxWide",
    "url": "https://product-reviews-images.trustpilot.com/5837640412df3f0aabf9989a_100pxWide.png"
    }
    ],
    "categoryId": "507f191e810c19729de860ea",
    "groupId": 123456,
    "variationAttributes": {
    "color": "blue",
    "pattern": "striped",
    "material": "suede",
    "ageGroup": "adult",
    "gender": "female",
    "size": "XS",
    "customVariationAttributes": [
    {
    "key": "weight",
    "value": "1kg"
    }
    ]
    }
    }
    ]
    }
  • Batch upsert catalog products with variants

    Create and update products and their variants in a single request. Each product carries its variants nested inside it. A variant belongs to one parent product. When a request places a variant under a different product, the allowVariantTransfers flag decides the outcome: false (the default) rejects it with 400, true moves the variant and deletes any product left empty. The request is treated as that product's intended state, so send every variant it should end up with — any left out are moved away. Use it for a deliberate restructuring, not for an incremental update. Setting isDryRun to true computes the outcome and persists nothing. The two flags are independent. With allowVariantTransfers false, a variant/product conflict returns 400 whether or not the request is a dry run. With allowVariantTransfers true, variants are transferred and emptied products deleted, and a dry run previews those transfers and deletions without writing them. Migrating from the flat /products endpoints: group the SKUs that belong together, preview with both flags true, apply with isDryRun false, then set allowVariantTransfers back to false. The groupId field is not carried over — grouping is the variants array, stated explicitly on every request.

    HTTP method: POST

    Authentication: Business user OAuth Token

    URL: https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products

    Parameters

    • businessUnitId, Required string

      The ID of the business unit.

      Example: .../v1/private/business-units/5408d4b9065464000578ca81/catalog/products


    curl -X POST "https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products" \
    -H "Content-Type: application/json" \
    -d '{
    "allowVariantTransfers": true,
    "isDryRun": true,
    "products": [
    {
    "productId": "507f1f77bcf86cd799439011",
    "brand": "Adidas",
    "customerProductId": "ABC-123",
    "categoryId": "5d5e8e605bb3de000172a1b3",
    "content": {
    "default": {
    "title": "Adidas Classic T-Shirt",
    "description": "A comfortable cotton t-shirt available in multiple colours."
    }
    },
    "variants": [
    {
    "variantId": "5d5e8e605bb3de000172a1b2",
    "sku": "ADI-TEE-BLU-L",
    "imageLink": "https://example.com/images/adi-tee-blu-l.jpg",
    "link": "https://example.com/products/adi-tee-blu-l",
    "gtin": "3200000003774",
    "mpn": "HSC0424PP",
    "additionalImageLinks": [
    "https://example.com/images/adi-tee-blu-l-back.jpg"
    ],
    "videoLink": "https://example.com/videos/adi-tee-blu-l.mp4",
    "content": {
    "default": {
    "attributes": {
    "color": "Blue",
    "size": "L"
    }
    }
    },
    "markets": {
    "default": {
    "price": 19.99,
    "currency": "GBP"
    }
    }
    }
    ]
    }
    ]
    }' \
    -H "Authorization: Bearer YOUR-ACCESS-TOKEN"

    Request Body

    {
    "allowVariantTransfers": false,
    "isDryRun": false,
    "products": [
    {
    "productId": "507f1f77bcf86cd799439011",
    "brand": "Adidas",
    "customerProductId": "ABC-123",
    "categoryId": "5d5e8e605bb3de000172a1b3",
    "content": {
    "default": {
    "title": "Adidas Classic T-Shirt",
    "description": "A comfortable cotton t-shirt available in multiple colours."
    }
    },
    "variants": [
    {
    "variantId": "5d5e8e605bb3de000172a1b2",
    "sku": "ADI-TEE-BLU-L",
    "imageLink": "https://example.com/images/adi-tee-blu-l.jpg",
    "link": "https://example.com/products/adi-tee-blu-l",
    "gtin": "3200000003774",
    "mpn": "HSC0424PP",
    "additionalImageLinks": [
    "https://example.com/images/adi-tee-blu-l-back.jpg",
    "https://example.com/images/adi-tee-blu-l-back.jpg"
    ],
    "videoLink": "https://example.com/videos/adi-tee-blu-l.mp4",
    "content": {
    "default": {
    "attributes": {
    "color": "Blue",
    "size": "L"
    }
    }
    },
    "markets": {
    "default": {
    "price": 19.99,
    "currency": "GBP"
    }
    }
    }
    ]
    }
    ]
    }

    Response

    {
    "products": [
    {
    "productId": "507f1f77bcf86cd799439011",
    "brand": "Adidas",
    "customerProductId": "ABC-123",
    "categoryId": "5d5e8e605bb3de000172a1b3",
    "content": {
    "default": {
    "title": "Adidas Classic T-Shirt",
    "description": "A comfortable t-shirt"
    }
    },
    "variants": [
    {
    "variantId": "5d5e8e605bb3de000172a1b2",
    "sku": "ADI-TEE-BLU-L",
    "imageLink": "https://example.com/images/adi-tee-blu-l.jpg",
    "link": "https://example.com/products/adi-tee-blu-l",
    "gtin": "3200000003774",
    "mpn": "HSC0424PP",
    "additionalImageLinks": [
    "https://example.com/images/adi-tee-blu-l-back.jpg"
    ],
    "videoLink": "https://example.com/videos/adi-tee-blu-l.mp4",
    "content": {
    "default": {
    "attributes": {
    "color": "Blue",
    "size": "L"
    }
    }
    },
    "markets": {
    "default": {
    "price": 19.99,
    "currency": "GBP"
    }
    }
    }
    ]
    }
    ],
    "summary": {
    "productsCreated": 1,
    "productsUpdated": 0,
    "productsDeleted": 1,
    "variantsCreated": 2,
    "variantsUpdated": 0,
    "details": {
    "variantTransfers": [
    {
    "variantId": "5d5e8e605bb3de000172a1b2",
    "fromProductId": "5d5e8e605bb3de000172a1b3",
    "toProductId": "5d5e8e605bb3de000172a1b4",
    "isProductNew": false
    }
    ],
    "deletedProducts": [
    "5d5e8e605bb3de000172a1b3"
    ],
    "changes": {
    "products": [
    {
    "productId": "5d5e8e605bb3de000172a1b3",
    "change": "updated"
    }
    ],
    "variants": [
    {
    "variantId": "5d5e8e605bb3de000172a1b2",
    "productId": "5d5e8e605bb3de000172a1b3",
    "sku": "RS-42",
    "change": "updated"
    }
    ]
    }
    }
    }
    }
  • List catalog products

    HTTP method: GET

    Authentication: Business user OAuth Token

    URL: https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products

    Parameters

    • page, Optional integer

      Page number for pagination. Requesting a page past the end of the result set returns `{ products: [], isLastPage: true }` rather than a 404 — same shape as any other empty result.

      Example: ?page=1


    • perPage, Optional integer

      Number of products to retrieve per page. Defaults to 100; capped at 1000.

      Example: ?perPage=50


    • locale, Optional string

      Locale to resolve for product and variant content. `default` or a lowercase ISO 639-1 code (handler validates against the curated set). Response's `content.metadata.locale` reports which key was picked.

      Example: ?locale=en


    • market, Optional string

      Market to resolve for variant pricing. `default` or an uppercase ISO 3166-1 alpha-2 code (handler validates against the curated set). Response's `market.metadata.market` reports which key was picked.

      Example: ?market=GB


    • returnAllLocales, Optional boolean

      When `true`, the product `content` and each variant `content` map contains every stored locale instead of a single entry. Only keys that are actually stored on the document are present in the map. The `locale` param is ignored for content resolution, but still applies to title search (`query`) and `sortBy=title`.

      Example: ?returnAllLocales=true


    • returnAllMarkets, Optional boolean

      When `true`, each variant `markets` map contains every stored market instead of a single entry. Only keys that are actually stored on the variant are present in the map. The `market` param is ignored.

      Example: ?returnAllMarkets=true


    • skus, Optional array

      Filter to products that have at least one variant with a matching SKU. Pagination is **per-product, not per-SKU** — multiple SKUs that live on the same product yield a single result. Also trims the variants array on each returned product to only the matching SKUs. Accepts repeated params or a comma-separated value. Max 1000 SKUs, each ≤ 100 chars after normalisation. Combined with `variantIds`, a variant matching either is kept (OR), not only one matching both.

      Example: ?skus=ADI-TEE-BLU-L,ADI-TEE-RED-M


    • customerProductIds, Optional array

      Filter to products whose `customerProductId` is one of these values. Case-sensitive exact match. The literal value `null` is a sentinel that matches products with no `customerProductId` set. Accepts repeated params or a comma-separated value. Max 1000 ids, each ≤ 100 chars.

      Example: ?customerProductIds=ABC-1,ABC-2


    • productIds, Optional array

      Filter to specific product IDs. Composes (AND) with every other filter (`query`, `productCategoryId`, `isCategorized`, `hasReviews`, `productIdsExclusion`, `customerProductIds`, `excludeMatchingTitles`, `latestReviewAfter`, `skus`, `variantIds`) — the result is the intersection, so only products in this list that also satisfy the other filters are returned. `skus` and `variantIds` additionally trim the variants nested in each returned product. Accepts repeated params or a comma-separated value; invalid ObjectIds return 400. Max 1000 ids.

      Example: ?productIds=507f1f77bcf86cd799439011,507f1f77bcf86cd799439012


    • variantIds, Optional array

      Filter to products that own at least one of these variant IDs. Composes (AND) with every other filter, same as `productIds` — the result is the intersection. Also trims the variants array on each returned product to only the matching variant IDs, same as `skus`. Accepts repeated params or a comma-separated value; invalid ObjectIds return 400. Max 1000 ids. Combined with `skus`, a variant matching either is kept (OR), not only one matching both.

      Example: ?variantIds=5d5e8e605bb3de000172a1b2,5d5e8e605bb3de000172a1b3


    • productIdsExclusion, Optional array

      Product IDs to exclude from the results. Accepts repeated params or a comma-separated value; invalid ObjectIds return 400. Max 1000 ids.

      Example: ?productIdsExclusion=507f1f77bcf86cd799439011,507f1f77bcf86cd799439012


    • query, Optional string

      Case-insensitive prefix match against variant `sku` and title. Title is matched in the resolved locale (with fallback to `default`). Example: `query=Adi` matches "Adidas" but not "MyAdi".

      Example: ?query=Adidas


    • productCategoryId, Optional string

      Filter to products in this category. Mutually exclusive with `isCategorized` — supplying both returns 400.

      Example: ?productCategoryId=5408d4b9065464000578ca81


    • isCategorized, Optional boolean

      Filter by whether products have a category set. Mutually exclusive with `productCategoryId` — supplying both returns 400.

      Example: ?isCategorized=true


    • hasReviews, Optional boolean

      Filter by whether a product has reviews, using the product-level review-count rollup (the sum of its variants' counts). true → product totalReviewsCount > 0 (has a reviewed variant). false → product totalReviewsCount is 0 (no variant has reviews).

      Example: ?hasReviews=true


    • sortBy, Optional string

      Field to sort by. `title` sorts by the resolved title (requested locale, falling back to `default`) — matches what callers see in the response. `brand` sorts case-insensitively; null brands sort low in asc, high in desc. `averageStarRating` and `totalReviewsCount` sort by the product-level review aggregates in standard numeric order; products with no reviews have a value of 0, so they sort first in asc and last in desc.

      Example: ?sortBy=createdAt


    • sortOrder, Optional string

      Sort order.

      Example: ?sortOrder=desc


    • sortVariantsBy, Optional string

      Field to sort variants by within each product. Independent of `sortBy`, which orders products. `reviewCount` orders each product's variants by the variant-level review count; `createdAt` orders them by when the variant was created (`asc` = oldest first, `desc` = newest first). Variants that tie on the chosen field fall back to `_id` ascending order.

      Example: ?sortVariantsBy=reviewCount


    • sortVariantsOrder, Optional string

      Sort order for `sortVariantsBy`. Defaults to `desc` (most reviewed variant, or newest-created variant, first). Ignored when `sortVariantsBy` is not supplied.

      Example: ?sortVariantsOrder=desc


    • includeMatchingProductCount, Optional boolean

      Whether to compute `matchingProductCount`. Defaults to true. Set to false to skip the count query entirely (e.g. infinite-scroll callers that don't render a total) — cheaper than the count query timing out, which already returns null but still pays for the attempt.

      Example: ?includeMatchingProductCount={includeMatchingProductCount}


    • businessUnitId, Required string

      The BusinessUnitId that owns the products.

      Example: .../v1/private/business-units/5408d4b9065464000578ca81/catalog/products


    curl -X GET "https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products" \
    -H "Authorization: Bearer YOUR-ACCESS-TOKEN"

    Response

    {
    "products": [
    {
    "productId": "507f1f77bcf86cd799439011",
    "businessUnitId": "5408d4b9065464000578ca81",
    "brand": "Adidas",
    "categoryId": "5d5e8e605bb3de000172a1b3",
    "customerProductId": "ABC-123",
    "content": {
    "default": {
    "title": "Adidas Classic T-Shirt",
    "description": "A comfortable cotton t-shirt."
    }
    },
    "averageStarRating": 4.5,
    "totalReviewsCount": 42,
    "variantCount": 1,
    "totalVariantCount": 3,
    "variants": [
    {
    "variantId": "5d5e8e605bb3de000172a1b2",
    "sku": "ADI-TEE-BLU-L",
    "imageLink": "https://example.com/blue.jpg",
    "link": "https://example.com/p/blue",
    "content": {
    "default": {
    "attributes": {
    "color": "Blue",
    "size": "L"
    }
    }
    },
    "markets": {
    "default": {
    "price": 19.99,
    "currency": "GBP"
    }
    },
    "metadata": {
    "createdAt": "2026-01-15T09:30:00.000Z",
    "processedImages": [
    {
    "type": "100pxWide",
    "url": "https://product-reviews-images.trustpilot.com/5837640412df3f0aabf9989a_100pxWide.png"
    }
    ]
    }
    }
    ],
    "metadata": {
    "createdAt": "2026-01-15T09:30:00.000Z"
    }
    }
    ],
    "isLastPage": true,
    "matchingProductCount": 134
    }
  • Get a catalog product with its variants

    Get a single product by ID with all of its variants nested inside. The product must belong to the business unit in the path; cross-BU and not-found both return 404 (existence is not leaked cross-BU). Content and pricing are always returned as maps keyed by the resolved locale (resp. market). In single-mode the map has a single entry — the requested locale when stored, or `default` when the requested locale falls back. When `returnAllLocales=true` (resp. `returnAllMarkets=true`) the map contains every stored entry. The map can be empty.

    HTTP method: GET

    Authentication: Business user OAuth Token

    URL: https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products/{productId}

    Parameters

    • locale, Optional string

      Locale to resolve product and variant content. Either `default` or a lowercase ISO 639-1 code. When the requested locale is not stored on the document, the response falls back to `default`. The resolved locale is encoded as the key in the `content` map. Ignored when `returnAllLocales=true`.

      Example: ?locale=en


    • market, Optional string

      Market to resolve variant pricing. Either `default` or an uppercase ISO 3166-1 alpha-2 code. When the requested market is not stored, the response falls back to `default`. The resolved market is encoded as the key in the variant `market` map. Ignored when `returnAllMarkets=true`.

      Example: ?market=GB


    • returnAllLocales, Optional boolean

      When `true`, the product `content` and each variant `content` map contains every stored locale instead of a single entry. Only keys that are actually stored on the document are present in the map. The `locale` query param is ignored.

      Example: ?returnAllLocales=true


    • returnAllMarkets, Optional boolean

      When `true`, each variant `market` map contains every stored market instead of a single entry. Only keys that are actually stored on the variant are present in the map. The `market` query param is ignored.

      Example: ?returnAllMarkets=true


    • sortVariantsBy, Optional string

      Field to sort variants by. `reviewCount` orders variants by the variant-level review count; `createdAt` orders them by when the variant was created (`asc` = oldest first, `desc` = newest first). Variants that tie on the chosen field fall back to `_id` ascending order.

      Example: ?sortVariantsBy=reviewCount


    • sortVariantsOrder, Optional string

      Sort order for `sortVariantsBy`. Defaults to `desc` (most reviewed variant, or newest-created variant, first). Only meaningful when `sortVariantsBy` is supplied.

      Example: ?sortVariantsOrder=desc


    • businessUnitId, Required string

      The ID of the business unit that owns the product.

      Example: .../v1/private/business-units/5408d4b9065464000578ca81/catalog/products/{productId}


    • productId, Required string

      The ID of the product to retrieve.

      Example: .../v1/private/business-units/{businessUnitId}/catalog/products/507f1f77bcf86cd799439011


    curl -X GET "https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products/{productId}" \
    -H "Authorization: Bearer YOUR-ACCESS-TOKEN"

    Response

    {
    "productId": "507f1f77bcf86cd799439011",
    "businessUnitId": "5408d4b9065464000578ca81",
    "brand": "Adidas",
    "categoryId": "000000000000000000000212",
    "customerProductId": "ABC-123",
    "content": {
    "default": {
    "title": "Adidas Classic T-Shirt",
    "description": "A comfortable cotton t-shirt."
    }
    },
    "metadata": {
    "createdAt": "2026-01-15T09:30:00.000Z"
    },
    "variants": [
    {
    "variantId": "5d5e8e605bb3de000172a1b2",
    "sku": "ADI-TEE-BLU-L",
    "imageLink": "https://example.com/images/blue-l.jpg",
    "link": "https://example.com/products/blue-l",
    "gtin": "3200000003774",
    "mpn": "HSC0424PP",
    "additionalImageLinks": [
    "https://example.com/images/blue-l-back.jpg"
    ],
    "videoLink": "https://example.com/videos/blue-l.mp4",
    "content": {
    "default": {
    "attributes": {
    "color": "Blue",
    "size": "L"
    }
    }
    },
    "market": {
    "default": {
    "price": 19.99,
    "currency": "GBP"
    }
    },
    "metadata": {
    "createdAt": "2026-01-15T09:30:00.000Z",
    "processedImages": [
    {
    "type": "100pxWide",
    "url": "https://product-reviews-images.trustpilot.com/5837640412df3f0aabf9989a_100pxWide.png"
    }
    ]
    }
    }
    ]
    }
  • Delete a catalog product and its variants

    Delete a product and cascade-delete all of its variants. The product must belong to the business unit in the path; cross-BU and not-found both return 404 (existence is not leaked cross-BU). Atomicity: the variants and the product are removed inside a single transaction, so a partial cascade cannot be observed. Returns 409 if any variant under the product has recorded reviews — the entire cascade is rejected in that case.

    HTTP method: DELETE

    Authentication: Business user OAuth Token

    URL: https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products/{productId}

    Parameters

    • businessUnitId, Required string

      The ID of the business unit that owns the product.

      Example: .../v1/private/business-units/5408d4b9065464000578ca81/catalog/products/{productId}


    • productId, Required string

      The ID of the product to delete.

      Example: .../v1/private/business-units/{businessUnitId}/catalog/products/507f1f77bcf86cd799439011


    curl -X DELETE "https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products/{productId}" \
    -H "Authorization: Bearer YOUR-ACCESS-TOKEN"

    Response

    {
    "productId": "507f1f77bcf86cd799439011",
    "totalVariantsDeleted": 3,
    "details": {
    "deletedVariantIds": [
    "5d5e8e605bb3de000172a1b2"
    ]
    }
    }