See flag history
Overview
Get the history of flags across your reviews: what was flagged, when, why, and what happened.
Use this for reporting, or to see how often flags are accepted by each site.
Results can be filtered by location, flag status and review site.
Returns the flags, newest first, a page at a time.
Prerequisites
- A bearer token. See Authentication.
- Optional: a location's id (
store_id) to see one location only.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
GET /api/v1/reviews/flag/history
Authentication
Partner or Account token
- You see flags on the locations your token can reach. A Partner token reaches every location under the partner; an Account token its own locations.
- A
store_idoutside that set returns403You do not have access to this store.. - When your token can't reach any location, the response is
{"data": {"data": [], "total": 0}}.
Rate limit
60 requests per minute, counted per user (the token’s user). See Rate limits.
Request parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
store_id | query | integer | No | Only this location's flags. Must be a location your token can reach. |
flag_status | query | string | No | pending, denied, approved_removed or submitted_to_platform. Any other value returns 400 Invalid flag_status value.. |
review_site | query | string | No | Only flags on reviews from the review site with this name, e.g. Google. |
page | query | integer | No | The page. Defaults to 1. |
limit | query | integer | No | Flags per page, 10 to 100 (values below 10 are raised to 10; above 100 returns 422). Defaults to 20. |
Request body
None.
Request payload
None.
Response body
The payload is inside data, as a page of results.
| Field | Type | Description |
|---|---|---|
data | array | The flags on this page, newest first. |
data[].id | integer | The flag's id. |
data[].review_id | integer | The review. |
data[].reason_identifier | string | The reason's short name. |
data[].reason | string | The site's full description of the reason. |
data[].flag_reason_detail | string or null | The explanation sent with the flag. |
data[].user_id | integer or null | The user recorded as the flagger. |
data[].flag_status | string | pending, denied, approved_removed or submitted_to_platform. |
data[].flag_date | string | When the review was flagged (ISO 8601). |
data[].json_data | object or null | Extra details sent with an Indeed flag; null for other sites. |
data[].deleted_at | string or null | When the flag was removed, if it was. |
data[].created_at | string | When the flag was created (ISO 8601). |
data[].updated_at | string | When the flag last changed (ISO 8601). |
data[].review | object | The review: id, store_id, review_site_id, reviewer, rate, message, review_date, plus reviewsite (id, name) and store (id, name, storeid, company_id). |
current_page | integer | This page. |
last_page | integer | The last page. |
per_page | integer | Flags per page. |
total | integer | Flags matching the filters. |
from, to | integer or null | The positions of the first and last flag on this page. |
first_page_url, last_page_url, next_page_url, prev_page_url, path | string or null | Page links. They don't carry your filters. |
links | array | Page links for a pager: url, label, page, active. |
Response payload
{
"data": {
"current_page": 1,
"data": [
{
"id": 43,
"review_id": 279309,
"reason_identifier": "Low quality information",
"reason": "Review is off-topic, contains ads, or is gibberish or repetitive",
"flag_reason_detail": "This reviewer was never a customer and the claims are fabricated.",
"user_id": 3011,
"flag_status": "pending",
"flag_date": "2026-09-28T14:48:21.000000Z",
"json_data": null,
"deleted_at": null,
"created_at": "2026-09-28T14:48:21.000000Z",
"updated_at": "2026-09-28T14:48:21.000000Z",
"review": {
"id": 279309,
"store_id": 3007,
"review_site_id": 44,
"reviewer": "Jane Smith",
"rate": 4,
"message": "",
"review_date": "2026-09-27T00:22:21.000000Z",
"reviewsite": {
"id": 44,
"name": "Google"
},
"store": {
"id": 3007,
"name": "Acme Coffee",
"storeid": "Sydney",
"company_id": 5995
}
}
}
],
"first_page_url": "https://production-api.shoutaboutus.com/api/v1/reviews/flag/history?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "https://production-api.shoutaboutus.com/api/v1/reviews/flag/history?page=1",
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://production-api.shoutaboutus.com/api/v1/reviews/flag/history?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"next_page_url": null,
"path": "https://production-api.shoutaboutus.com/api/v1/reviews/flag/history",
"per_page": 20,
"prev_page_url": null,
"to": 1,
"total": 1
}
}Examples
Success payload
See Response payload.
Error payload
400 Invalid flag_status
{
"message": "Invalid flag_status value.",
"status": "error",
"errors": []
}403 Location outside your scope
{
"message": "You do not have access to this store.",
"status": "error",
"errors": []
}422 limit above 100
{
"message": "The limit field must not be greater than 100.",
"errors": {
"limit": [
"The limit field must not be greater than 100."
]
}
}429 Too many requests
{
"message": "Too Many Attempts."
}| Status | Meaning |
|---|---|
200 | A page of flags. |
400 | flag_status isn't one of the allowed values. |
401 | The token is missing, expired or invalid. |
403 | store_id isn't a location your token can reach. |
422 | limit is above 100. |
429 | More than 60 requests in a minute from this user. |
500 | Unexpected server error. |
Example request
curl --request GET \
--url "https://production-api.shoutaboutus.com/api/v1/reviews/flag/history?store_id=3007&flag_status=pending&page=1&limit=20" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 17 days ago
Did this page help you?
