Skip to main content
GPU Outlet uses a prepaid wallet for the common path and invoices for the cases where the wallet alone can’t recover by itself. You deposit credit, instances draw it down per-second. If a card declines or metered usage overshoots your balance, an invoice is automatically issued — pay it via a Stripe-hosted link, the wallet is credited (or the debt cleared), and you’re back online.

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
The balance pill in the top-right of the dashboard shows Available. When it drops below $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.
Each invoice is mirrored to a real Stripe Invoice. Stripe hosts:
  • A pay page (any card, no login) — hostedInvoiceUrl
  • A PDFinvoicePdfUrl
  • A receipt after payment — receiptUrl
  • Email reminders (Stripe’s automatic dunning — 3 days before due, 1 day after, ~weekly thereafter)
We store the URLs; we don’t host any of these surfaces ourselves.

Invoice statuses

StatusMeaningWhat the user sees
openOwed, not paidRed pill, Pay ↗ button
paidSettled via Stripe (any path: card / ACH / wire)Green pill, Receipt ↗ button
voidVoided before paymentGrey pill
uncollectible30+ days open, written off by StripeWarn pill
draftServer 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:
  1. One-off — Stripe Checkout, any amount, deposits immediately on webhook confirmation.
  2. Saved card + Add credit — once your card is on file, top-ups skip the Checkout redirect.
  3. 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).
See Topping up for the dashboard walkthrough.

The ledger

Every wallet movement is an immutable entry. Read via GET /v1/billing/ledger:
curl https://gpuoutlet.ai/v1/billing/ledger --cookie "sid=$SID" | jq
Example
{
  "entries": [
    {
      "id": "led_01H...",
      "type": "stripe_topup",
      "amountCents": 5000,
      "balanceAfterCents": 5000,
      "createdAt": "2026-06-07T08:14:22Z",
      "stripeChargeId": "ch_3Q…"
    }
  ],
  "balanceCents": 4953
}
Negative amounts = debits. The ledger is append-only; even invoice payments write new positive entries (for topup_failed invoices that credit the wallet) rather than amending old ones.

Refunds

We refund automatically in three situations:
  1. Failed provisioning — pod never went Running → full refund to wallet
  2. Crash within 60s — pod went Running then died → full refund to wallet
  3. Customer-initiated — email help@gpuoutlet.ai
Refunds always go back to the wallet as credit. If you want money OUT, email business@gpuoutlet.ai — we’ll wire the unused balance (minus Stripe’s processing fee).

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)
See Privacy Policy for the full scope.