---
title: "Change a user's plan."
method: PATCH
path: "/admin/users/{id}/plan"
tags: ["Admin"]
---

# Change a user's plan.

`PATCH /admin/users/{id}/plan`

## Request

- Base URL: `https://getdynamicqr.com/api/v1`
- URL: `https://getdynamicqr.com/api/v1/admin/users/{id}/plan`
- Auth: API key in header `X-Client-ID` and HTTP bearer

Writes the stored `plan` column. It is not the whole story of what a customer has —
lifetime access, a paid or granted trial and inherited team access all live outside it,
which is why the account payload reports both `plan` (in effect) and `base_plan` (stored).

**Admin only.** The authenticated account must have the admin role.

## Path parameters

- `id` integer, required

## Request body

- object
  - `plan` string, required: freemium, normal, or pro.

## Response `200`

OK

## Other responses

- `401`: No credentials, or credentials that are not valid.
- `403`: The account is inactive, or the plan does not carry this feature.
- `422`: Validation failed
- `429`: Rate limit exceeded. See `Retry-After`.

---

[API](https://skmtc.dev/getdynamicqr/apis/d-qr-rest-api.md) · [All operations](https://skmtc.dev/getdynamicqr/apis/d-qr-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getdynamicqr/apis/d-qr-rest-api/revisions/4467aeca30ce?raw)
