---
title: "Create Topup"
method: POST
path: "/billing/topup"
tags: ["billing"]
---

# Create Topup

`POST /billing/topup`

## 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/topup`
- Auth: HTTP bearer

Create an embedded Stripe Checkout Session for a one-time credit pack purchase.

## Request body

- TopUpRequest
  - `pack_id` 'small' | 'medium' | 'large' | 'xl', required
  - `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)
