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"const accessToken = "YOUR-ACCESS-TOKEN";const response = await fetch("https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/products",{method: "GET",headers: {Authorization: `Bearer ${accessToken}`,},});if (!response.ok) {throw new Error(`HTTP ${response.status}: ${await response.text()}`);}const data = await response.json();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"const accessToken = "YOUR-ACCESS-TOKEN";const response = await fetch("https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/products",{method: "POST",headers: {"Content-Type": "application/json",Authorization: `Bearer ${accessToken}`,},body: JSON.stringify({"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}),});if (!response.ok) {throw new Error(`HTTP ${response.status}: ${await response.text()}`);}const data = await response.json();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"const accessToken = "YOUR-ACCESS-TOKEN";const response = await fetch("https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products",{method: "POST",headers: {"Content-Type": "application/json",Authorization: `Bearer ${accessToken}`,},body: JSON.stringify({"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"}}}]}]}),});if (!response.ok) {throw new Error(`HTTP ${response.status}: ${await response.text()}`);}const data = await response.json();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"const accessToken = "YOUR-ACCESS-TOKEN";const response = await fetch("https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products",{method: "GET",headers: {Authorization: `Bearer ${accessToken}`,},});if (!response.ok) {throw new Error(`HTTP ${response.status}: ${await response.text()}`);}const data = await response.json();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"const accessToken = "YOUR-ACCESS-TOKEN";const response = await fetch("https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products/{productId}",{method: "GET",headers: {Authorization: `Bearer ${accessToken}`,},});if (!response.ok) {throw new Error(`HTTP ${response.status}: ${await response.text()}`);}const data = await response.json();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"const accessToken = "YOUR-ACCESS-TOKEN";const response = await fetch("https://api.trustpilot.com/v1/private/business-units/{businessUnitId}/catalog/products/{productId}",{method: "DELETE",headers: {Authorization: `Bearer ${accessToken}`,},});if (!response.ok) {throw new Error(`HTTP ${response.status}: ${await response.text()}`);}const data = await response.json();Response
{"productId": "507f1f77bcf86cd799439011","totalVariantsDeleted": 3,"details": {"deletedVariantIds": ["5d5e8e605bb3de000172a1b2"]}} -