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

# Change Plan

`POST /billing/change-plan`

## Request

- Base URL: `https://api.reeldrop.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.reeldrop.io/billing/change-plan`
- Auth: HTTP bearer

Switch an existing subscription between recurring plans.

Direction decides the mechanics, not the caller:
  upgrade   → applied now, prorated, card charged the difference immediately
  downgrade → scheduled to the end of the paid period, reversible until then

Both keep the customer on exactly one Stripe Subscription, which is the whole
reason this exists instead of a second Checkout.

## Request body

- ChangePlanRequest
  - `plan_type` string, required

## Response `200`

Successful Response

- ChangePlanResponse
  - `direction` string, required
  - `plan_type` string, required
  - `effective_at` string, nullable
  - `message` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/reeldrop/apis/reeldrop-api.md) · [All operations](https://skmtc.dev/reeldrop/apis/reeldrop-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reeldrop/apis/reeldrop-api/revisions/d3b2a338556c?raw)
