List all locations under your partner

Overview

Get every location across every account under your partner, with its account name, address, and current plan.

Use this for a partner-level view of everything you manage, or to find a location's store_id.

You'll need a partner token. Results are paginated. Add call_for=dropdown to get a simple name/ID list instead.

Returns one entry per active or pending location.

Prerequisites

Base URL

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

Endpoint

GET /api/v1/partner/store/list

Authentication

Partner token

  • Lists locations in accounts under your partner and under your sub-partners.
  • A user who is assigned to particular accounts or locations sees only those accounts' locations.
  • account_id and client_account_id must be inside your account tree; otherwise 422. A location_id or client_location_id that isn't one of yours returns an empty page.

Rate limit

This endpoint has no rate limit.

Request parameters

ParameterInTypeRequiredDescription
limitqueryintegerNoPage size, 10 to 100. Default 10. Values below 10 are raised to 10; above 100 returns 422. With call_for=dropdown, at most 50 entries are returned, and with no limit the whole list is returned.
pagequeryintegerNoPage number. Default 1.
plan_subscriptionquerystringNoall (default), active (the location's latest plan is active or expired) or inactive (it's inactive or closed).
active_planqueryintegerNoIgnored by this endpoint. Use plan_subscription.
account_idqueryintegerNoReturn only this account's locations.
client_account_idquerystringNoReturn only the locations of the account with this id of yours. Max 255 characters.
location_idqueryintegerNoReturn only this location. Must be an existing location id.
client_location_idquerystringNoReturn only the location with this id of yours. Max 255 characters.
call_forquerystringNodropdown to get a label/value list instead of the paginated list.
sort_fieldquerystringNoA field of the response to sort by, e.g. store_name (default), account_name or plan_name.
sort_byquerystringNoASC (default) or DESC.
search_fieldquerystringNoname (also matches client_location_id and storeid), storeid, client_location_id, full_address, plan_name (exact match) or account_name. Use with search_value.
search_valuequerystringNoThe text to search for.

Request body

None.

Request payload

None.

Response body

The paginated list. Each entry in data is one location.

FieldTypeDescription
dataarrayThe locations on this page.
data[].idintegerThe location's id (store_id).
data[].namestringThe location's name.
data[].storeidstringThe location's display label.
data[].client_location_idstring or nullYour own id for the location.
data[].account_namestringThe account's name.
data[].store_namestringThe name, plus - <storeid> when it has one.
data[].full_addressstringThe address, plus - <address2> when it has a second line.
data[].address1stringStreet address.
data[].address2string or nullSecond address line.
data[].zipstringPostal code.
data[].plan_namestring or nullThe plan on the location's latest subscription.
data[].activation_datestring or nullWhen that subscription started.
data[].expiry_datestring or nullWhen that subscription ends.
data[].cancellation_datestring or nullWhen it was cancelled, or null.
data[].sub_partner_namestring or nullThe sub-partner the location belongs to, or null when its account sits directly under your partner.
linksobjectURLs of the first, last, prev and next pages (null when there's no such page).
metaobjectPaging details: current_page, from, last_page, links, path, per_page, to and total.

With call_for=dropdown, the payload is inside data instead:

FieldTypeDescription
statusstringsuccess.
responsearrayThe locations. When there's more than one and no search_value, the first entry is {"label": "All", "value": ""}.
response[].labelstringThe location's name, plus - <client_location_id> (or - <storeid> when it has no client_location_id).
response[].valueintegerThe location's id.

Response payload

{
  "data": [
    {
      "id": 3007,
      "name": "Acme Coffee",
      "storeid": "Sydney",
      "client_location_id": "docs-test-loc-001",
      "account_name": "Acme Coffee",
      "store_name": "Acme Coffee - Sydney",
      "full_address": "1 George St",
      "address1": "1 George St",
      "address2": null,
      "zip": "2000",
      "plan_name": "Growth — Unlimited",
      "activation_date": "2026-10-01 01:00:23",
      "expiry_date": "2026-10-31 23:59:59",
      "cancellation_date": null,
      "sub_partner_name": null
    }
  ],
  "links": {
    "first": "https://production-api.shoutaboutus.com/api/v1/partner/store/list?page=1",
    "last": "https://production-api.shoutaboutus.com/api/v1/partner/store/list?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "links": [
      { "url": null, "label": "&laquo; Previous", "page": null, "active": false },
      { "url": "https://production-api.shoutaboutus.com/api/v1/partner/store/list?page=1", "label": "1", "page": 1, "active": true },
      { "url": null, "label": "Next &raquo;", "page": null, "active": false }
    ],
    "path": "https://production-api.shoutaboutus.com/api/v1/partner/store/list",
    "per_page": 10,
    "to": 1,
    "total": 1
  }
}

Examples

Success payload

With call_for=dropdown:

{
  "data": {
    "status": "success",
    "response": [
      { "label": "All", "value": "" },
      { "label": "Acme Coffee - docs-test-loc-001", "value": 3007 },
      { "label": "Acme Coffee - Circular Quay - Sydney", "value": 3008 }
    ]
  }
}

Error payload

422 Page size too large

{
  "message": "The limit field must not be greater than 100.",
  "errors": {
    "limit": ["The limit field must not be greater than 100."]
  }
}

422 Account outside your tree

{
  "message": "The selected account id does not belong to your company hierarchy.",
  "errors": {
    "account_id": ["The selected account id does not belong to your company hierarchy."]
  }
}
StatusMeaning
200The locations.
401The token is missing, expired or invalid.
422A parameter failed validation, e.g. limit above 100, an unknown plan_subscription, or an account outside your tree.
500Unexpected server error.

Example request

curl --request GET \
  --url "https://production-api.shoutaboutus.com/api/v1/partner/store/list?limit=10&page=1&plan_subscription=all" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?