---
title: "Change Plan Endpoint"
method: POST
path: "/api/billing/change-plan"
tags: ["billing"]
---

# Change Plan Endpoint

`POST /api/billing/change-plan`

Change subscription plan (upgrade or downgrade between paid plans).

Use this for:
- Hobby → Standard or Pro (upgrade)
- Standard → Pro (upgrade)
- Pro → Standard or Hobby (downgrade)
- Standard → Hobby (downgrade)

For Free → Paid, use /billing/create-checkout-session instead.
For Paid → Free, use /billing/cancel-subscription instead.

## Request body

- ChangePlanRequest — Request to change subscription plan
  - `product_id` string, required
  - `plan` 'hobby' | 'standard' | 'pro', required

## Response `200`

Successful Response

- ChangePlanResponse — Response after changing plan
  - `subscription_id` string, required
  - `new_plan` string, required
  - `status` string, required
  - `current_period_end` integer, nullable
  - `message` string, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/usecrow/apis/crow-backend-multi-tenant-saas.md) · [All operations](https://skmtc.dev/usecrow/apis/crow-backend-multi-tenant-saas/llms.txt) · [OpenAPI document](https://skmtc.dev/usecrow/apis/crow-backend-multi-tenant-saas/revisions/66e6366f8ef9?raw)
