---
title: "Create localized card preapproval session"
method: POST
path: "/stripe/checkout/subscription/preapproval"
tags: ["Billing"]
---

# Create localized card preapproval session

`POST /stripe/checkout/subscription/preapproval`

Initiates a Stripe Checkout setup-mode session to preapprove a local card before continuing to paid localized checkout.

## Request body

- CreateCheckoutSessionRequest
  - `price_id` string, required — The Stripe price ID for the subscription plan
  - `country_code` string — Two-letter country code used for regional pricing. Only used when the server cannot geolocate the request; otherwise the request GeoIP country wins.
  - `client_geoip_country_code` string — Two-letter country code observed by the client GeoIP store before checkout
  - `eu_withdrawal_waiver_accepted` boolean — Whether the EU/EEA digital content withdrawal waiver was expressly accepted before checkout
  - `payment_method` 'card' | 'pix' | 'upi'
  - `is_business` boolean — Whether the purchase is for a business. When true, Stripe Checkout requires a billing address (needed for tax invoicing). When false or omitted, billing address collection is left to Stripe (auto).

## Response `200`

Success

- UrlResponse
  - `url` string, required — The URL to redirect to

## Other responses

- `400` — Bad Request - The request was malformed or contained invalid data
- `401` — Unauthorized - Authentication is required or the token is invalid
- `403` — Forbidden - You do not have permission to perform this action
- `429` — Too Many Requests - You are being rate limited
- `500` — Internal Server Error - An unexpected error occurred

## Changes

> 18 revisions in range; 1 not diffed.

- **2026-09-11** `b7b12069ba8d` — 1 warning
  - removed the request property `pricing_mode`
- **2026-09-06** `a52a2cf49d9b` — 32 warning
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `400`
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `401`
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `403`
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `500`
  - …28 more
  - …this revision’s changelog is incomplete
- **2026-09-05** `4dbb738a3e22` — 4 info
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `400`
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `401`
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `403`
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `500`
- …earlier changes not shown

[Full history](https://skmtc.dev/fluxer/apis/fluxer-api/changes/stripe/checkout/subscription/preapproval/post.md)

---

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