Regenerate a report

Overview

Generate a report again, even when one already exists for the same location, review site, period and theme. The earlier report is kept; the new one becomes the latest.

Use this if the underlying reviews changed.

You'll need the store_id and the same review site, period and theme as the report you want to redo, with force set to true. This is the same endpoint as Generate an insight report.

Returns a new report id to poll with Check report status. Counts against your allowance.

Prerequisites

  • A bearer token. See Authentication.
  • The location's id (store_id). The location needs at least 10 reviews in the last 48 months, and at least one linked review site that reports can use.
  • Insight reports must be on the location's plan.

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

POST /api/v1/account/insight-report

Authentication

Partner or Account token

  • store_id must be inside your own account tree. A Partner token can generate reports for any location under the partner; an Account token only for its own locations.
  • A location outside your tree is rejected with 422.

Rate limit

This endpoint has no rate limit.

Request parameters

None.

Request body

FieldTypeRequiredDescription
store_idintegerYesThe location to report on. Must exist and be inside your account tree.
review_site_idintegerNoOne review site to report on. Must exist and be linked to the location. Leave it out for a combined report across all the location's review sites (publisher is all).
yearintegerNoThe report year, 2000 to 2100. Leave it out for a report on the previous calendar month (any month you send is then ignored).
monthintegerNoThe report month, 1 to 12. Used only with year; with year and no month, the report covers the whole year.
themestringNoThe report theme, at most 64 characters, e.g. home-services. Leave it out to use the account's industry, or general when no industry is set.
forcebooleanNoSend true to regenerate: a new report is generated even when one already exists for the same location, review site, period and theme, and it counts against your allowance. With false or left out, an existing report is returned instead (200, deduped: true).

Request payload

{
  "store_id": 3007,
  "review_site_id": 44,
  "year": 2026,
  "month": 8,
  "theme": "home-services",
  "force": true
}

Response body

The payload is inside data. With force: true, the status is 202 and a new report is queued.

FieldTypeDescription
insight_report_idintegerThe report's id. Use it as report_id in Check report status.
store_idintegerThe location.
review_site_idinteger or nullThe review site, or null for a combined report.
publisherstringThe review site's source, e.g. maps.google.com, or all for a combined report.
yearintegerThe report year.
monthinteger or nullThe report month, or null for a full-year report.
themestringThe report theme.
statusstringpending, queued, processing, complete or failed. A new report is usually queued.
task_idstring or nullThe report generator's task id.
review_countinteger or nullHow many reviews the report analysed. null until it's complete.
result_summaryobject or nullThe report itself. null until it's complete; see Check report status.
failure_reasonstring or nullWhy the report failed, when it did.
failure_detailsstring or nullMore detail on the failure, when there is any.
created_atstring or nullWhen the report was requested (ISO 8601).
completed_atstring or nullWhen the report finished (ISO 8601). null while it's running.
remaininginteger or nullOnly on 202. Insight reports left on the location's allowance this period; null when there's no cap.
overagebooleanOnly on 202. true when this report was billed as overage.
usage_log_idintegerOnly on 202. The id of the usage record for this report.
dedupedbooleanOnly on 200. true: an existing report was returned and nothing was counted.

The response also carries the allowance in headers: X-Feature (insight_report), X-Feature-Limit, X-Feature-Used, X-Feature-Remaining (unlimited when there's no cap) and X-Feature-Hard-Stop (1 or 0).

Response payload

{
  "data": {
    "insight_report_id": 286,
    "store_id": 3007,
    "review_site_id": 44,
    "publisher": "maps.google.com",
    "year": 2026,
    "month": 8,
    "theme": "home-services",
    "status": "queued",
    "task_id": "3f2b8c1e-5d4a-4e7b-9c6f-2a1d0e8b7c5a",
    "review_count": null,
    "result_summary": null,
    "failure_reason": null,
    "failure_details": null,
    "created_at": "2026-10-01T09:00:00+00:00",
    "completed_at": null,
    "remaining": 4,
    "overage": false,
    "usage_log_id": 5123
  }
}

Examples

Success payload

See Response payload.

Error payload

403 Insight report allowance used up

{
  "message": "Limit reached for 'Insight Report': 5 of 5 units consumed this period.",
  "status": "error",
  "errors": {
    "remaining": 0
  }
}

422 Review site not linked to the location

{
  "message": "The selected review site is not linked to the given store.",
  "errors": {
    "review_site_id": [
      "The selected review site is not linked to the given store."
    ]
  }
}

422 Not enough reviews

{
  "message": "This location needs at least 10 reviews in the last 48 months before an insight report can be generated.",
  "errors": {
    "store_id": [
      "This location needs at least 10 reviews in the last 48 months before an insight report can be generated."
    ]
  }
}

422 Industry not supported yet

{
  "message": "Insight reports are not available for this account's industry yet. Please contact support.",
  "status": "error",
  "errors": {
    "reference": {
      "rd_request_id": null,
      "rd_error_code": null
    }
  }
}

422 Location outside your tree

{
  "message": "The selected store id does not belong to your company hierarchy.",
  "errors": {
    "store_id": [
      "The selected store id does not belong to your company hierarchy."
    ]
  }
}

502 Report provider error

{
  "message": "Insight report provider returned an error.",
  "status": "error",
  "errors": {
    "reference": {
      "rd_request_id": null,
      "rd_error_code": null
    }
  }
}
StatusMeaning
200Only without force: true: an existing report is returned and nothing is counted.
202A new report is queued. Poll Check report status.
401The token is missing, expired or invalid.
403The insight report allowance is used up on a hard-stop plan, insight reports aren't on the location's plan, or the location has no active plan.
404The location's partner couldn't be found.
422A field is missing or invalid; the location is outside your tree, has too few reviews, has no review site reports can use, or isn't set up with the report provider yet; the review site isn't linked to the location; or the account's industry isn't supported yet.
429The report provider is rate-limiting requests. Try again later.
500Unexpected server error.
502The report provider returned an error or rejected the request.
504The report provider is unreachable or timed out.

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/account/insight-report" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"store_id": 3007, "review_site_id": 44, "year": 2026, "month": 8, "theme": "home-services", "force": true}'

Did this page help you?