---
title: "Upgrade the account plan"
method: POST
path: "/billing/upgrade"
tags: ["Billing"]
---

# Upgrade the account plan

`POST /billing/upgrade`

## Request

- Base URL: `https://api.cavuno.com/v1`
- URL: `https://api.cavuno.com/v1/billing/upgrade`
- Auth: HTTP bearer

Creates a hosted human-consent handoff for an upgrade. It never charges a saved payment method directly. Requires `billing.manage` and an `Idempotency-Key` header.

## Request body

- BillingUpgradeBody
  - `planKey` 'starter' | 'basic' | 'grow' | 'advanced' | 'scale' | 'enterprise', required: Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.
  - `interval` 'monthly' | 'annual': Billing interval. Defaults to monthly when omitted.

## Response `200`

Upgrade completed or checkout required.

- BillingUpgrade
  - `object` 'billing_upgrade', required
  - `funding` BillingHostedCheckoutFunding, required
    - `type` 'hosted_checkout', required
  - `status` 'human_action_required', required
  - `url` string, uri, required
  - `planKey` 'starter' | 'basic' | 'grow' | 'advanced' | 'scale' | 'enterprise', required: Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.

## Other responses

- `default`: An error. Every non-2xx response uses the same envelope; see the Errors section of the introduction.

## Changes

- **2026-10-19** `c34152c38176`: 1 info
  - added the optional property `error/upgrade` to the response with the `default` status

[Operation history](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/changes/billing/upgrade/post.md)

---

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