Tuned Tensor
DocsDashboard

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 adjustment entry. 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.

ModelSizePrice
Qwen/Qwen3.5-2B2B$0.45
google/gemma-4-E2B-itE2B$0.45
ibm-granite/granite-3.3-2b-instruct2B$0.45
meta-llama/Llama-3.2-3B-Instruct3B$0.55
bigcode/starcoder2-3b3B$0.55
Qwen/Qwen3.5-4B4B$0.70
google/gemma-4-E4B-itE4B$0.70
microsoft/Phi-4-mini-instruct3.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 + ledger

API 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