billing

Create Subscription Checkout

Create a Stripe Checkout Session in mode=subscription.

Auth required (Clerk JWT). metadata.clerk_user_id is set from the validated JWT; the request body's clerk_user_id / similar fields (if present) are ignored — they're not even in the schema. This is the Codex P3.3.g HIGH-2 lesson: trust anchor stays server-side.

Currency resolution: explicit override → cf-ipcountry → Accept- Language → GBP fallback. Same path as the 7-day-pass route.

Tier seat semantics:

  • Solo: quantity = 1 (single user)
  • Studio: quantity = 5 (5-seat pack, fixed at v1)
  • Practice: quantity = 25 (25-seat minimum, hardcoded at v1) Above-minimum expansion deferred to v1.1 via Customer Portal.

No trial_period_days anywhere on the path — the freemium MCP tier IS the trial; the £10 7-day pass is the second on-ramp; PASS_CREDIT_FIRST_MONTH is the bridge.

post/api/billing/subscription/checkout

Request

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

Headers

authorizationstring nullable

Request body

tier'solo' | 'studio' | 'practice' required
billing_cycle'monthly' | 'annual' required
currency'GBP' | 'USD' | 'EUR' | 'AUD' | 'NZD' | 'SGD' | 'CAD' | 'MYR'
couponstring nullable

Response

Successful Response

checkout_urlstring required
session_idstring required

Changes

No recorded changes to this operation across all 1 revision of this API.