The wallet
Every account has one wallet with three numbers:- Available — what you can spend right now
- Reserved — held against currently-running instances (locks against underflow)
- Total — available + reserved
$5, the pill turns yellow. When it reaches $0, all running
instances stop within ~5 seconds.
Invoices
Invoices represent money owed for cases beyond simple top-ups:topup_failed
Auto-topup tried to charge the saved card, Stripe declined. The invoice is
for the exact amount the auto-topup would have added. Paying it credits
the wallet.
overage
Metered usage settled higher than the wallet held — the truncated
difference becomes owed. Paying it clears the debt; the wallet is NOT
credited (the meter already charged what it could).
manual
Ops-issued (refund correction, enterprise contract, wire transfer
settlement). Behavior matches the reason in each case.
- A pay page (any card, no login) —
hostedInvoiceUrl - A PDF —
invoicePdfUrl - A receipt after payment —
receiptUrl - Email reminders (Stripe’s automatic dunning — 3 days before due, 1 day after, ~weekly thereafter)
Invoice statuses
| Status | Meaning | What the user sees |
|---|---|---|
open | Owed, not paid | Red pill, Pay ↗ button |
paid | Settled via Stripe (any path: card / ACH / wire) | Green pill, Receipt ↗ button |
void | Voided before payment | Grey pill |
uncollectible | 30+ days open, written off by Stripe | Warn pill |
draft | Server is still building it (sub-second internal) | Not surfaced in the dashboard |
What triggers an invoice
The overage threshold is $0 — every cent of metered-over-balance becomes an invoice. This is intentional: small invoices are cheap (Stripe Invoice fees are minimal), and we’d rather under-collect transparently than swallow the loss silently.Topping up the wallet
Three paths, unchanged from before invoices shipped:- One-off — Stripe Checkout, any amount, deposits immediately on webhook confirmation.
- Saved card + Add credit — once your card is on file, top-ups skip the Checkout redirect.
- Auto-topup — set a threshold (
when wallet < $X) and an amount (add $Y). We charge the saved card automatically. If that charge fails, an open invoice is created automatically (see above).
The ledger
Every wallet movement is an immutable entry. Read viaGET /v1/billing/ledger:
Example
topup_failed invoices that credit the
wallet) rather than amending old ones.
Refunds
We refund automatically in three situations:- Failed provisioning — pod never went Running → full refund to wallet
- Crash within 60s — pod went Running then died → full refund to wallet
- Customer-initiated — email help@gpuoutlet.ai
What’s NOT here
- Monthly post-paid plans — on the roadmap. For now everyone is prepaid + invoiced. Email business@gpuoutlet.ai if you need monthly invoicing for a high-volume account.
- Multi-currency — USD only.
- Subscriptions — we don’t sell those. Invoices are one-off, never recurring.
Privacy
We don’t store card numbers — Stripe holds them. We keep:- A Stripe
customer_id(cus_…) - A Stripe
payment_method_id(pm_…) — last 4 digits + brand for display - Every ledger entry indefinitely (required for tax/audit)
- Every invoice indefinitely (same)