---
title: "Get Product Reviews"
method: GET
path: "/products/{product_id}/reviews"
tags: ["Catalog"]
---

# Get Product Reviews

`GET /products/{product_id}/reviews`

## Request

- Base URL: `https://vesremont.com/api/v1`
- URL: `https://vesremont.com/api/v1/products/{product_id}/reviews`
- Auth: none required

Read customer feedback for a product selected with get_product, not its specifications. Returns only moderated, published review text, ratings and rating_summary; no pending reviews or review submission. Use page or cursor, never both; an empty list means no published reviews, not a zero-star rating. Public; no OAuth required. Read-only. HEAD is also supported and returns the same headers without a body.

## Path parameters

- `product_id` integer, required: Internal numeric Vesremont product ID returned by catalog search or a product response, not the SKU/article or a basket item ID.

## Query parameters

- `sort` 'date_desc' | 'date_asc' | 'rating_desc' | 'rating_asc': Published review order: newest first by default; choose date_asc for oldest first or rating_desc/rating_asc for highest/lowest ratings first.
- `page` integer: One-based result page, default 1. Do not combine with cursor; the existing offset window still applies.
- `per_page` integer: Maximum results per page, default 20. Keep the same value when following next_cursor.
- `cursor` string: Opaque next_cursor from the previous response. Keep the same filters/sort; do not combine with page. Expires after 15 minutes. Existing backend windows apply; not a frozen snapshot.

## Response `200`

Successful operation.

- object
  - `items` object[], required
    - `id` integer, required
    - `product_id` integer, required
    - `rating` integer, required
    - `author_name` string, required
    - `pros` string, required
    - `cons` string, required
    - `text` string, required
    - `published_at` string, date-time, nullable, required
  - `pagination` object, required
    - `page` integer, required
    - `per_page` integer, required
    - `total_items` integer, required
    - `total_pages` integer, required
    - `has_next` boolean, required
    - `has_prev` boolean, required
    - `next_cursor` string, nullable
  - `rating_summary` object, required
    - `average_rating` number, nullable, required

## Other responses

- `400`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `403`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `404`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `405`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `406`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `409`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `413`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `414`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `415`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `422`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `429`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `431`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `500`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.
- `503`: Structured failure. The code is stable; do not retry uncertain order writes with a new key.

---

[API](https://skmtc.dev/vesremont/apis/vesremont-public-api.md) · [All operations](https://skmtc.dev/vesremont/apis/vesremont-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/vesremont/apis/vesremont-public-api/revisions/3bfec100b67d?raw)
