BlueSuite Developers
MCPTool reference

Service Plans

BlueSuite MCP tools for service plans

See connection and authentication and workflow rules before calling these tools.

Related REST API and behavior.

list_service_plans

List the recurring service plans the business offers, maintenance agreements, seasonal packages. These are templates customers subscribe to, not the subscriptions themselves.

Parameters

FieldType / accepted valuesRequiredDetails
statusarray of "draft", "active", "archived"NoFilter by draft, active or archived.
searchstringNoSearch by plan name.
pageintegerNo
per_pageintegerNominimum: 1. maximum: 100.

Result

FieldType / accepted valuesRequiredDetails
dataarray of objectYesThe matching records for this page.
paginationobjectNoHow many more pages of results exist. Absent when the API returned an unpaged result.
pagination.pageintegerWhen parent suppliedCurrent page number, 1-based.
pagination.per_pageintegerWhen parent suppliedNumber of results per page.
pagination.total_pagesintegerWhen parent suppliedTotal number of pages available.

get_service_plan

Get one service plan with its pricing, billing cycle and visit schedule.

Parameters

FieldType / accepted valuesRequiredDetails
idintegerYesService plan ID

Result

FieldType / accepted valuesRequiredDetails
dataobject or nullYesThe affected record, or the result of the operation. Null when nothing matched.

create_service_plan

Create a recurring service plan customers can subscribe to. This defines the offer, price, how often it bills, how often visits happen, and bills nobody by itself. New plans start as drafts; publish with update_service_plan_status. Note billing cycle and visit frequency are independent: a plan can bill monthly and visit quarterly.

Parameters

FieldType / accepted valuesRequiredDetails
namestringYese.g. "Annual HVAC Maintenance".
descriptionstringNo
billing_amountnumberNoCharged each billing cycle.
billing_cycle"weekly", "monthly", "quarterly", "semi_annually", "annually"NoHow often the customer is charged. Default: monthly.
billing_timing"start", "end"NoCharge at the 'start' or 'end' of each cycle. Default: start.
duration_type"until_cancelled", "fixed_end_date"No'until_cancelled' or 'fixed_end_date'. Default: until_cancelled.
duration_end_datestringNoRequired when duration_type is 'fixed_end_date' (YYYY-MM-DD).
visit_recurrence_frequencyintegerNoHow many visit_recurrence_units between visits. Default: 1.
visit_recurrence_unit"daily", "weekly", "monthly", "yearly", "custom"NoUnit for the visit schedule. Default: monthly.
no_appointmentsbooleanNoA billing-only plan: subscribers are charged but no visits are booked.
tax_ratenumberNo
tax_rate_idintegerNoTax rate preset ID.
termsstringNoTerms shown to the customer.
default_account_manager_idstringNoUUID of the default account manager. Use list_users to resolve a name.
status"draft", "active", "archived"NoDefault: draft.

Result

FieldType / accepted valuesRequiredDetails
dataobject or nullYesThe affected record, or the result of the operation. Null when nothing matched.

update_service_plan

Update a service plan. Send only what changes, the server merges it over the existing plan. Changing the price affects new subscribers; anyone already subscribed keeps billing at the terms they signed up under, since their charge lives in Stripe.

Parameters

FieldType / accepted valuesRequiredDetails
idintegerYesService plan ID
namestringNo
descriptionstringNo
billing_amountnumberNo
billing_cycle"weekly", "monthly", "quarterly", "semi_annually", "annually"No
billing_timing"start", "end"No
duration_type"until_cancelled", "fixed_end_date"No
duration_end_datestringNo
visit_recurrence_frequencyintegerNo
visit_recurrence_unit"daily", "weekly", "monthly", "yearly", "custom"No
no_appointmentsbooleanNo
tax_ratenumberNo
tax_rate_idJSON valueNo
termsstringNo
default_account_manager_idstringNoUUID of the default account manager. Use list_users to resolve names. Format: uuid.

Result

FieldType / accepted valuesRequiredDetails
dataobject or nullYesThe affected record, or the result of the operation. Null when nothing matched.

update_service_plan_status

Publish, unpublish or archive a service plan. This is the template's own status: archiving a plan stops new signups but does NOT cancel or stop billing anyone already subscribed to it.

Parameters

FieldType / accepted valuesRequiredDetails
idintegerYesService plan ID
status"draft", "active", "archived"Yesdraft (not offered), active (open for signups), archived (retired).

Result

FieldType / accepted valuesRequiredDetails
dataobject or nullYesThe affected record, or the result of the operation. Null when nothing matched.

delete_service_plan

Delete a service plan. Archive it instead if anyone has ever subscribed, archiving stops new signups and keeps the history.

Parameters

FieldType / accepted valuesRequiredDetails
idintegerYesService plan ID

Result

FieldType / accepted valuesRequiredDetails
dataobject or nullYesThe affected record, or the result of the operation. Null when nothing matched.

list_service_plan_subscriptions

List customers subscribed to service plans, with their status and billing amount. Use this to answer who is on a plan, who is paused, and who cancelled.

Parameters

FieldType / accepted valuesRequiredDetails
service_plan_idintegerNoOnly subscribers to this plan.
statusarray of "pending", "active", "paused", "cancelled", "expired"NoFilter by pending, active, paused, cancelled or expired.
pageintegerNo
per_pageintegerNominimum: 1. maximum: 100.

Result

FieldType / accepted valuesRequiredDetails
dataarray of objectYesThe matching records for this page.
paginationobjectNoHow many more pages of results exist. Absent when the API returned an unpaged result.
pagination.pageintegerWhen parent suppliedCurrent page number, 1-based.
pagination.per_pageintegerWhen parent suppliedNumber of results per page.
pagination.total_pagesintegerWhen parent suppliedTotal number of pages available.

get_service_plan_subscription

Get one subscription with its plan, customer, status and billing details.

Parameters

FieldType / accepted valuesRequiredDetails
idintegerYesSubscription ID

Result

FieldType / accepted valuesRequiredDetails
dataobject or nullYesThe affected record, or the result of the operation. Null when nothing matched.

update_service_plan_subscription

Reassign a subscription: which client it belongs to, which property it covers, or who manages the account. Price and billing cadence cannot be changed here, those live on the plan and in Stripe, and editing them in BlueSuite alone would disagree with what the customer is actually charged. There is also no way to CREATE a subscription from here: signing someone up requires collecting a payment method, which has to happen in the dashboard.

Parameters

FieldType / accepted valuesRequiredDetails
idintegerYesSubscription ID
contact_idJSON valueNoClient the subscription belongs to.
property_idJSON valueNoProperty it covers.
account_manager_idstringNoUUID of the account manager. Use list_users to resolve a name.

Result

FieldType / accepted valuesRequiredDetails
dataobject or nullYesThe affected record, or the result of the operation. Null when nothing matched.

cancel_service_plan_subscription

Cancel a customer's service plan subscription and stop billing them. This cancels the Stripe subscription first, then marks it cancelled in BlueSuite, doing only the second would leave the customer being charged every cycle. If Stripe refuses, nothing is changed and an error comes back; report that to the user rather than assuming billing stopped. Confirm with the user before calling: this stops a recurring payment.

Parameters

FieldType / accepted valuesRequiredDetails
idintegerYesSubscription ID to cancel.
forcebooleanNoMark it cancelled in BlueSuite even if Stripe could not be cancelled. Leaves the customer being billed, only use when the user understands that and asks for it.

Result

FieldType / accepted valuesRequiredDetails
dataobject or nullYesThe affected record, or the result of the operation. Null when nothing matched.

The downloadable tool schemas include the full input and output contracts. Tables describe schema-level required fields; cross-field rules still apply.

On this page