> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tailoredd.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get product reviews

> Retrieve approved customer reviews for a product with pagination, sort, and sentiment filters.

`GET {BASE_URL}/products/{productId}/reviews`

## Query parameters

<ParamField query="limit" type="integer">Default `20`.</ParamField>
<ParamField query="sort" type="string">`newest` · `oldest` · `highest` · `lowest` · `helpful`</ParamField>
<ParamField query="status" type="string">`approved` (default). Other statuses require admin auth. See [All reviews (admin)](/api-reference/reviews/admin-list).</ParamField>
<ParamField query="sentiment" type="string">`positive` · `neutral` · `negative` — Growth/Enterprise only.</ParamField>
<ParamField query="page" type="integer">Page number.</ParamField>

## Response

```json theme={null}
{
  "reviews": [
    {
      "id": "rev_abc123",
      "rating": 5,
      "title": "Great product!",
      "text": "Really happy with this.",
      "authorName": "Sarah M.",
      "verified": true,
      "wouldRecommend": true,
      "pros": "Fast shipping, great quality",
      "cons": "Packaging could be better",
      "helpful": 8,
      "notHelpful": 0,
      "attributes": { "fit": "true_to_size", "quality": "excellent" },
      "deliveryExperience": null,
      "createdAt": "2026-01-10T08:22:11.000Z",
      "mediaUrls": [],
      "mediaAssets": [],
      "merchantReply": null
    }
  ],
  "totalReviews": 148,
  "averageRating": 4.7,
  "ratingDistribution": { "1": 2, "2": 3, "3": 10, "4": 41, "5": 92 },
  "lastVisible": "rev_abc123",
  "hasMore": true
}
```

<Note>`attributes` is always present on each review. Reviews without custom attributes return `{}`.</Note>


## OpenAPI

````yaml openapi.yaml GET /products/{productId}/reviews
openapi: 3.0.0
info:
  title: ReviewFlow API
  description: >-
    ReviewFlow is a fully managed ratings, reviews, and UGC platform by
    Tailoredd. This API covers batch reviews, product reviews, Q&A, media
    management, webhooks, tokens, analytics, incentives, and CSV export
    endpoints.
  version: 2.3.0
servers:
  - url: https://cdn.tailoredd.com/apiV2
    description: Production Gen 2 API front door
security: []
tags:
  - name: Batch Reviews
    description: Fetch rating summaries for multiple products in a single request.
  - name: Webhooks
    description: Receive post-purchase order events to trigger review request flows.
  - name: Tokens
    description: Validate and revoke review request tokens sent to customers.
  - name: CSV Export
    description: Asynchronous export of reviews or questions as CSV files.
  - name: Health
    description: Service availability and version check.
  - name: Cloudinary Media
    description: Upload, retrieve, and delete media assets attached to reviews.
  - name: Reviews & Ratings
    description: Create, read, moderate, and interact with product reviews.
  - name: Featured Reviews
    description: Feature or unfeature reviews for prominent display.
  - name: Questions & Answers
    description: Product Q&A with moderation and merchant answers.
  - name: Admin Dashboard
    description: Admin analytics and dashboard aggregation endpoints.
  - name: Custom Attributes (Growth+/Enterprise)
    description: Manage custom review form attributes like fit, quality, etc.
  - name: Incentive Claims
    description: Track and fulfill review incentive coupon claims.
  - name: Sentiment Analysis
    description: Filter reviews by NLP-derived sentiment labels.
  - name: Google Shopping Feed
    description: Generate and check eligibility for Google product reviews XML feed.
paths:
  /products/{productId}/reviews:
    get:
      tags:
        - Reviews & Ratings
      summary: Get Product Reviews
      description: >-
        Get reviews for a specific product. Public endpoint - no authentication
        required.
      operationId: getProductReviews
      parameters:
        - name: X-Merchant-Id
          in: header
          schema:
            type: string
          example: your-merchant-id
        - name: Origin
          in: header
          schema:
            type: string
          example: https://your-store.com
        - name: merchantId
          in: query
          schema:
            type: string
          example: your-merchant-id
        - name: limit
          in: query
          schema:
            type: integer
          description: Number of reviews to return
          example: '20'
        - name: sort
          in: query
          schema:
            type: string
          description: 'Sort order: newest, oldest, highest, lowest, helpful'
          example: newest
        - name: status
          in: query
          schema:
            type: string
          description: 'Filter by status: approved, pending, rejected, flagged, all'
          example: approved
        - name: page
          in: query
          schema:
            type: integer
          description: Page number for pagination
          example: '1'
        - name: productId
          in: path
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductReviewsResponse'
        '400':
          description: Bad Request / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ProductReviewsResponse:
      type: object
      required:
        - reviews
        - totalReviews
        - averageRating
        - ratingDistribution
        - hasMore
      properties:
        reviews:
          type: array
          items:
            $ref: '#/components/schemas/ProductReview'
        totalReviews:
          type: integer
          example: 148
        averageRating:
          type: number
          example: 4.7
        ratingDistribution:
          type: object
          additionalProperties:
            type: integer
          example:
            '1': 2
            '2': 3
            '3': 10
            '4': 41
            '5': 92
        lastVisible:
          type: string
          nullable: true
          example: rev_abc123
        hasMore:
          type: boolean
          example: true
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: VALIDATION_ERROR
            message:
              type: string
              example: Rating must be between 1 and 5
      required:
        - success
        - error
    ProductReview:
      type: object
      required:
        - id
        - rating
        - attributes
      properties:
        id:
          type: string
          example: rev_abc123
        rating:
          type: integer
          minimum: 1
          maximum: 5
          example: 5
        title:
          type: string
          example: Great product!
        text:
          type: string
          example: Really happy with this.
        authorName:
          type: string
          example: Sarah M.
        verified:
          type: boolean
          example: true
        wouldRecommend:
          type: boolean
          example: true
        pros:
          type: string
          example: Fast shipping, great quality
        cons:
          type: string
          example: Packaging could be better
        helpful:
          type: integer
          example: 8
        notHelpful:
          type: integer
          example: 0
        attributes:
          type: object
          description: >-
            Merchant-defined custom review attributes. Empty object when none
            exist.
          additionalProperties:
            type: string
          example:
            would_recommend: 'yes'
            fit: true_to_size
            quality: excellent
        deliveryExperience:
          type: object
          nullable: true
        createdAt:
          type: string
          format: date-time
        mediaUrls:
          type: array
          items:
            type: string
            format: uri
        mediaAssets:
          type: array
          items:
            type: object
        merchantReply:
          type: object
          nullable: true

````