---
title: "Start Subscription Checkout"
method: POST
path: "/api/v1/billing/checkout/subscription"
tags: ["billing"]
---

# Start Subscription Checkout

`POST /api/v1/billing/checkout/subscription`

Start checkout for the monthly plan.

Grants nothing: the returned URL is an invitation to pay, and entitlement
follows the webhook that confirms payment. A workspace that already has a
payable session is redirected to it rather than given a second one, so a
double-clicked upgrade cannot become two subscriptions.

## Headers

- `Idempotency-Key` string, nullable

## Response `200`

Successful Response

- CheckoutSessionResponse — Where to send the browser to complete payment.
  - `checkout_url` string, required

## Other responses

- `409` — Conflict
- `422` — Validation Error
- `503` — Service Unavailable

## Changes

- **2026-09-18** `73f618ba0a7e` — 1 warning
  - added the new `price_not_found` enum value to the `code` response property for the response status `503`
- **2026-09-16** `95495ef535bc` — 3 info
  - the `code` response property const value `subscription_already_live` was added for the status `409`
  - removed the `no_paid_plan` enum value from the `code` response property for the response status `409`
  - removed the `subscription_already_live` enum value from the `code` response property for the response status `409`
- **2026-09-15** `499d0b94aa94` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/maia-analytics/apis/maia-api/changes/api/v1/billing/checkout/subscription/post.md)

---

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