# Reviews

Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.

## List Reviews

> Retrieve project reviews with facet, source, location, score, and tag filters, optional sorting by rating or timestamps, and calendar bounds on a chosen review datetime column.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/reviews":{"get":{"tags":["Reviews"],"summary":"List Reviews","operationId":"listReviews","description":"Retrieve project reviews with facet, source, location, score, and tag filters, optional sorting by rating or timestamps, and calendar bounds on a chosen review datetime column.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"score":{"type":"integer","description":"Score for this resource."},"review":{"type":"string","description":"Review for this resource."},"review_html":{"type":"string","description":"Review html for this resource."},"reply":{"type":"string","description":"Reply text associated with the review or message."},"is_hidden":{"type":"boolean","description":"Is hidden for this resource."},"is_duplicate":{"type":"boolean","description":"Is duplicate for this resource."},"has_highlights":{"type":"boolean","description":"Has highlights for this resource."},"can_reply":{"type":"boolean","description":"Can reply for this resource."},"has_reply":{"type":"boolean","description":"Has reply for this resource."},"external_url":{"type":"string","description":"External url for this resource."},"platform_url":{"type":"string","description":"Absolute URL to this review in the web console; uses the agency white-label host when configured."},"replied_at":{"type":"integer","description":"Unix timestamp when a reply was posted."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"customer":{"type":"object","description":"Customer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"color":{"type":"string","description":"Hex color associated with the resource."},"platform_url":{"type":"string","description":"Absolute URL to this customer in the web console; uses the agency white-label host when configured."}}},"location":{"type":"object","description":"Location for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"store_code":{"type":"string","description":"Internal store identifier for this location."},"title":{"type":"string","description":"Title or headline for the resource."},"address":{"type":"string","description":"Address for this resource."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}}},"rating":{"type":"object","description":"Numeric rating value for the review.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"score":{"type":"integer","description":"Score for this resource."},"label":{"type":"string","description":"Label for this resource."}}},"reviewer":{"type":"object","description":"Reviewer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"photo_url":{"type":"string","description":"Photo url for this resource."}}},"source":{"type":"object","description":"Source system or review platform for this record.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with the resource."},"icon":{"type":"string","description":"Icon for this resource.","nullable":true}}},"fields":{"type":"array","description":"List of fields for this resource.","items":{"type":"object","description":"Fields for this resource.","properties":{"name":{"type":"string","description":"Display name for this resource."},"value":{"type":"string","description":"Stored value for this field."}}}},"tags":{"type":"array","description":"Maximum or current allowance for tag records.","items":{"type":"object","description":"Maximum or current allowance for tag records.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."}}}}}}},"pagination":{"type":"object","description":"Pagination metadata for list responses.","properties":{"current_page":{"type":"integer","description":"Current page number in the paginated result set."},"from":{"type":"integer","description":"Index of the first item returned on the current page."},"last_page":{"type":"integer","description":"Last available page number in the paginated result set."},"path":{"type":"string","description":"Base API path used for the paginated result set."},"per_page":{"type":"integer","description":"Number of items returned per page."},"to":{"type":"integer","description":"Index of the last item returned on the current page."},"total":{"type":"integer","description":"Total number of matching items."}}}}}}}}},"parameters":[{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive lower calendar date (YYYY-MM-DD) for the column chosen by date_key, defaulting to created_at when date_key is omitted."},"description":"Inclusive lower calendar date (YYYY-MM-DD) for the column chosen by date_key, defaulting to created_at when date_key is omitted."},{"name":"date_key","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Review datetime column paired with date_from and date_to (defaults to created_at when omitted).","enum":["created_at","replied_at","updated_at"]},"description":"Review datetime column paired with date_from and date_to (defaults to created_at when omitted)."},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive upper calendar date (YYYY-MM-DD) for the column chosen by date_key; must be on or after date_from when both bounds are provided."},"description":"Inclusive upper calendar date (YYYY-MM-DD) for the column chosen by date_key; must be on or after date_from when both bounds are provided."},{"name":"filter","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Review list facet aligned with console filters (non-duplicates unless duplicate is selected).","enum":["anonymous","duplicate","hidden","identified","native","visible","with-highlights","with-replies","without-replies","written"]},"description":"Filter reviews by visibility, platform, duplication, replies, content, or audience."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Maximum number of records to return."},"description":"Maximum number of records to return."},{"name":"location_id","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Unique numeric identifier for the location."},"description":"Filter reviews by location ID."},{"name":"location_slug","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"URL-friendly identifier for the location."},"description":"Filter reviews by location slug."},{"name":"location_uuid","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Stable UUID for the location."},"description":"Filter reviews by location UUID."},{"name":"score","in":"query","required":false,"schema":{"type":"integer","nullable":true,"minimum":1,"maximum":5,"description":"Numeric rating score for the review."},"description":"Filter reviews by rating score."},{"name":"source_id","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Identifier for the source system or review platform."},"description":"Filter reviews by source ID."},{"name":"source_slug","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Source slug for this resource."},"description":"Filter reviews by source slug."},{"name":"source_uuid","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Source uuid for this resource."},"description":"Filter reviews by source UUID."},{"name":"sort_dir","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Sort direction applied when sort_key is set (defaults to desc when omitted).","enum":["asc","desc"]},"description":"Sort direction: asc or desc."},{"name":"sort_key","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Review attribute to sort by; omit to use newest-first by creation time.","enum":["score","replied_at","created_at","updated_at"]},"description":"Review attribute to sort by."},{"name":"tag_slug","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"URL-friendly identifier for the review tag."},"description":"Filter reviews by tag slug."}]}}}}
```

## Delete Review

> Remove a review that should no longer be reconciled.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}":{"delete":{"tags":["Reviews"],"summary":"Delete Review","operationId":"deleteReview","description":"Remove a review that should no longer be reconciled.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this resource."},"description":"Unique numeric identifier for this resource."}]}}}}
```

## Update Review Visibility

> Show or hide a review in public displays.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/flag-hidden":{"put":{"tags":["Reviews"],"summary":"Update Review Visibility","operationId":"updateReviewVisibility","description":"Show or hide a review in public displays.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body containing the desired review visibility flag.","properties":{"is_hidden":{"type":"boolean","description":"Whether this review should be hidden from public displays."}},"required":["is_hidden"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this review."},"description":"Unique numeric identifier for this review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Update Review Duplicate Flag

> Mark whether a review is a duplicate record.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/flag-duplicate":{"put":{"tags":["Reviews"],"summary":"Update Review Duplicate Flag","operationId":"updateReviewDuplicateFlag","description":"Mark whether a review is a duplicate record.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body containing the desired duplicate flag.","properties":{"is_duplicate":{"type":"boolean","description":"Whether this review should be marked as a duplicate."}},"required":["is_duplicate"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this review."},"description":"Unique numeric identifier for this review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Mark Review Replied

> Set or clear replied\_at when a reply was handled outside the platform without changing stored reply text.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/mark-replied":{"put":{"tags":["Reviews"],"summary":"Mark Review Replied","operationId":"markReviewReplied","description":"Set or clear replied_at when a reply was handled outside the platform without changing stored reply text.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body toggling whether the review counts as replied.","properties":{"replied":{"type":"boolean","description":"When true, records the current time as replied_at; when false, clears replied_at."}},"required":["replied"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the review."},"description":"Unique numeric identifier for the review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Reply to Review on Integration

> Publish or replace the business owner's reply on the review's connected platform (such as Google Business Profile or Facebook) using the project's active integration credentials; accepts manual reply text only and does not invoke AI drafting.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/reply":{"put":{"tags":["Reviews"],"summary":"Reply to Review on Integration","operationId":"updateReviewIntegrationReply","description":"Publish or replace the business owner's reply on the review's connected platform (such as Google Business Profile or Facebook) using the project's active integration credentials; accepts manual reply text only and does not invoke AI drafting.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body with the owner reply to send to the third-party review platform API.","properties":{"reply":{"type":"string","description":"Reply text to post or update on the external platform (for example Google or Facebook).","maxLength":4000}},"required":["reply"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the review."},"description":"Unique numeric identifier for the review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Update Review Tags

> Replace the tag assignments for a review using the provided slug list.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/tags":{"put":{"tags":["Reviews"],"summary":"Update Review Tags","operationId":"updateReviewTags","description":"Replace the tag assignments for a review using the provided slug list.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body listing tag slugs to apply; omitting unrelated tags removes them from the review.","properties":{"tag_slugs":{"type":"array","description":"Tag slugs to assign; send an empty array to clear all tags from this review.","items":{"type":"string","description":"Project tag slug."}}},"required":["tag_slugs"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"Unique numeric identifier for the review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Create Review Share Image

> Render a share-card PNG using optional template styling and aspect ratio, persist the image, and return CDN-backed metadata.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/share-image":{"post":{"tags":["Reviews"],"summary":"Create Review Share Image","operationId":"createReviewShareImage","description":"Render a share-card PNG using optional template styling and aspect ratio, persist the image, and return CDN-backed metadata.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false},"description":"Unique numeric identifier for the review."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Optionally pick a saved share template and export aspect ratio; send an empty object for built-in defaults at 1:1.","properties":{"ratio":{"type":"string","description":"Export aspect ratio; when set, overrides the ratio saved on the chosen template or the default preset.","enum":["1:1","4:5","9:16"]},"template_id":{"type":"integer","description":"Numeric id of a share template on this project; omit to merge only built-in defaults."}}}}}},"responses":{"200":{"description":"Generated share PNG exposed as Image metadata with a full HTTPS link matching other API image fields.","content":{"application/json":{"schema":{"type":"object","description":"Standard success envelope with ImageTransformer fields flattened into data like other singleton resources.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code mirroring HTTP 200 on success."},"data":{"type":"object","description":"Transformed CDN-backed image backing the PNG share artifact.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for the stored image asset."},"uuid":{"type":"string","description":"Stable UUID for the image asset and cache headers."},"link":{"type":"string","description":"Full HTTPS CDN URL referencing the PNG share card artifact."}},"required":["id","uuid","link"]}},"required":["success","code","data"]}}}}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.moregoodreviews.com/platform/api-reference/reviews.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
