---
title: "Post Topup"
method: POST
path: "/api/billing/credits/topup"
tags: ["billing"]
---

# Post Topup

`POST /api/billing/credits/topup`

## Request

- Base URL: `https://app.thinqos.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.thinqos.com/api/billing/credits/topup`
- Auth: none declared

Mint a perpetual ``source='topup'`` credit bucket for the CALLER (TOS-604).

Free-credit accounts only: no payment is collected. The account funding
mode is checked by ``perform_topup``; Stripe-backed accounts use checkout.

Self-funding only. ``target_identity_id`` (TOS-2511) let an owner MINT fresh
credit straight into another identity's bucket, which is how "funding an
identity" grew total credit supply instead of moving it - so it is gone
(TOS-2640 Phase 1). Funding another identity is now
``POST /api/billing/credits/transfer``, which moves credit out of a wallet
you control. Minting stays where minting belongs: the trial grant, the admin
grant, and this rail (eventually Stripe), each of which represents value
genuinely entering the system.

## Headers

- `x-impersonate-identity-id` string, nullable

## Request body

- TopupRequest
  - `amount_usd` integer, required: Whole dollars, 10 to 500

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

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