---
title: "Create a Stripe Checkout link that starts a monthly plan when a person pays it; nothing is charged from this call"
method: POST
path: "/v1/subscription/checkout"
---

# Create a Stripe Checkout link that starts a monthly plan when a person pays it; nothing is charged from this call

`POST /v1/subscription/checkout`

## Request

- Base URL: `https://volai.cz`
- URL: `https://volai.cz/v1/subscription/checkout`
- Auth: HTTP bearer

Creates a Stripe Checkout link for the first period of a monthly plan. Nothing is charged from here: a HUMAN pays on the Stripe page, the card is saved for the monthly renewals, and only then the monthly credit is added. `exhaustionMode` has no default and must be chosen: `topup` buys credit with the saved card once the monthly credit is used up (like auto top-up), `cap` buys nothing and caps the month at the plan price. A consumer account (no company ID, VAT ID or company name) gets no Checkout link: the call returns 409 `subscription_confirmation_required` with a `confirmUrl` to the form in the portal, where the person expressly asks to start the service before the 14-day withdrawal period ends, chooses the behaviour after exhaustion and pays; `consumerConsent` is no longer sent. The billing address is required. Supports `Idempotency-Key`.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `tier` '490' | '990' | '1990', required: Tier to start, written as a string: its monthly price in CZK excluding VAT. See GET /v1/subscription for the prices and the monthly credit of each tier.
  - `exhaustionMode` 'topup' | 'cap', required: What happens once the monthly credit is used up. There is no default, choose deliberately: topup buys credit with the saved card (like auto top-up, with the account's usual limits), cap buys nothing and stops spending until the next renewal, so a month never costs more than the plan price.
  - `consumerConsent` boolean: Kept for compatibility, no longer needed. A consumer account (no company ID, VAT ID or company name) cannot start a plan through the API at all: the call returns 409 subscription_confirmation_required with a confirmUrl to the portal form, where the person makes the express request to start the service before the 14-day withdrawal period ends and pays. Business accounts omit this field.

## Response `200`

Checkout URL

- object
  - `checkoutUrl` string, required

## Other responses

- `400`: Error codes: validation (request), billing_address_required (account), consumer_consent_required (request).
- `401`: Error codes: unauthorized (request).
- `403`: Error codes: account_suspended (account).
- `404`: Error codes: pausal_unavailable (account), user_not_found (account).
- `409`: Error codes: idempotency_in_progress (busy), subscription_exists (account), subscription_confirmation_required (request).
- `429`: Error codes: rate_limited (busy).
- `500`: Error codes: internal_error (service).
- `502`: Error codes: stripe_error (service).
- `503`: Error codes: stripe_not_configured (service), ledger_unavailable (service).

---

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