update_subscription_rate_plan
Update a subscription rate plan by changing its name, type, effective start date, or enabling automatic status changes based on charges.
Instructions
Update a rate plan on a subscription. PUT /subscriptions/{subscriptionId}/rateplans/{ratePlanId}. Optional: name, type (contract|ongoing|prepaid), effectiveStartDate, changeStatusBasedOnCharge.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| subscriptionId | Yes | Subscription ID (required) | |
| ratePlanId | Yes | Subscription rate plan ID (required) | |
| name | No | Name | |
| type | No | contract, ongoing, or prepaid | |
| effectiveStartDate | No | YYYY-MM-DD | |
| changeStatusBasedOnCharge | No | Change status based on charge |
Implementation Reference
- The handler function that executes the tool logic. It parses arguments with zod, extracts subscriptionId and ratePlanId, and calls the subscription service to perform the update.
async function handler(client: Client, args: Record<string, unknown> | undefined) { const parsed = schema.safeParse(args); if (!parsed.success) { return errorResult(parsed.error.errors.map((e) => e.message).join("; ")); } const { subscriptionId, ratePlanId, ...body } = parsed.data; return handleToolCall(() => subscriptionService.updateSubscriptionRatePlan(client, subscriptionId, ratePlanId, body) ); } export const updateSubscriptionRatePlanTool: Tool = { definition, handler, }; - Zod schema validating the tool's input: subscriptionId (required), ratePlanId (required), name, type, effectiveStartDate, changeStatusBasedOnCharge (all optional).
const schema = z.object({ subscriptionId: z.string().min(1, "subscriptionId is required"), ratePlanId: z.string().min(1, "ratePlanId is required"), name: z.string().optional(), type: z.enum(["contract", "ongoing", "prepaid"]).optional(), effectiveStartDate: z.string().optional(), changeStatusBasedOnCharge: z.boolean().optional(), }); - src/tools/subscriptions/updateSubscriptionRatePlan.ts:45-48 (registration)Exports the Tool object combining the definition and handler, which is registered in the subscription tools index.
export const updateSubscriptionRatePlanTool: Tool = { definition, handler, }; - The UpdateSubscriptionRatePlanBody interface definition and the service function that sends a PUT request to /subscriptions/{subscriptionId}/rateplans/{ratePlanId}, filtering out undefined values.
export interface UpdateSubscriptionRatePlanBody { name?: string; type?: "contract" | "ongoing" | "prepaid"; effectiveStartDate?: string; changeStatusBasedOnCharge?: boolean; [k: string]: unknown; } export async function updateSubscriptionRatePlan( client: Client, subscriptionId: string, ratePlanId: string, body: UpdateSubscriptionRatePlanBody ): Promise<unknown> { const payload = Object.fromEntries( Object.entries(body).filter(([, v]) => v !== undefined) ) as UpdateSubscriptionRatePlanBody; return client.put<unknown>( `/subscriptions/${subscriptionId}/rateplans/${ratePlanId}`, Object.keys(payload).length ? payload : undefined ); } - src/tools/subscriptions/index.ts:22-49 (registration)The tool is imported and included in the registerSubscriptionTools() array, registering it for use.
import { updateSubscriptionRatePlanTool } from "./updateSubscriptionRatePlan.js"; import { updateSubscriptionStatusTool } from "./updateSubscriptionStatus.js"; import { updateSubscriptionTool } from "./updateSubscription.js"; /** All 19 subscription tools. */ export function registerSubscriptionTools(): Tool[] { return [ listSubscriptionsTool, getSubscriptionTool, createSubscriptionTool, updateSubscriptionTool, deleteSubscriptionTool, updateSubscriptionStatusTool, getSubscriptionUpcomingChargesTool, getSubscriptionInvoicesTool, getSubscriptionLogsTool, getSubscriptionExternalInvoicesTool, listSubscriptionRatePlansTool, getSubscriptionRatePlanTool, addSubscriptionRatePlanTool, updateSubscriptionRatePlanTool, removeSubscriptionRatePlanTool, getSubscriptionRatePlanChargeTool, addSubscriptionRatePlanChargeTool, updateSubscriptionRatePlanChargeTool, removeSubscriptionRatePlanChargeTool, ]; }