---
title: "Paddle Change Plan"
method: POST
path: "/api/users/{user_id}/paddle-change-plan"
---

# Paddle Change Plan

`POST /api/users/{user_id}/paddle-change-plan`

## Request

- Base URL: `https://api.adplug.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.adplug.app/api/users/{user_id}/paddle-change-plan`
- Auth: HTTP bearer

Change the user's existing Paddle subscription in place (prorated).

Users with a live subscription must never go through checkout again —
Paddle happily creates a parallel second subscription (2026-07-13
double-billing incident). This endpoint swaps the subscription's price
instead, keeping the same subscription id so the webhook ownership guards
stay coherent. Upgrades charge the prorated difference today; downgrades
turn the unused higher-plan time into customer balance credit that covers
future renewals.

## Path parameters

- `user_id` string, required

## Request body

- object

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

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