Reviews API

Verified-purchase reviews with admin approval before public display.

Base: /api/v1/reviews  |  X-Tenant-ID required
POST /api/v1/reviews 🔒 Auth Required

Submit a review. The user must have a DELIVERED order containing the product. One review per (user, product). Not shown publicly until admin approves.

Request Body

{
  "order_id": "uuid",        // required — must be a delivered order you placed
  "product_id": "uuid",      // required — product in that order
  "rating": 5,               // required — integer 1–5
  "title": "Amazing quality!", // required
  "body": "Fits perfectly.",  // required
  "images": []               // optional — array of image URLs
}

Response

{ "success": true, "data": { "review": { "id","rating","title","body","is_approved": false } } }

Possible Errors

CodeHTTPWhen
FORBIDDEN403No delivered order with this product
VALIDATION_ERROR422Already reviewed this product
PUT /api/v1/reviews/:id 🔒 Auth Required

Edit your own review before it is approved.

Request Body

{ "rating": 4, "title": "Good", "body": "Updated review." }

Response

{ "success": true, "data": { "review": { ... } } }

Possible Errors

CodeHTTPWhen
NOT_FOUND404Review not found or not yours
VALIDATION_ERROR422Already approved, cannot edit
DELETE /api/v1/reviews/:id 🔒 Auth Required

Delete your own review.

Response

{ "success": true, "data": null }

Admin — Reviews /api/v1/admin/reviews

GET /api/v1/admin/reviews 🔒 Auth Requiredreviews:moderate

List all reviews including unapproved ones.

Response

{ "success": true, "data": { "reviews": [ { "id","rating","title","is_approved","is_featured","user":{"name","email"},"product":{"name"} } ] } }
PATCH /api/v1/admin/reviews/:id/approve 🔒 Auth Requiredreviews:moderate

Approve a review to make it publicly visible.

Response

{ "success": true, "data": { "review": { "id","is_approved": true } } }
PATCH /api/v1/admin/reviews/:id/feature 🔒 Auth Requiredreviews:moderate

Feature a review (highlight on product page).

Response

{ "success": true, "data": { "review": { "id","is_featured": true } } }
DELETE /api/v1/admin/reviews/:id 🔒 Auth Requiredreviews:moderate

Permanently delete a review.

Response

{ "success": true, "data": null }