Get billing detail for an account
Overview
Get per-store billing detail for one account under the authenticated partner. For model-a each store lists per-feature usage/limit/cost/overage rows. For model-b each store shows a flat charge plus an enabled-feature list. Also returns feature_options (with an All entry) and a flattened per_location_drilldown. An optional feature query narrows the rows to one metered feature.
Prerequisites
- Obtain a bearer token with Partner access.
- Identify the target account's numeric
brandId.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
GET /api/v1/partner/billing/account/{brandId}
Authentication
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Who can call it: Partner tokens.
-
This endpoint is in the
partner/billingroute group. -
It resolves the caller's partner with
getAuthPartnerand returns403when no partner is available. -
It loads the
{brandId}account (returning404if it is missing) and returns403unless that account belongs to the caller's partner.
Rate limit
This endpoint has no rate limit.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brandId | integer | Required | Digits only. |
Query parameters
- Query:
year(integer, optional) — 2000–2100; defaults to current year. - Query:
month(integer, optional) — 1–12; defaults to current month. - Query:
feature(string, optional, max 128) — metered feature key to narrowstores[].features/per_location_drilldown;allor omit for every enabled feature. An unknown/disabled feature key returns a 422 validation error onfeature.
Response
data.data.account_id(int),account_name(string|null),period(stringYYYY-MM),billing_model(string|null),contract_model(string|null),plan_subtitle(string|null).data.data.feature_options(array) —{ value, label }pairs (first entry is{ "value": "all", "label": "All" }).data.data.per_location_drilldown(array) — flattened store×feature rows:store_id,store_nameplus the feature fields below (andflat_chargefor model-b).data.stores(array) — per store:store_id,store_name,features[]. Model-a feature row:feature_name,feature_label,units_consumed,limit(int|null),units_over,overage_rate(number|null),hard_stop(bool),cost,overage_cost,percentage(number|null),row_status(on_track/approaching/overage_billing/hard_stop_over_limit/halted). Model-b stores additionally includeflat_charge(number) andfeatures_enabled(string[]); their feature rows carryoverage_rate=null,cost=0,overage_cost=0,row_statusofon_track/warning/halted.
200 success · 200
200{
"data": {
"data": {
"account_id": 42,
"account_name": "Acme Brand",
"period": "2026-05",
"billing_model": "usage-based",
"contract_model": "model-a",
"feature_options": [{ "value": "all", "label": "All" }],
"per_location_drilldown": [],
"stores": []
}
}
}403 account not under partner · 403
403{
"message": "Forbidden",
"status": "error",
"errors": "Brand does not belong to your partner."
}404 account not found · 404
404{
"message": "Not Found",
"status": "error",
"errors": "Brand not found."
}Errors
| Status | Meaning |
|---|---|
401 | The bearer token is missing, expired or invalid |
403 | Account not under partner |
404 | Account not found |
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/billing/account/123" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 10 days ago
