Plan-builder context (partner)

Overview

Get the authenticated partner's billing model, contract model, billing config, per-feature rates, and review-site universe — everything the Plan Builder UI needs to render.

Prerequisites

  • A bearer token. Callable with Partner tokens.

Base URL

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

Endpoint

GET /api/v1/partner/plan-builder/context

Authentication

  • Requires a bearer token in the Authorization: Bearer <bearer-token> header.
  • Who can call it: Partner tokens.
  • The route is in the authenticated group with no extra route-level guard. The endpoint enforces the role in the controller.
  • partnerPlanBuilderContext calls getAuthPartner, walking the company tree up to the bundle_id=1 partner.
  • 403 if no partner resolves.
  • Any user inside a partner tree (partner/account/location) resolves to and is scoped by their owning partner.

Rate limit

  • No rate limit.

Request

— no path/query/body params.

Response

  • partner{ id, name, billing_model, contract_model }
  • config — partner CompanyBillingConfig (location_rate, one_time_fee, …) or null
  • feature_rates[]{ feature_name, rate_per_unit, enabled }
  • review_site_universe[]{ review_site_id, name, color, pull_frequency, pull_interval, pull_times[], pull_days[] }
  • meta.plans_read_onlytrue for plan-based partners or when the caller is a sub-partner; false otherwise

200 OK · 200

{
  "data": {
    "data": {
      "partner": {
        "id": 5,
        "name": "Yelp partner",
        "billing_model": "plan-based",
        "contract_model": "model-a"
      },
      "config": {
        "id": 1,
        "company_id": 5,
        "contract_model": "model-a",
        "location_rate": "4.01",
        "one_time_fee": "0.00"
      },
      "feature_rates": [
        {
          "feature_name": "per_location_cost",
          "rate_per_unit": "4.0100",
          "enabled": true
        },
        {
          "feature_name": "ai_response",
          "rate_per_unit": "0.0800",
          "enabled": true
        }
      ],
      "review_site_universe": [
        {
          "review_site_id": 44,
          "name": "Google",
          "color": "#3774ee",
          "pull_frequency": "daily",
          "pull_interval": 1,
          "pull_times": [
            "06:00"
          ],
          "pull_days": []
        }
      ]
    },
    "meta": {
      "plans_read_only": true
    }
  }
}

Errors

StatusMeaning
401The bearer token is missing, expired or invalid
403Returned if no partner resolves
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?