Assign plan to an account
Overview
Assign a plan to an account and propagate it to every store under that account. Existing active/expired store_plans are closed. A fresh active store_plan (running to month-end) is created per store, and the account-level company_plans link is updated/created.
Prerequisites
- A bearer token. Callable with Partner tokens.
- The
brandIdof the record you are targeting.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
POST /api/v1/partner/account/{brandId}/assign-plan
Authentication
- Requires a bearer token in the
Authorization: Bearer <bearer-token>header. - Who can call it: Partner tokens.
- Authentication is under
partner/account. - Path id must resolve to a
bundle_id=3company (404 if missing, 403 if not an account), with a partner (getParentCompany). It must also passcanManageBrandelse 403. - The plan must be available to that partner via
company_plans, and must match the partner billing model: plan-based partners may only assignis_admin_managed=1plans. - Usage-based partners only
is_admin_managed=0(else 403).
Rate limit
- No rate limit.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brandId | integer | Required | Digits only. |
Request body
- Body (JSON):
| Field | Type | Required | Description |
|---|---|---|---|
plan_id | integer | yes | Must be an existing plan; further checked for partner availability + billing-model match in the controller. |
{
"plan_id": 3
}Response
data.data.account(object) — freshCompanymodel row for the account.data.data.plan(object) — the assignedPlanwithfeaturesandplanReviewSites.reviewSiteincluded (same shape as Get assigned plan for account).data.data.stores_assigned(integer) — number of stores the plan was propagated to.
200 Success · 200
200{
"data": {
"data": {
"account": { "id": 42, "name": "Acme Brand" },
"plan": { "id": 10, "plan_name": "ResponseScribe", "features": [], "plan_review_sites": [] },
"stores_assigned": 4
}
}
}403 Billing-model mismatch · 403
403{
"message": "Forbidden",
"status": "error",
"errors": "Plan-based companies can only be assigned admin-managed plans."
}404 Plan not found · 404
404{
"message": "Not Found",
"status": "error",
"errors": "Plan not found."
}Errors
| Status | Meaning |
|---|---|
401 | The bearer token is missing, expired or invalid |
403 | Billing-model mismatch |
404 | Plan not found |
422 | The request failed validation — the response names the fields |
500 | Unexpected server error |
Example request
curl --request POST \
--url "https://production-api.shoutaboutus.com/api/v1/partner/account/123/assign-plan" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"plan_id": 3}'Updated 10 days ago
Did this page help you?
