Partner-wide location list
Overview
Get a paginated list of all store locations under the authenticated partner (aggregated across every account the partner owns). Each row is joined to its account name, address, and active-plan name + dates. When you set call_for it instead returns a flat label/value list for dropdowns (with an All option prepended when more than one store).
Prerequisites
- A bearer token. Callable with Partner tokens.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
GET /api/v1/partner/store/list
Authentication
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Who can call it: Partner tokens.
-
Under the
partner/group. -
Scope is baked into (the caller's partner company id).
-
Filter params (
account_id,client_account_id,location_id,client_location_id) are all additionally validated by an ownership check (a check that the record sits inside your own hierarchy). Values outside the partner's tree yield an empty page.
Rate limit
- No rate limit.
Query parameters
- Query:
limit(integer, optional) — page size, default 10. - Query:
page(integer, optional) — page number. - Query:
plan_subscription(string, optional) — one ofall(default),active,inactive. - Query:
active_plan(integer, optional) — accepted but ignored by this endpoint; useplan_subscriptionto filter by plan state. - Query:
account_id(integer, optional) — account filter; must be an existing account inside your own account tree. - Query:
client_account_id(string, optional, max 255) — external account id, resolved toaccount_id; an ownership check. - Query:
location_id(integer, optional) — single store filter; must be an existing location. - Query:
client_location_id(string, optional, max 255) — external location id, resolved to a store; an ownership check. - Query:
call_for(string, optional) — any value returns a flat label/value dropdown list instead of the paginated table. - Query:
sort_field(string, optional) — defaultstore_name. - Query:
sort_by(string, optional) —ASC(default) orDESC. - Query:
search_field/search_value(string, optional) — column + term to filter on.
Response
data[].id(integer) — store id.data[].name(string) — store name.data[].storeid(string) — store external id.data[].client_location_id(string) — partner-supplied location id.data[].account_name(string) — parent account name.data[].store_name(string) —name - storeidcomposite.data[].full_address,address1,address2,zip(string) — location address fields.data[].plan_name(string) — active plan name.data[].activation_date,expiry_date,cancellation_date(string|null) — plan window.data[].sub_partner_name(string|null) — owning sub-partner's name when the store belongs to one, elsenull.
200 Success · 200
200{
"data": [
{
"id": 2,
"name": "Demo Brew",
"storeid": "Alameda County",
"client_location_id": "",
"account_name": "Shout About Us",
"store_name": "Demo Brew - Alameda County",
"full_address": "123 Main St",
"address1": "123 Main St",
"address2": null,
"zip": "92014",
"plan_name": "Gold",
"activation_date": "2026-06-16 09:48:56",
"expiry_date": "2026-06-30 23:59:59",
"cancellation_date": null,
"sub_partner_name": null
}
],
"links": {
"first": "...?page=1",
"last": "...?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"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 GET \
--url "https://production-api.shoutaboutus.com/api/v1/partner/store/list?limit=10&page=1&plan_subscription=active" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 8 days ago
