---
title: "Create hosted checkout for a plan"
method: POST
path: "/billing/checkout"
tags: ["Billing"]
---

# Create hosted checkout for a plan

`POST /billing/checkout`

## Request

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

Returns a hosted human-consent URL for the target plan. Requires `billing.manage`.

## Request body

- BillingCheckoutBody
  - `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`

Hosted checkout session created.

- BillingCheckout
  - `object` 'billing_checkout', required
  - `funding` BillingHostedCheckoutFunding, required
    - `type` 'hosted_checkout', required
  - `url` string, uri, required: Short-lived hosted checkout URL.
  - `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', required

## 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/checkout/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)
