---
title: "Create a SetupIntent to save a card without charging it"
method: POST
path: "/api/v1/platform/developers/billing/setup-intent"
tags: ["Developers", "Developers"]
---

# Create a SetupIntent to save a card without charging it

`POST /api/v1/platform/developers/billing/setup-intent`

## Request

- Base URL: `https://kokofinance.net` (the document declares no server; this is the origin it was published from)
- URL: `https://kokofinance.net/api/v1/platform/developers/billing/setup-intent`
- Auth: none declared

Create a Stripe SetupIntent so the frontend can collect and verify a card
via Stripe Elements, without charging anything. Used identically whether
someone is proactively adding a card ahead of time (still under 250 free
calls) or reactively adding one after being blocked at the wall -- in
either case, this just saves a payment method; the actual conversion to
the paid tier happens transparently on the next API/MCP call via
auth._check_monthly_limit -> usage_tracking.auto_convert_free_org_or_block,
once org.default_payment_method_id is set below (via the
setup_intent.succeeded webhook, not trusted directly from the client).

Returns: {"client_secret": str, "publishable_key": str} for Stripe.js/Elements
on the frontend.

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/kokofinance/apis/koko-finance-api.md) · [All operations](https://skmtc.dev/kokofinance/apis/koko-finance-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kokofinance/apis/koko-finance-api/revisions/a5f1170af4d4?raw)
