Generate last month's report

Overview

Generate a report covering the previous calendar month.

Use this on a schedule for a monthly digest.

You'll need the store_id. The report is the combined report across all the location's review sites, with the theme from the account's industry. If a report for last month already exists (and hasn't failed), it's returned unchanged (200, deduped: true) and nothing is counted; otherwise a new one is generated and counts against your allowance.

Returns a report id to poll with Check report status.

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/generate

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

60 requests per minute, counted per user (the token’s user). See Rate limits.

Request parameters

None.

Request body

FieldTypeRequiredDescription
store_idintegerYesThe location to report on. Must exist and be inside your account tree, have at least 10 reviews in the last 48 months, and have at least one linked review site that reports can use.

The other fields of Generate an insight report (review_site_id, year, month, theme, force) are checked if you send them, but not used: the period is always the previous calendar month.

Request payload

{
  "store_id": 3007
}

Response body

The payload is inside data. Status 202 when a new report is queued; 200 when last month's report already exists. The fields are the same as Generate an insight report.

FieldTypeDescription
insight_report_idintegerThe report's id. Use it as report_id in Check report status.
store_idintegerThe location.
review_site_idnullnull: the report combines all the location's review sites.
publisherstringall.
yearintegerThe year of the previous calendar month.
monthintegerThe previous calendar month.
themestringThe report theme, from the account's industry (general when no industry is set).
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: last month's report already existed 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": null,
    "publisher": "all",
    "year": 2026,
    "month": 9,
    "theme": "business-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

A new report queued (202): see Response payload.

Last month's report already exists (200):

{
  "data": {
    "insight_report_id": 286,
    "store_id": 3007,
    "review_site_id": null,
    "publisher": "all",
    "year": 2026,
    "month": 9,
    "theme": "business-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,
    "deduped": true
  }
}

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 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 store_id missing

{
  "message": "The store id field is required.",
  "errors": {
    "store_id": [
      "The store id field is required."
    ]
  }
}

429 Too many requests

{
  "message": "Too Many Attempts."
}
StatusMeaning
200Last month's report already exists; it's 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.
422store_id 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; 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/generate" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"store_id": 3007}'

Did this page help you?