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

# Create Checkout

`POST /billing/checkout`

## Request

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

Create an embedded Stripe Checkout Session for a new subscription.

## Request body

- CheckoutRequest
  - `plan_id` 'creator_monthly' | 'creator_quarterly' | 'pro_monthly' | 'pro_quarterly' | 'studio_monthly' | 'studio_quarterly' | 'scale_monthly' | 'scale_quarterly', required
  - `referral_code` string, nullable
  - `meta` MetaBrowserContext: What only the browser knows about a conversion, for the Meta Conversions API (providers/meta_capi.py). The client IP and user agent come off the request itself; these ride in the body (lib/meta-browser.ts). Every field is optional: an ad-blocked or cookieless browser has no _fbp, most visitors never clicked an ad (no _fbc), and a stale frontend sends nothing at all — none of which may fail the request it rides on.
    - `fbp` string, nullable
    - `fbc` string, nullable
    - `source_url` string, nullable

## Response `200`

Successful Response

- CheckoutResponse
  - `client_secret` string, required
  - `session_id` string, required
  - `order_value` integer, nullable, required
  - `currency` string, required

## Other responses

- `422`: Validation Error

---

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