Review Management
9 API calls in this section.
List Reviews (Admin)
/storefront/reviewsRetrieves reviews for admin moderation with advanced filtering and pagination. Only accessible by tenant administrators for review management.
Required: Valid Bearer token with tenant admin permissions
Search & Filter Features
Content Search: Find reviews by title or comment text
Rating Filtering: Single, multi-select, or range (min/max)
Product/Variant Filtering: Use
product_idand/orvariant_idStatus Filtering: Single or multiple statuses
Date Range: Filter by
created_atintervalCombination Filters: Use multiple filters together for precise results
Features
Admin-only access for moderation
Advanced search and filtering capabilities
Status-based filtering for workflow management
Content-based search for quality control
Rating-based filtering for sentiment analysis
Product/variant-specific review management
Paginated results for large review volumes
Complete review details with user information
Product context for moderation decisions
Moderation history tracking
Order verification for purchase validation
Review Statuses
Pending: Newly submitted, awaiting moderation
Approved: Reviewed and approved for public display
Rejected: Reviewed and rejected (not shown publicly)
Response Data
Complete review details with ratings
User information (anonymized if needed)
Product variant details for context
Order information for purchase verification
Submission and moderation timestamps
Admin responses and moderation history
Use Cases
Review moderation dashboard
Quality control workflows
Bulk review processing
Content management systems
Customer service oversight
Product quality analysis
Sentiment monitoring
Spam detection workflows
Query parameters
| Parameter | Type | Description |
|---|---|---|
pageOptional | string | Page number for pagination (default: 1) Example: |
limitOptional | string | Items per page (default: 10, max: 100) Example: |
statusOptional | string | Filter by review status: pending, approved, rejected. Default when omitted: pending Filter by single moderation status (pending, approved, rejected) Example: |
statusesOptional | string | Filter by multiple statuses (comma-separated): pending, approved, rejected Comma-separated list of statuses (takes precedence over Example: |
searchOptional | string | Search reviews by title or comment content Example: |
langOptional | string | Language code for multilingual search on title/comment (default: context lang) Language for multilingual fields search (default: context lang) Example: |
ratingOptional | string | Filter reviews by specific rating (1-5 stars) Filter by a single rating (1-5) Example: |
ratingsOptional | string | Filter by multiple ratings (comma-separated) Comma-separated list of ratings (1-5) Example: |
min_ratingOptional | string | Minimum rating (inclusive) Example: |
max_ratingOptional | string | Maximum rating (inclusive) Example: |
start_dateOptional | string | Start of Example: |
end_dateOptional | string | End of Example: |
product_idOptional | string | Filter reviews for specific product Example: |
variant_idOptional | string | Filter reviews for specific variant Example: |
Headers
| Parameter | Type | Description |
|---|---|---|
AuthorizationRequired | string | JWT token for tenant admin users (required) Example: |
1curl --globoff --request GET "https://staging-api.ondi.io/functions/v1/storefront/reviews?page=1&limit=10&status=pending&search=great product&rating=5&product_id=product-uuid-123&variant_id=variant-uuid-123&lang=en" \2 --header "Authorization: Bearer ${ONDI_ACCESS_TOKEN}"Response examples
1{2 "success": true,3 "reviews": [4 {5 "id": "review-uuid-1",6 "variant_id": "variant-uuid-123",7 "user_id": "user-uuid-456",8 "order_id": "order-uuid-789",9 "rating": 5,10 "title": {11 "en": "Excellent product!",12 "ar": "منتج ممتاز!",13 "ku": "بەرهەمێکی نایاب!"14 },15 "comment": {16 "en": "Really happy with this purchase. Great quality and fast delivery.",17 "ar": "سعيد جداً بهذا الشراء. جودة رائعة وتسليم سريع.",18 "ku": "زۆر دڵخۆشم بەم کڕینە. کوالیتی باش و گەیاندنی خێرا."19 },20 "status": "pending",21 "admin_response": null,22 "created_at": "2023-12-01T10:00:00Z",23 "updated_at": "2023-12-01T10:00:00Z",24 "user": {25 "id": "user-uuid-456",26 "full_name": "John Doe",27 "email": "john****@example.com"28 },29 "variant": {30 "id": "variant-uuid-123",31 "name": {32 "en": "iPhone 15 Pro - 256GB",33 "ar": "آيفون 15 برو - 256 جيجابايت",34 "ku": "ئایفۆن 15 پرۆ - 256 گیگابایت"35 },36 "price": 999.99,37 "storefront_products": {38 "id": "product-uuid-123",39 "name": {40 "en": "iPhone 15 Pro",41 "ar": "آيفون 15 برو",42 "ku": "ئایفۆن 15 پرۆ"43 }44 }45 },46 "order": {47 "id": "order-uuid-789",48 "status": "delivered"49 },50 "is_approved": false,51 "is_pending": true,52 "is_rejected": false53 }54 ],55 "pagination": {56 "page": 1,57 "limit": 10,58 "total": 1,59 "totalPages": 160 }61}Moderate Review
/storefront/reviews/:review_id/moderateApproves or rejects a review submission. Only accessible by tenant administrators with moderation capabilities.
Required: Valid Bearer token with tenant admin permissions
Moderation Actions
approve: Makes the review visible to public users
reject: Hides the review from public display
Admin Response
Multi-language support for admin responses
Optional field for public admin replies
Displayed alongside approved reviews
Features
Audit trail with moderator identification
Multi-language admin responses
Status change logging
Notification triggers (if configured)
Reversible moderation decisions
Business Rules
Only pending reviews can be moderated
Moderation action is logged with timestamp
Moderator ID is recorded for accountability
Status changes are permanent until re-moderated
Admin responses are public when review is approved
Response Data
Updated review with new status
Moderation timestamp and moderator info
Admin response (if provided)
Use Cases
Quality control workflows
Content moderation
Review approval processes
Spam and inappropriate content filtering
Customer service dispute resolution
Public admin responses to reviews
Path parameters
| Parameter | Type | Description |
|---|---|---|
review_idRequired | string | UUID of the review to moderate Example: |
Headers
| Parameter | Type | Description |
|---|---|---|
AuthorizationRequired | string | JWT token for tenant admin users (required) Example: |
Content-Type | string | Example: |
Body parameters
| Parameter | Type | Description |
|---|---|---|
actionRequired | string | Moderation action ('approve' or 'reject') |
admin_responseOptional | object | Multi-language admin response to the review (applies to both approve and reject) |
admin_response.en | string | — |
admin_response.ar | string | — |
admin_response.ku | string | — |
1curl --globoff --request PUT "https://staging-api.ondi.io/functions/v1/storefront/reviews/${REVIEW_ID}/moderate" \2 --header "Authorization: Bearer ${ONDI_ACCESS_TOKEN}" \3 --header "Content-Type: application/json" \4 --data-raw '{5 "action": "approve",6 "admin_response": {7 "en": "Thank you for your detailed review!",8 "ar": "شكراً لك على مراجعتك المفصلة!",9 "ku": "سوپاس بۆ پێداچوونەوە وردەکەت!"10 }11}'Response examples
1{2 "success": true,3 "review": {4 "id": "review-uuid-123",5 "variant_id": "variant-uuid-456",6 "user_id": "user-uuid-789",7 "order_id": "order-uuid-101",8 "rating": 5,9 "title": {10 "en": "Excellent product!"11 },12 "comment": {13 "en": "Really happy with this purchase. Great quality and fast delivery."14 },15 "status": "approved",16 "admin_response": {17 "en": "Thank you for your detailed review!",18 "ar": "شكراً لك على مراجعتك المفصلة!"19 },20 "created_at": "2023-12-01T10:00:00Z",21 "updated_at": "2023-12-01T18:00:00Z",22 "is_approved": true,23 "is_pending": false,24 "is_rejected": false25 },26 "message": "Review approved successfully"27}Bulk Moderate Reviews (Admin)
/storefront/reviews/bulk-moderateBulk approve or reject multiple reviews. Only reviews with status 'pending' are updated.
Required: Valid Bearer token with tenant admin permissions
Endpoints
POST /storefront/reviews/bulk-moderate
Common Fields
action(required): 'approve' | 'reject'admin_response(optional): multilingual map to setadmin_responsedirectly
Supported Filters
ratings: array of integers 1-5rating: single integer 1-5min_rating/max_ratingstart_date/end_date(ISO 8601)product_id(preferred) or legacycatalog_item_idvariant_id
Notes
Only 'pending' reviews are modified
Selection is scoped to the current tenant's market
Response reports matched vs updated counts
Headers
| Parameter | Type | Description |
|---|---|---|
AuthorizationRequired | string | JWT token for tenant admin users (required) Example: |
Content-Type | string | Example: |
Body parameters
| Parameter | Type | Description |
|---|---|---|
action | string | — |
review_ids | array<string> | (array of UUIDs): Explicit list of review IDs |
filters | string | (object): Criteria to select reviews |
1curl --globoff --request POST "https://staging-api.ondi.io/functions/v1/storefront/reviews/bulk-moderate" \2 --header "Authorization: Bearer ${ONDI_ACCESS_TOKEN}" \3 --header "Content-Type: application/json" \4 --data-raw '{5 "action": "approve",6 "review_ids": [7 "review-uuid-1",8 "review-uuid-2"9 ]10}'Response examples
1{2 "success": true,3 "action": "approve",4 "matched": 2,5 "updated": 26}Bulk Moderate Reviews by Filters (Admin)
/storefront/reviews/bulk-moderateBulk approve or reject using filter criteria. Only reviews with status 'pending' are updated.
product_id(preferred) or legacycatalog_item_id
Response returns matched and updated counts.
Headers
| Parameter | Type | Description |
|---|---|---|
AuthorizationRequired | string | JWT token for tenant admin users (required) Example: |
Content-Type | string | Example: |
Body parameters
| Parameter | Type | Description |
|---|---|---|
actionRequired | string | 'approve' | 'reject' |
admin_responseOptional | object | multilingual map applied to affected reviews |
admin_response.en | string | — |
filters | object | (required if no |
filters.ratings | array<number> | array of integers 1-5 |
filters.min_rating | number | inclusive bounds |
filters.max_rating | number | inclusive bounds |
filters.start_date | string | ISO timestamps on |
filters.end_date | string | ISO timestamps on |
filters.product_id | string | — |
filters.variant_id | string | — |
filters.rating | string | single integer 1-5 |
1curl --globoff --request POST "https://staging-api.ondi.io/functions/v1/storefront/reviews/bulk-moderate" \2 --header "Authorization: Bearer ${ONDI_ACCESS_TOKEN}" \3 --header "Content-Type: application/json" \4 --data-raw '{5 "action": "reject",6 "admin_response": {7 "en": "Fails moderation policy"8 },9 "filters": {10 "ratings": [11 1,12 213 ],14 "min_rating": 1,15 "max_rating": 2,16 "start_date": "2025-01-01T00:00:00Z",17 "end_date": "2025-12-31T23:59:59Z",18 "product_id": "product-uuid-123",19 "variant_id": "variant-uuid-123"20 }21}'Response examples
1{2 "success": true,3 "action": "reject",4 "matched": 7,5 "updated": 76}Submit Review
/storefront/reviewsAllows customers to submit reviews for products they have purchased and received. Client submits variant_id for provenance; server derives and stores product_id for product-level display/aggregation.
Required: Valid Bearer token for customer identification
Purchase Verification
System validates user has a delivered order containing the variant
Review is linked to the order for verification
Features
Verified purchase enforcement
Rating validation (1-5 stars)
Multi-language content support
Duplicate review prevention (one review per user per product)
Auto-moderation support (pending/approved)
Review submission tracking
Business Rules
User must be authenticated
User must have a delivered order containing the variant
Rating must be between 1-5
One review per product per user (
variant_idis just provenance)Content must pass validation
Response Data
Created review with moderation status
product_idstored for product-level aggregationLinked order information
Submission timestamp
Review ID for tracking
Headers
| Parameter | Type | Description |
|---|---|---|
AuthorizationRequired | string | JWT token for authenticated users (required) Example: |
Content-Type | string | Example: |
Body parameters
| Parameter | Type | Description |
|---|---|---|
variant_idRequired | string | UUID of the product variant being reviewed (provenance) |
ratingRequired | number | Rating from 1-5 stars |
titleOptional | string | Short review title (max 100 characters) |
commentOptional | string | Detailed review text (max 1000 characters) |
1curl --globoff --request POST "https://staging-api.ondi.io/functions/v1/storefront/reviews" \2 --header "Authorization: Bearer ${ONDI_ACCESS_TOKEN}" \3 --header "Content-Type: application/json" \4 --data-raw '{5 "variant_id": "variant-uuid-123",6 "rating": 4,7 "title": "Good product overall",8 "comment": "The product works well and meets my expectations. Delivery was quick and packaging was secure. Would recommend to others."9}'Response examples
1{2 "success": true,3 "review": {4 "id": "review-uuid-new",5 "variant_id": "variant-uuid-123",6 "user_id": "user-uuid-789",7 "order_id": "order-uuid-456",8 "rating": 4,9 "title": {10 "en": "Good product overall"11 },12 "comment": {13 "en": "The product works well and meets my expectations. Delivery was quick and packaging was secure. Would recommend to others."14 },15 "status": "pending",16 "admin_response": null,17 "created_at": "2023-12-01T19:00:00Z",18 "updated_at": "2023-12-01T19:00:00Z",19 "is_approved": false,20 "is_pending": true,21 "is_rejected": false22 },23 "message": "Review submitted successfully and is pending moderation"24}Get Product Reviews (Public)
/storefront/products/:product_id/reviewsRetrieves approved reviews for all variants of a specific product. Public endpoint that aggregates reviews from all product variants and shows only approved reviews with rating statistics.
Optional: No authentication required for public access
Features
Public access to approved reviews only
Aggregates reviews from all product variants
Comprehensive rating statistics
Rating distribution breakdown
Purchase verification indicators
User anonymization for privacy
Multi-language content support
Response Data
Only approved reviews from all variants
Average rating calculation across all variants
Rating count by stars (1-5)
Total review count
User information (anonymized)
Variant information for context
Purchase verification status
Admin responses (if any)
Use Cases
Product page review display
Rating and review widgets
Customer decision support
SEO content for product pages
Social proof display
Product comparison features
Path parameters
| Parameter | Type | Description |
|---|---|---|
product_idRequired | string | UUID of the product to get reviews for Example: |
Query parameters
| Parameter | Type | Description |
|---|---|---|
pageOptional | string | Page number for pagination (default: 1) Example: |
limitOptional | string | Items per page (default: 10, max: 100) Example: |
1curl --globoff --request GET "https://staging-api.ondi.io/functions/v1/storefront/products/${PRODUCT_ID}/reviews?page=1&limit=10"Response examples
1{2 "success": true,3 "review_data": {4 "reviews": [5 {6 "id": "review-uuid-1",7 "variant_id": "variant-uuid-123",8 "user_id": "user-uuid-456",9 "order_id": "order-uuid-789",10 "rating": 5,11 "title": {12 "en": "Excellent product!"13 },14 "comment": {15 "en": "Really happy with this purchase. Great quality and fast delivery."16 },17 "status": "approved",18 "admin_response": {19 "en": "Thank you for your feedback!"20 },21 "created_at": "2023-12-01T10:00:00Z",22 "updated_at": "2023-12-01T11:00:00Z",23 "user": {24 "id": "user-uuid-456",25 "full_name": "John D.",26 "email": "john****@example.com"27 },28 "variant": {29 "id": "variant-uuid-123",30 "name": {31 "en": "iPhone 15 Pro - 256GB"32 },33 "price": 999.99,34 "storefront_products": {35 "id": "product-uuid-123",36 "name": {37 "en": "iPhone 15 Pro",38 "ar": "آيفون 15 برو"39 }40 }41 },42 "is_approved": true,43 "is_pending": false,44 "is_rejected": false45 },46 {47 "id": "review-uuid-2",48 "variant_id": "variant-uuid-456",49 "user_id": "user-uuid-789",50 "order_id": "order-uuid-101",51 "rating": 4,52 "title": {53 "en": "Good value for money"54 },55 "comment": {56 "en": "Product works as expected. Minor issues with setup but overall satisfied."57 },58 "status": "approved",59 "admin_response": null,60 "created_at": "2023-11-28T15:30:00Z",61 "updated_at": "2023-11-28T16:00:00Z",62 "user": {63 "id": "user-uuid-789",64 "full_name": "Sarah M.",65 "email": "sarah****@example.com"66 },67 "variant": {68 "id": "variant-uuid-456",69 "name": {70 "en": "iPhone 15 Pro - 512GB"71 },72 "price": 1199.99,73 "storefront_products": {74 "id": "product-uuid-123",75 "name": {76 "en": "iPhone 15 Pro",77 "ar": "آيفون 15 برو"78 }79 }80 },81 "is_approved": true,82 "is_pending": false,83 "is_rejected": false84 }85 ],86 "statistics": {87 "total_reviews": 2,88 "average_rating": 4.5,89 "rating_counts": {90 "1": 0,91 "2": 0,92 "3": 0,93 "4": 1,94 "5": 195 }96 },97 "pagination": {98 "page": 1,99 "limit": 10,100 "total": 2,101 "totalPages": 1102 }103 }104}Get Variant Reviews (Public)
/storefront/variants/:variant_id/reviewsRetrieves approved reviews for a specific product variant. Public endpoint that shows only approved reviews with rating statistics specific to this variant.
Optional: No authentication required for public access
Features
Public access to approved reviews only
Variant-specific review filtering
Comprehensive rating statistics for this variant
Rating distribution breakdown
Purchase verification indicators
User anonymization for privacy
Multi-language content support
Admin responses display
Response Data
Only approved reviews for this specific variant
Average rating calculation for this variant
Rating count by stars (1-5) for this variant
Total review count for this variant
User information (anonymized)
Variant information for context
Purchase verification status
Admin responses (if any)
Use Cases
Variant-specific review display
Detailed product variant analysis
Variant comparison features
Specific variant decision support
Variant-level rating widgets
Path parameters
| Parameter | Type | Description |
|---|---|---|
variant_idRequired | string | UUID of the product variant to get reviews for Example: |
Query parameters
| Parameter | Type | Description |
|---|---|---|
pageOptional | string | Page number for pagination (default: 1) Example: |
limitOptional | string | Items per page (default: 10, max: 100) Example: |
1curl --globoff --request GET "https://staging-api.ondi.io/functions/v1/storefront/variants/${VARIANT_ID}/reviews?page=1&limit=10"Response examples
1{2 "success": true,3 "review_data": {4 "reviews": [5 {6 "id": "review-uuid-1",7 "variant_id": "variant-uuid-123",8 "user_id": "user-uuid-456",9 "order_id": "order-uuid-789",10 "rating": 5,11 "title": {12 "en": "Excellent variant!",13 "ar": "نموذج ممتاز!"14 },15 "comment": {16 "en": "This specific variant works perfectly. The 256GB storage is exactly what I needed.",17 "ar": "هذا النموذج المحدد يعمل بشكل مثالي. مساحة التخزين 256 جيجابايت هي بالضبط ما احتجته."18 },19 "status": "approved",20 "admin_response": {21 "en": "Thank you for the detailed feedback on this variant!"22 },23 "created_at": "2023-12-01T10:00:00Z",24 "updated_at": "2023-12-01T11:00:00Z",25 "user": {26 "id": "user-uuid-456",27 "full_name": "John D.",28 "email": "john****@example.com"29 },30 "variant": {31 "id": "variant-uuid-123",32 "name": {33 "en": "iPhone 15 Pro - 256GB",34 "ar": "آيفون 15 برو - 256 جيجابايت"35 },36 "price": 999.99,37 "storefront_products": {38 "id": "product-uuid-123",39 "name": {40 "en": "iPhone 15 Pro",41 "ar": "آيفون 15 برو"42 }43 }44 },45 "is_approved": true,46 "is_pending": false,47 "is_rejected": false48 }49 ],50 "statistics": {51 "total_reviews": 1,52 "average_rating": 5,53 "rating_counts": {54 "1": 0,55 "2": 0,56 "3": 0,57 "4": 0,58 "5": 159 }60 },61 "pagination": {62 "page": 1,63 "limit": 10,64 "total": 1,65 "totalPages": 166 }67 }68}Check Review Eligibility
/storefront/variants/:variant_id/review-eligibilityChecks whether the current user is eligible to review the given variant.
Rules
Authentication required
Must have a delivered order containing the variant
Must not have already reviewed it
Path parameters
| Parameter | Type | Description |
|---|---|---|
variant_idRequired | string | UUID of the product variant to check Example: |
Headers
| Parameter | Type | Description |
|---|---|---|
AuthorizationRequired | string | JWT token for authenticated users (required) Example: |
1curl --globoff --request GET "https://staging-api.ondi.io/functions/v1/storefront/variants/${VARIANT_ID}/review-eligibility" \2 --header "Authorization: Bearer ${ONDI_ACCESS_TOKEN}"Response examples
1{2 "success": true,3 "eligible": true,4 "reason": null,5 "order_id": "order-uuid-789"6}Check Product Review Eligibility
/storefront/products/:product_id/review-eligibilityChecks whether the current user is eligible to review the given product (any variant).
Rules
Authentication required
Must have a delivered order containing any variant of the product
Must not have already reviewed any variant of the product
Path parameters
| Parameter | Type | Description |
|---|---|---|
product_idRequired | string | UUID of the product to check Example: |
Headers
| Parameter | Type | Description |
|---|---|---|
AuthorizationRequired | string | JWT token for authenticated users (required) Example: |
1curl --globoff --request GET "https://staging-api.ondi.io/functions/v1/storefront/products/${PRODUCT_ID}/review-eligibility" \2 --header "Authorization: Bearer ${ONDI_ACCESS_TOKEN}"Response examples
1{2 "success": true,3 "eligible": true,4 "reason": null,5 "order_id": "order-uuid-789",6 "purchased_at": "2023-12-01T10:00:00Z"7}