Plan list (account)

Get every plan assigned to a given company (account) via the company_plans pivot, including each plan's features, feature options, and plan-level review sites, ordered cheapest-first.

Auth: Both — no authentication required. The route lives in the public group ("reference data called by the SPA before login"); returns true. The endpoint scopes the target company purely by the company_id query param. When you omit company_id, it falls back to the authenticated user's, and finally to 1 if no user is present. Reachable scope is therefore identical for partner and account roles. Whatever company_id is passed (validated only as Must be an existing account, no hierarchy/an ownership check). Pass the account company id as ?company_id=brandId.

Rate limit: 100 requests/min.

Request

  • Query: company_id (integer, optional) — company (account) id to list plans for; must be an existing account. If omitted, defaults to the logged-in user's company, else 1.

Response{ data. } envelope. Note: the controller returns successResponse(['data' => $plans]), so the payload is double-nested as { "data": { "data": [.plans ] } }. Each array element is a raw Plan model with all plans.* columns plus the included relations:

  • data.data[].id (integer)
  • data.data[].plan_name (string)
  • data.data[].price (float) — cast to float; list ordered by price ascending
  • data.data[].original_price (float|null)
  • data.data[].status (string enum)
  • data.data[].plan_type (string enum)
  • data.data[].tier_slug (string|null)
  • data.data[].enforcement_mode (string enum|null)
  • data.data[].is_admin_managed (boolean) — cast to bool
  • data.data[].description (string|null)
  • data.data[].plan_end_date (datetime|null) — cast to datetime
  • data.data[].short_info (string|null)
  • data.data[].created_at / updated_at / deleted_at (datetime|null)
  • data.data[].features[] (array) — selected cols only: id, plan_id, feature_name, enabled, included_units, limit_type, hard_stop
  • data.data[].features[].options[] (array) — selected cols only: id, plan_feature_id, feature_key, feature_value
  • data.data[].plan_review_sites[] (array, relation planReviewSites) — selected cols only: id, plan_id, review_site_id, pull_frequency, pull_interval
  • data.data[].plan_review_sites[].review_site (object, relation reviewSite) — selected cols only: id, name

Returns 404 (notFoundResponse('Company not found.')) when the resolved company id does not exist. 422 on company_id validation failure; 500 (defaultErrorResponse) on a thrown exception (also logged via writeDebugLog at emergency).

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Query Params
string
Response

Language
Credentials
Bearer
JWT
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json