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

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://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.

FieldTypeDescription
dataobjectYour billing setup.
data.partnerobjectYour partner.
data.partner.idintegerYour partner's id.
data.partner.namestringYour partner's name.
data.partner.billing_modelstring or nullplan-based (bundled allowances) or usage-based (metered), or null when not configured.
data.partner.contract_modelstring or nullmodel-a (features can go over their limit and bill overage) or model-b (features always stop at their limit), or null.
data.configobject or nullYour billing configuration, or null when none is set.
data.config.idintegerThe configuration's id.
data.config.company_idintegerYour partner's id.
data.config.contract_modelstringmodel-a or model-b.
data.config.location_ratestringThe price per location, as a decimal string.
data.config.one_time_feestringThe one-time fee, as a decimal string.
data.config.created_atstringWhen the configuration was created.
data.config.updated_atstringWhen it was last changed.
data.config.deleted_atstring or nullAlways null here.
data.feature_ratesarrayThe rate for each billed feature.
data.feature_rates[].feature_namestringThe feature, e.g. ai_response or per_location_cost.
data.feature_rates[].rate_per_unitstringThe price per unit, as a decimal string.
data.feature_rates[].enabledbooleanWhether the feature is turned on for your partner.
data.review_site_universearrayThe review sites available to your partner's plans, with the default collection schedule.
data.review_site_universe[].review_site_idintegerThe review site's id.
data.review_site_universe[].namestringThe review site's name.
data.review_site_universe[].colorstringThe review site's brand colour, as a hex code.
data.review_site_universe[].pull_frequencystringThe default collection frequency, daily.
data.review_site_universe[].pull_intervalintegerThe default interval, 1.
data.review_site_universe[].pull_timesarray of stringsThe default collection time, ["06:00"].
data.review_site_universe[].pull_daysarray of integersThe default collection days, [].
metaobjectAbout the setup.
meta.plans_read_onlybooleanAlways 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."
}
StatusMeaning
200Your billing setup.
401The token is missing, expired or invalid.
403The token isn't linked to a partner.
500Unexpected 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'

Did this page help you?