---
title: "Create Clinic Checkout"
method: POST
path: "/clinic/billing/checkout"
tags: ["clinic", "billing"]
---

# Create Clinic Checkout

`POST /clinic/billing/checkout`

## Request

- Base URL: `https://api.projectindi.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.projectindi.com/clinic/billing/checkout`
- Auth: none declared

Stripe hosted checkout for a clinic plan (§2.3).

Refusals, and what each one means to the owner: 403 she is not the owner; 409
`talk_to_us` her clinic is not in Australia, where self-serve does not run and
the screen offers a conversation instead; 409 `plan_already_set` her clinic
already has a plan, which is what stops a second subscription being opened on
a clinic that is already paying - unless Stripe has ended the subscription,
when a new checkout is the one way back (`_repurchase_allowed`); 409
`plan_downgrade` a Pro clinic coming back as Lite, which
`activate_clinic_plan` would refuse from inside the webhook, after Stripe
had taken the money (#9185).

## Request body

- ClinicCheckoutRequest
  - `plan` string, required
  - `full_seats` integer
  - `light_seats` integer
  - `accept_terms` boolean

## Response `200`

Successful Response

- ClinicCheckoutResponse
  - `url` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles.md) - [All operations](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles/llms.txt) - [OpenAPI document](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles/revisions/25a7813e21fd?raw)
