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
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://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_idswitches the target.store_idnarrows 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:
| Field | Type | Required | Description |
|---|---|---|---|
sort_field | string | optional | store_name, address, zip, city_name, state_code, company_phone, country_name, state_name, storeid, account_name (default store_name) |
sort_by | string | optional | asc / ASC / desc / DESC |
search_field | string | optional | same column set as sort_field |
search_value | string | optional | NameNoAngleBrackets |
active_plan | int (0|1) | optional | 1 = only stores with an active plan |
company_id | int | optional | exists (bundle 1/2/3, not deleted) + an ownership check |
store_id | int | optional | exists:store + an ownership check |
limit | int | optional | page 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
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
| Status | Meaning |
|---|---|
401 | The bearer token is missing, expired or invalid |
422 | The request failed validation — the response names the fields |
500 | Unexpected 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}'Updated 8 days ago
