---
title: "Create hosted subscription checkout session"
method: POST
path: "/api/v1/billing/checkout"
tags: ["billing"]
---

# Create hosted subscription checkout session

`POST /api/v1/billing/checkout`

## Request

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

Returns `{ url }` to open **Stripe Hosted Checkout** for a recurring subscription. Sessions set `allow_promotion_codes: true` so customers can apply promotion codes on Stripe’s page. Recurring prices are resolved in Stripe by stable `lookup_key` values (see catalog setup scripts). Owner or admin only.

## Request body

- BillingCheckoutRequest
  - `plan` 'launch' | 'pro' | 'agency', required
  - `cycle` 'monthly' | 'yearly', required

## Response `200`

Stripe Checkout session URL

- BillingCheckoutResponse
  - `url` string, uri, required

## Other responses

- `400`: Validation or conflict error
- `401`: Missing or invalid credentials
- `403`: Not allowed for this resource
- `409`: Validation or conflict error
- `503`: Validation or conflict error

---

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