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
| Code | HTTP | When |
|---|---|---|
| FORBIDDEN | 403 | No delivered order with this product |
| VALIDATION_ERROR | 422 | Already 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
| Code | HTTP | When |
|---|---|---|
| NOT_FOUND | 404 | Review not found or not yours |
| VALIDATION_ERROR | 422 | Already 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 Required
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 Required
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 Required
Feature a review (highlight on product page).
Response
{ "success": true, "data": { "review": { "id","is_featured": true } } }
DELETE
/api/v1/admin/reviews/:id
🔒 Auth Required
Permanently delete a review.
Response
{ "success": true, "data": null }