Get your billing setup
Overview
See how your partner is billed: bundled or metered, the contract model, and the rates that apply.
Use this once, when you're setting up billing displays in your own product, or when you need to know whether allowances or metering apply to your locations.
You'll need a partner token.
Returns your billing model and its configuration. Read-only.
Prerequisites
- A Partner token. See Authentication.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
GET /api/v1/partner/plan-builder/context
Authentication
Partner token
- Always returns your own partner's billing setup. There is nothing to scope and no id to pass.
- A token that isn't linked to a partner gets
403.
Rate limit
This endpoint has no rate limit.
Request parameters
None.
Request body
None.
Request payload
None.
Response body
The payload is inside data.
| Field | Type | Description |
|---|---|---|
data | object | Your billing setup. |
data.partner | object | Your partner. |
data.partner.id | integer | Your partner's id. |
data.partner.name | string | Your partner's name. |
data.partner.billing_model | string or null | plan-based (bundled allowances) or usage-based (metered), or null when not configured. |
data.partner.contract_model | string or null | model-a (features can go over their limit and bill overage) or model-b (features always stop at their limit), or null. |
data.config | object or null | Your billing configuration, or null when none is set. |
data.config.id | integer | The configuration's id. |
data.config.company_id | integer | Your partner's id. |
data.config.contract_model | string | model-a or model-b. |
data.config.location_rate | string | The price per location, as a decimal string. |
data.config.one_time_fee | string | The one-time fee, as a decimal string. |
data.config.created_at | string | When the configuration was created. |
data.config.updated_at | string | When it was last changed. |
data.config.deleted_at | string or null | Always null here. |
data.feature_rates | array | The rate for each billed feature. |
data.feature_rates[].feature_name | string | The feature, e.g. ai_response or per_location_cost. |
data.feature_rates[].rate_per_unit | string | The price per unit, as a decimal string. |
data.feature_rates[].enabled | boolean | Whether the feature is turned on for your partner. |
data.review_site_universe | array | The review sites available to your partner's plans, with the default collection schedule. |
data.review_site_universe[].review_site_id | integer | The review site's id. |
data.review_site_universe[].name | string | The review site's name. |
data.review_site_universe[].color | string | The review site's brand colour, as a hex code. |
data.review_site_universe[].pull_frequency | string | The default collection frequency, daily. |
data.review_site_universe[].pull_interval | integer | The default interval, 1. |
data.review_site_universe[].pull_times | array of strings | The default collection time, ["06:00"]. |
data.review_site_universe[].pull_days | array of integers | The default collection days, []. |
meta | object | About the setup. |
meta.plans_read_only | boolean | Always true: plans can't be changed through the API. |
Response payload
{
"data": {
"data": {
"partner": {
"id": 2,
"name": "Shout About Us",
"billing_model": "plan-based",
"contract_model": "model-a"
},
"config": {
"id": 1,
"company_id": 2,
"contract_model": "model-a",
"location_rate": "4.00",
"one_time_fee": "0.00",
"created_at": "2026-05-28T14:00:51.000000Z",
"updated_at": "2026-05-28T14:00:51.000000Z",
"deleted_at": null
},
"feature_rates": [
{
"feature_name": "ai_response",
"rate_per_unit": "0.0800",
"enabled": true
},
{
"feature_name": "per_location_cost",
"rate_per_unit": "4.0000",
"enabled": true
},
{
"feature_name": "per_pull_data",
"rate_per_unit": "0.0100",
"enabled": true
},
{
"feature_name": "response_posting",
"rate_per_unit": "0.0400",
"enabled": true
},
{
"feature_name": "response_to_past_reviews",
"rate_per_unit": "0.0500",
"enabled": true
},
{
"feature_name": "review_flag",
"rate_per_unit": "0.0800",
"enabled": true
},
{
"feature_name": "review_solicitation_email",
"rate_per_unit": "0.0200",
"enabled": true
},
{
"feature_name": "review_solicitation_sms",
"rate_per_unit": "0.0600",
"enabled": true
},
{
"feature_name": "review_widgets",
"rate_per_unit": "0.1000",
"enabled": true
}
],
"review_site_universe": [
{
"review_site_id": 1,
"name": "Yelp",
"color": "#d32200",
"pull_frequency": "daily",
"pull_interval": 1,
"pull_times": [
"06:00"
],
"pull_days": []
},
{
"review_site_id": 3,
"name": "Facebook",
"color": "#1877F2",
"pull_frequency": "daily",
"pull_interval": 1,
"pull_times": [
"06:00"
],
"pull_days": []
},
{
"review_site_id": 44,
"name": "Google",
"color": "#4285F4",
"pull_frequency": "daily",
"pull_interval": 1,
"pull_times": [
"06:00"
],
"pull_days": []
}
]
},
"meta": {
"plans_read_only": true
}
}
}Examples
Success payload
See Response payload.
Error payload
403 No partner
{
"message": "Forbidden",
"status": "error",
"errors": "Authenticated user is not associated with an partner."
}| Status | Meaning |
|---|---|
200 | Your billing setup. |
401 | The token is missing, expired or invalid. |
403 | The token isn't linked to a partner. |
500 | Unexpected server error. |
Example request
curl --request GET \
--url "https://production-api.shoutaboutus.com/api/v1/partner/plan-builder/context" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 17 days ago
Did this page help you?
