---
title: "Create Subscription Checkout"
method: POST
path: "/api/v1/subscriptions/{subscription_id}/checkout"
tags: ["subscriptions", "subscriptions"]
---

# Create Subscription Checkout

`POST /api/v1/subscriptions/{subscription_id}/checkout`

## Request

- Base URL: `https://app.goodleads.club` (the document declares no server; this is the origin it was published from)
- URL: `https://app.goodleads.club/api/v1/subscriptions/{subscription_id}/checkout`
- Auth: API key in header `X-API-Key`

Create a subscription-mode Stripe Checkout Session for a standing order.

The purchase→subscription path (ADR-041): the operator creates the
Subscription row first (existing CRUD — the frozen filter/cadence/stages
the client agreed to), then mints this recurring payment link to send the
buyer. The session threads ``subscription_id`` in metadata; on
``checkout.session.completed`` the commerce webhook links the Stripe
subscription back to this row, stamps the ids, and flips
``billing_status='active'``. Admin-only — same gate as the CRUD.

## Path parameters

- `subscription_id` string, uuid, required

## Request body

- SubscriptionCheckoutRequest: Mint the recurring payment link that funds a standing order (ADR-041).
  - `price_cents` integer, required
  - `billing_interval` 'day' | 'week' | 'month' | 'year'
  - `buyer_email` string, nullable
  - `test_mode` boolean
  - `success_url` string, nullable
  - `cancel_url` string, nullable

## Response `200`

Successful Response

- SubscriptionCheckoutResponse
  - `subscription_id` string, uuid, required
  - `session_id` string, required
  - `checkout_url` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/goodleads/apis/formation-gtm-api.md) · [All operations](https://skmtc.dev/goodleads/apis/formation-gtm-api/llms.txt) · [OpenAPI document](https://skmtc.dev/goodleads/apis/formation-gtm-api/revisions/2068d13a82cf?raw)
