List locations for review-site management

Overview

Returns a paginated list of stores accessible to the authenticated user. Each row is joined to full location, account, and geo detail plus the active store_plan (with plan features) and a generated connect_page_url. Used here to pick a location for review-site management. Backs getUserStoreWithLocation — this is the same POST /api/v1/store/list endpoint that Locations lists.

Prerequisites

  • A bearer token. Callable with Partner and Account tokens.

Base URL

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

Endpoint

POST /api/v1/store/list

Authentication

  • Requires a bearer token in the Authorization: Bearer <bearer-token> header.

  • Who can call it: Partner and Account tokens.

  • Callable by a Partner or Account user, under the role-agnostic store/ group.

  • Default scope is the caller's accessible stores. company_id switches the target. store_id narrows to one store.

  • Both id filters must sit inside your own account tree. This confines account users to their own stores. A partner reaches its whole tree.

Rate limit

  • No rate limit.

Request body

  • Query: page (integer, optional) — pagination page.
  • Body:
FieldTypeRequiredDescription
sort_fieldstringoptionalstore_name, address, zip, city_name, state_code, company_phone, country_name, state_name, storeid, account_name (default store_name)
sort_bystringoptionalasc / ASC / desc / DESC
search_fieldstringoptionalsame column set as sort_field
search_valuestringoptionalNameNoAngleBrackets
active_planint (0|1)optional1 = only stores with an active plan
company_idintoptionalexists (bundle 1/2/3, not deleted) + an ownership check
store_idintoptionalexists:store + an ownership check
limitintoptionalpage size (default 10)
{
  "sort_field": "store_name",
  "sort_by": "ASC",
  "search_field": "store_name",
  "search_value": "Main St",
  "active_plan": 1,
  "limit": 10
}

Response

200 Success · 200

{
  "data": {
    "current_page": 1,
    "data": [
      {
        "id": 14,
        "account_name": "John Doe",
        "store_name": "GSLoc",
        "store_full_name": "GSLoc - SID123",
        "storeid": "SID123",
        "client_location_id": "",
        "address": "Test-address",
        "address1": "Test-address",
        "address2": null,
        "zip": "46546",
        "country_id": 233,
        "country_name": "United States",
        "country_code": "US",
        "state_id": 1416,
        "state_name": "California",
        "state_code": "CA",
        "city_id": 133682,
        "city_name": "Del Mar",
        "company_phone": "8888888888",
        "brand_company_id": 12,
        "connect_page_url": "https://production.shoutaboutus.com/connect-review-sites/xxxxx",
        "active_store_plan": {
          "id": 16,
          "store_id": 14,
          "plan_id": 4,
          "status": "active",
          "plan_start": "2026-06-22T06:55:59.000000Z",
          "plan_end": "2026-06-30T23:59:59.000000Z",
          "cancel_subscription_at": null,
          "plan": {
            "id": 4,
            "plan_name": "Gold",
            "features": [
              {
                "id": 68,
                "plan_id": 4,
                "feature_name": "ai_response",
                "options": []
              }
            ]
          }
        }
      }
    ],
    "per_page": 10,
    "total": 1
  }
}

Errors

StatusMeaning
401The bearer token is missing, expired or invalid
422The request failed validation — the response names the fields
500Unexpected server error

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/store/list" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"sort_field": "store_name", "sort_by": "ASC", "search_field": "store_name", "search_value": "Main St", "active_plan": 1, "limit": 10}'

Did this page help you?