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

# Update Review

<Note>
  Required scope: `write_reviews`

  This endpoint is in preview, and is only available to partners and merchants who
  have opted-in
</Note>

Use this endpoint to inform us about a change to a review.

For example, if a review is initially created with a `pending` status and is
later approved, you can send LoyaltyLion an update informing us it has been
approved.

To update a review you'll need the `platform` and the `merchant_id` you sent to
LoyaltyLion when you first created the review.


## OpenAPI

````yaml /api-reference/v2/openapi.json PUT /v2/reviews/{platform}/{merchant_id}
openapi: 3.1.1
info:
  title: LoyaltyLion Admin API
  version: v2
servers:
  - url: https://api.loyaltylion.com
security: []
tags:
  - name: identity
  - name: activities
  - name: orders
  - name: transactions
  - name: customers
  - name: webhooks
  - name: emails
  - name: sites
  - name: reviews
  - name: rewards
  - name: integrations
  - name: gatsby
paths:
  /v2/reviews/{platform}/{merchant_id}:
    put:
      tags:
        - reviews
      operationId: reviews.updateReview
      parameters:
        - name: platform
          in: path
          required: true
          schema:
            example: custom
            type: string
            minLength: 1
          description: >-
            The review platform. Use your platform identifier if you are a
            review partner, or "custom" if you are a merchant integrating a
            custom reviews app
        - name: merchant_id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
          description: The ID of the review in the review platform
      requestBody:
        description: Body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReviewsUpdateReviewRequestBody'
      responses:
        '200':
          description: '200'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewsUpdateReviewResponseBody'
        '400':
          $ref: '#/components/responses/ClientErrorBadRequest'
        '401':
          description: '401'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      message:
                        type: string
                      details:
                        type: object
                        propertyNames:
                          type: string
                        additionalProperties:
                          type: string
                    required:
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '403':
          description: '403'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      message:
                        type: string
                      details:
                        type: object
                        propertyNames:
                          type: string
                        additionalProperties:
                          type: string
                    required:
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '404':
          description: '404'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        const: not_found
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '422':
          description: '422'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    oneOf:
                      - $ref: '#/components/schemas/ReviewsUnsupportedPlatformError'
                    type: object
                    discriminator:
                      propertyName: code
                      mapping:
                        unsupported_platform:
                          $ref: '#/components/schemas/ReviewsUnsupportedPlatformError'
                required:
                  - error
                additionalProperties: false
        '429':
          description: '429'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        const: rate_limited
                    required:
                      - code
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
      security:
        - ProgramApiKey:
            - write_reviews
components:
  schemas:
    ReviewsUpdateReviewRequestBody:
      type: object
      properties:
        status:
          description: >-
            The current status of the review, which determines how and when
            associated rules are triggered. One of: `pending` (the review is
            pending review), `flagged` (the review has been flagged for review),
            `approved` (the review has been approved/published), `rejected` (the
            review has been rejected)
          type: string
          enum:
            - approved
            - flagged
            - pending
            - rejected
        full_text:
          description: The full text of the review
          type: string
          minLength: 1
        rating:
          description: The rating given in the review
          type: number
          minimum: 1
        images_count:
          description: The number of images attached to the review
          type: number
          minimum: 0
          maximum: 1000
        videos_count:
          description: The number of videos attached to the review
          type: number
          minimum: 0
          maximum: 1000
        date:
          type: string
          description: >-
            The date this review was updated in the review platform, as an ISO
            8601 timestamp
          example: '2026-01-01T12:00:00Z'
      required:
        - status
        - full_text
        - rating
        - images_count
        - videos_count
        - date
      additionalProperties: false
    ReviewsUpdateReviewResponseBody:
      type: object
      properties:
        review:
          type: object
          properties:
            id:
              description: Unique ID of the review in LoyaltyLion
              type: number
            program_id:
              description: The LoyaltyLion program to which this review belongs
              type: number
            customer:
              description: The customer who left the review
              type: object
              properties:
                id:
                  description: ID of the customer in LoyaltyLion
                  type: number
                email:
                  description: The email address of the customer
                  type:
                    - string
                    - 'null'
              required:
                - id
                - email
              additionalProperties: false
            site_id:
              description: >-
                The LoyaltyLion site this review belongs to, or `null` if not
                linked to a site
              type:
                - number
                - 'null'
            platform:
              example: custom
              description: The review platform this review originates from
              type: string
              minLength: 1
            merchant_id:
              description: The ID of the review in the review platform
              type: string
            status:
              description: >-
                The current status of the review, which determines how and when
                associated rules are triggered. One of: `pending` (the review is
                pending review), `flagged` (the review has been flagged for
                review), `approved` (the review has been approved/published),
                `rejected` (the review has been rejected)
              type: string
              enum:
                - approved
                - flagged
                - pending
                - rejected
            full_text:
              description: The full text of the review
              example: Lorem ipsum dolor sit amet, consectetur adipiscing elit
              type: string
            rating:
              description: The rating given in the review
              example: 5
              type: number
            images_count:
              description: The number of images attached to the review
              example: 3
              type: number
            videos_count:
              description: The number of videos attached to the review
              example: 0
              type: number
            merchant_created_at:
              description: >-
                ISO 8601 timestamp representing the date this review was created
                in the review platform
              type: string
            merchant_updated_at:
              description: >-
                ISO 8601 timestamp representing the date this review was last
                updated in the review platform
              type: string
            moderation_url:
              description: The URL to moderate the review in the review platform
              type:
                - string
                - 'null'
          required:
            - id
            - program_id
            - customer
            - site_id
            - platform
            - merchant_id
            - status
            - full_text
            - rating
            - images_count
            - videos_count
            - merchant_created_at
            - merchant_updated_at
            - moderation_url
          additionalProperties: false
      required:
        - review
      additionalProperties: false
    ReviewsUnsupportedPlatformError:
      title: Unsupported platform
      description: This review platform is not supported for the authenticating API token
      type: object
      properties:
        code:
          type: string
          const: unsupported_platform
      required:
        - code
      additionalProperties: false
  responses:
    ClientErrorBadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  message:
                    type: string
                  details:
                    type: object
                    additionalProperties:
                      type: string
                required:
                  - message
            required:
              - error
  securitySchemes:
    ProgramApiKey:
      type: http
      scheme: bearer
      description: >-
        An API key linked to a Program in LoyaltyLion, with a set of permissions
        (scopes). API keys can be created manually, or acquired through an
        OAuth2 flow. The API key should be provided as a `Bearer` token in the
        `Authorization` header

````