Load a widget's reviews and settings

Overview

Fetch everything the embedded widget needs to render: its style and the reviews to show.

Called by the embed code when the page loads.

You'll need the widget's unique id, which is in the embed code.

Returns the widget configuration and, with feed_data=1, its review feed. A bearer token is required.

Without feed_data (or with feed_data=0) you get the widget's settings only, and data.data is null. With feed_data=1 you get a page of reviews from the widget's locations, newest first, with the average rating and the widget's settings. The reviews are limited to the review site saved in the widget's options (reviewSiteValue), and the page size is limit, else the widget's numberOfReviews, else 3.

Prerequisites

  • A bearer token. See Authentication.
  • The widget's unique_id, from the embed code or from List review widgets.
  • The widget's location needs an active widget add-on; otherwise you get 400.

Base URL

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

Endpoint

GET /api/v1/widget

Authentication

Partner or Account token

  • Any valid token works. The widget doesn't have to be in your account tree, because the widget is shown on public pages.
  • A token is still required: without one you get 401.

Rate limit

This endpoint has no rate limit.

Request parameters

ParameterInTypeRequiredDescription
unique_idquerystringYesThe widget's unique id. Must match an existing widget.
feed_dataqueryintegerNo1 returns the review feed and avg_rating. 0 or left out returns the settings only.
limitqueryintegerNoFeed page size, 10–100 (values below 10 are raised to 10; above 100 returns 422). When omitted, the widget's numberOfReviews setting, or 3 if that isn't set (either may be below 10).
pagequeryintegerNoFeed page to return. Default 1.

Request body

None.

Request payload

None.

Response body

There are two shapes.

  • Config only (feed_data left out or 0): the payload is inside data: data.widget, data.status and data.data (null).
  • Feed (feed_data=1): not wrapped. data is the array of reviews, next to widget, status, avg_rating, links and meta.
FieldTypeDescription
data.widgetobjectConfig only. The widget's settings (fields below).
data.widget.idintegerThe widget's id.
data.widget.company_idinteger or nullThe widget's account, when one is set; otherwise null.
data.widget.store_idintegerThe location the widget belongs to.
data.widget.widget_textstring or nullNot set by the API; null.
data.widget.widget_typestring or nullNot set by the API; null. The style is widget_type_id.
data.widget.widget_type_idintegerThe widget's style, from List widget styles.
data.widget.widget_titlestring or nullThe widget's title.
data.widget.sub_typestring or nullNot set by the API; null.
data.widget.unique_idstringThe widget's unique id, used in the embed code.
data.widget.widget_optionsobject or nullThe widget's saved settings, as sent to Create or update a widget. The feed uses numberOfReviews and reviewSiteValue.
data.widget.widget_options.numberOfReviewsintegerReviews per feed page when limit isn't sent.
data.widget.widget_options.reviewSiteValueobjectThe review site the feed is filtered to.
data.widget.widget_options.reviewSiteValue.valueintegerThe review site id.
data.widget.widget_options.reviewSiteValue.labelstringThe review site name.
data.widget.created_atstringWhen the widget was created (ISO 8601).
data.widget.updated_atstringWhen the widget was last changed (ISO 8601).
data.statusstringConfig only. success.
data.datanullConfig only. Always null: no feed was asked for.
data[]array of objectsFeed. The reviews on this page, newest first (fields below).
data[].idintegerThe review id.
data[].source_platformstringThe platform the review came from, e.g. google.
data[].reviewobjectThe review.
data[].review.idintegerThe review id.
data[].review.reviewerstringThe reviewer's name as shown on the review site.
data[].review.ratingintegerStar rating.
data[].review.messagestringThe review text.
data[].review.review_datestring or nullWhen the review was posted.
data[].reviewsiteobjectThe review site.
data[].reviewsite.idintegerThe review site id.
data[].reviewsite.namestringThe review site name.
data[].reviewsite.linkstringThe review site's home page.
data[].reviewsite.review_site_logostringURL of the site's logo.
data[].reviewsite.review_site_colorstring or nullThe site's brand colour.
data[].reviewsite.auth_typestring or nullHow the site connects (see List supported review sites).
data[].reviewsite.scraping_enabledbooleanWhether reviews are collected from this site.
data[].reviewsite.posting_enabledbooleanWhether responses can be posted to this site.
data[].storeobjectThe location the review is for.
data[].store.idintegerThe location id.
data[].store.namestringThe location's name.
data[].store.slugstring or nullThe location's slug.
data[].store.addressstringThe account's address.
data[].store_reviewsiteobjectThe location's connection to the review site.
data[].store_reviewsite.idinteger or nullThe connection id.
data[].store_reviewsite.urlstring or nullThe location's page on the review site.
data[].store_reviewsite.landing_page_urlstring or nullWhere customers are sent to leave a review, when set.
data[].store_reviewsite.connection_statusstring or nullConnection status, e.g. connected.
data[].store_reviewsite.is_connectedbooleanWhether the location is connected to the site.
data[].flagarray of objectsStatus notes on the review's response or removal flag (flag, title, statusColor, icon). Empty when there are none.
data[].planstringPlan name on the latest response update, or an empty string.
data[].review_flagobject or nullThe removal flag on the review; null when it isn't flagged.
data[].is_flaggablebooleanWhether the review can be flagged for removal.
data[].flag_statusstringRemoval flag status; none when not flagged.
data[].flag_detailsobject or nullThe flag's reason, reason_identifier, flag_reason_detail and flag_date; null when not flagged.
data[].response_capabilitiesobjectWhether a response can be written for this review.
data[].response_capabilities.manualbooleanA response can be written by hand.
data[].response_capabilities.aibooleanAn AI response can be generated.
data[].response_capabilities.reasonstring or nullWhy responses are unavailable; null when they are available.
data[].responseobject or nullThe response to the review; null when there is none.
data[].response.idintegerThe response id.
data[].response.statusstringResponse status, e.g. complete or pending.
data[].response.public_contentsstring or nullThe public response text.
data[].response.response_datestring or nullWhen the response was posted.
data[].response.deletedobject or nullRemoval details when the response was removed; otherwise null.
widgetobjectFeed. The widget's settings, the same fields as data.widget.
statusstringFeed. success.
avg_ratingnumberFeed. Average rating across the feed's locations, to 2 decimal places.
linksobjectFeed. first, last, prev and next page URLs (prev/next are null at the ends).
metaobjectFeed. Pagination: current_page, from, last_page, links, path, per_page, to, total.

Response payload

{
  "data": {
    "widget": {
      "id": 5,
      "company_id": null,
      "store_id": 3007,
      "widget_text": null,
      "widget_type": null,
      "widget_type_id": 1,
      "widget_title": "My Reviews",
      "sub_type": null,
      "unique_id": "abc123",
      "widget_options": {
        "numberOfReviews": 5,
        "reviewSiteValue": {
          "value": 44,
          "label": "Google"
        }
      },
      "created_at": "2026-06-15T10:30:00.000000Z",
      "updated_at": "2026-06-15T10:30:00.000000Z"
    },
    "status": "success",
    "data": null
  }
}

Examples

Success payload

Settings only (feed_data=0): see Response payload.

With feed_data=1, a page of reviews:

{
  "data": [
    {
      "id": 1546,
      "source_platform": "google",
      "review": {
        "id": 1546,
        "reviewer": "Jane D.",
        "rating": 5,
        "message": "Fantastic service!",
        "review_date": "2026-06-14 12:00:00"
      },
      "reviewsite": {
        "id": 44,
        "name": "Google",
        "link": "https://www.google.com",
        "review_site_logo": "https://d2ny6zb7otrnhl.cloudfront.net/static/images/img-google.png",
        "review_site_color": "#4285F4",
        "auth_type": "oauth",
        "scraping_enabled": true,
        "posting_enabled": true
      },
      "store": {
        "id": 3007,
        "name": "Demo Store",
        "slug": "demo-store",
        "address": "123 Main St, Sydney, NSW"
      },
      "store_reviewsite": {
        "id": 91,
        "url": "https://maps.google.com/?cid=1234567890",
        "landing_page_url": null,
        "connection_status": "connected",
        "is_connected": true
      },
      "flag": [],
      "plan": "",
      "review_flag": null,
      "is_flaggable": false,
      "flag_status": "none",
      "flag_details": null,
      "response_capabilities": {
        "manual": true,
        "ai": true,
        "reason": null
      },
      "response": null
    }
  ],
  "widget": {
    "id": 5,
    "company_id": null,
    "store_id": 3007,
    "widget_text": null,
    "widget_type": null,
    "widget_type_id": 1,
    "widget_title": "My Reviews",
    "sub_type": null,
    "unique_id": "abc123",
    "widget_options": {
      "numberOfReviews": 5,
      "reviewSiteValue": {
        "value": 44,
        "label": "Google"
      }
    },
    "created_at": "2026-06-15T10:30:00.000000Z",
    "updated_at": "2026-06-15T10:30:00.000000Z"
  },
  "status": "success",
  "avg_rating": 4.5,
  "links": {
    "first": "https://production-api.shoutaboutus.com/api/v1/widget?page=1",
    "last": "https://production-api.shoutaboutus.com/api/v1/widget?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "links": [
      {
        "url": null,
        "label": "« Previous",
        "page": null,
        "active": false
      },
      {
        "url": "https://production-api.shoutaboutus.com/api/v1/widget?page=1",
        "label": "1",
        "page": 1,
        "active": true
      },
      {
        "url": null,
        "label": "Next »",
        "page": null,
        "active": false
      }
    ],
    "path": "https://production-api.shoutaboutus.com/api/v1/widget",
    "per_page": 10,
    "to": 1,
    "total": 1
  }
}

Error payload

400 No active widget add-on

{
  "message": "You do not have any active widget add-ons. Please add an add-on to your location in order to access the widget features.",
  "status": "error",
  "errors": []
}

422 unique_id is missing

{
  "message": "The unique id field is required.",
  "errors": {
    "unique_id": [
      "The unique id field is required."
    ]
  }
}

422 unique_id doesn't match a widget

{
  "message": "The selected unique id is invalid.",
  "errors": {
    "unique_id": [
      "The selected unique id is invalid."
    ]
  }
}

422 feed_data isn't 0 or 1

{
  "message": "The selected feed data is invalid.",
  "errors": {
    "feed_data": [
      "The selected feed data is invalid."
    ]
  }
}

422 limit is above 100

{
  "message": "The limit field must not be greater than 100.",
  "errors": {
    "limit": [
      "The limit field must not be greater than 100."
    ]
  }
}
StatusMeaning
200The widget's settings, or a page of its reviews.
400The widget's location has no active widget add-on.
401The token is missing, expired or invalid.
422unique_id is missing or doesn't match a widget, feed_data isn't 0 or 1, or limit is above 100.
500Unexpected server error.

Example request

curl --request GET \
  --url "https://production-api.shoutaboutus.com/api/v1/widget?unique_id=abc123&feed_data=0" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?