Billing & credits
Tuned Tensor uses prepaid credits — you top up an amount, and we debit from your balance as you fine-tune. There are no subscriptions, tiers, or monthly run limits. Inference and evals are currently free; only fine-tuning runs and auto-tune iterations consume credits.
Starting balance
New accounts start at a zero balance. Add prepaid credits before starting a run or auto-tune session.
How a run is priced
Cost is calculated from three inputs: number of training epochs, the number of training tokens reported by the underlying provider, and the per-model rate from the rate card.
cost_cents = ceil(epochs × training_tokens × model_rate_per_mtok / 1_000_000)We charge once per run, on successful completion only, using the provider-reported token count for accuracy. Failed and cancelled runs are free. The dashboard and CLI show an estimated cost before you start a run, computed from your dataset character count.
Holds & settlement
When you start a run we place a credit hold for the estimated cost so concurrent runs cannot overspend the same balance. Your spendable balance is available_cents = balance_cents − reserved_cents; the balance API returns all three. Holds resolve in one of three ways:
- Successful run — the held amount is settled at the provider-reported actual cost.
- Failed or cancelled run — the entire hold is released back to your spendable balance.
- Provider-cost overage — when actual training tokens exceed the estimate, we settle the held amount and post the difference as a separate
adjustmententry. This can temporarily take your balance below zero; top up to bring it back and start a new run. We never silently skip billing for a run the provider already executed.
Auto-tune
Auto-tune sessions hold the worst-case cost (max iterations × per-iter estimate) for the duration of the session. Each completed iteration settles its actual cost out of that hold; if auto-tune converges early, hits its iteration cap, fails, or is cancelled, the unused remainder is released immediately.
Rate card
Per 1M training tokens, per epoch.
| Model | Size | Price |
|---|---|---|
Qwen/Qwen3.5-2B | 2B | $0.45 |
google/gemma-4-E2B-it | E2B | $0.45 |
ibm-granite/granite-3.3-2b-instruct | 2B | $0.45 |
meta-llama/Llama-3.2-3B-Instruct | 3B | $0.55 |
bigcode/starcoder2-3b | 3B | $0.55 |
Qwen/Qwen3.5-4B | 4B | $0.70 |
google/gemma-4-E4B-it | E4B | $0.70 |
microsoft/Phi-4-mini-instruct | 3.8B | $0.70 |
Adding credits
Top up via Stripe Checkout — there's no card on file and no auto-recharge. Min $5.00, max $10000 per transaction. Quick-pick amounts:
- $10.00
- $25.00
- $50.00
- $100
You can also enter a custom amount.
From the dashboard
Go to Dashboard → Billing and click a preset tile or enter a custom amount.
From the CLI
tt topup --amount 25 # opens Stripe Checkout in your browser
tt balance # check your current balance + ledgerAPI endpoints
Programmatic access for self-serve integrations. All endpoints require an API key (Authorization: Bearer tt_...).
GET /v1/billing/balance
{
"data": {
"balance_cents": 1342,
"reserved_cents": 200,
"available_cents": 1142,
"lifetime_topup_cents": 5000
}
}balance_cents is the total prepaid balance. reserved_cents is the sum of credit holds taken by active runs and auto-tune sessions. available_cents is what new runs can spend. API clients should use available_cents for start-run preflight checks and low balance warnings, not balance_cents; a user can have a positive total balance while active reservations leave too little available balance for another run.
GET /v1/billing/transactions
Paginated ledger (top-ups, run debits, refunds, adjustments). Supports page and per_page.
POST /v1/billing/topup
Returns a Stripe Checkout URL. The client should redirect the user to the URL; on success the user is sent back to /dashboard/billing.
curl -X POST https://tunedtensor.com/api/v1/billing/topup \
-H "Authorization: Bearer tt_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "amount_cents": 2500 }'
# {
# "data": {
# "checkout_url": "https://checkout.stripe.com/c/pay/cs_test_...",
# "session_id": "cs_test_..."
# }
# }Insufficient credits (402)
Starting a run or auto-tune session with too little available balance returns 402 insufficient_credits. This can happen even when balance_cents is positive because active runs may have reserved those credits:
{
"error": {
"code": "insufficient_credits",
"message": "This run is estimated at $0.42 but you have $0.10 available.",
"required_cents": 42,
"available_cents": 10,
"topup_url": "/dashboard/billing"
}
}Top up and retry. The estimate uses your dataset size pre-flight; the final charge uses real provider token counts at completion.
Refunds & expiration
- Credits never expire while your account is active.
- Failed and cancelled runs are not charged.
- Unused credits are refundable to the original payment method within 30 days of top-up — email support@tunedtensor.com with your account email.
See also
- Pricing page — the public rate card and FAQ
- Runs reference — run lifecycle and the 402 response
ttCLI —tt balanceandtt topup