> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gpuoutlet.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Billing & wallet

> Prepaid wallet, ledger, invoices, refunds — and seller earnings.

As a marketplace, GPU Outlet has two money flows: buyers **spend** from a
prepaid wallet, and sellers **earn** as their machines are rented. Both run
through the same append-only ledger. The buyer side is covered first; seller
[earnings & payouts](#seller-earnings--payouts) are at the bottom.

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:

<CardGroup cols={2}>
  <Card title="topup_failed" icon="credit-card">
    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.
  </Card>

  <Card title="overage" icon="chart-line-up">
    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).
  </Card>

  <Card title="refund_shortfall" icon="rotate-left">
    A refund was sent back to your card for more than your wallet held — the
    remainder becomes owed. Paying it clears the debt.
  </Card>

  <Card title="manual" icon="user-tie">
    Ops-issued (enterprise contract, wire transfer settlement). Behavior
    matches the reason in each case.
  </Card>
</CardGroup>

Each invoice is mirrored to a real Stripe Invoice. Stripe hosts:

* 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)

We store the URLs; we don't host any of these surfaces ourselves.

### Paying an invoice

Two ways to settle any open invoice, both from the dashboard billing page:

* **By card** — the `Pay ↗` button opens the Stripe-hosted pay page (any card,
  no login).
* **From your balance** — if you have enough available credit, `Pay from
  balance` settles the invoice in one click straight from your wallet, no card
  needed. Handy when you've just topped up and want to clear an invoice
  immediately.

<Note>
  Have an open invoice? Settle it before launching a new instance — the Create
  screen links you straight to it.
</Note>

### 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

```mermaid theme={null}
flowchart LR
  T[Tick] -->|"wallet < threshold"| AT[Auto-topup]
  AT -->|"Stripe declines"| INV1[topup_failed invoice]
  R[Rental stops] --> S[Settle]
  S -->|"metered > balance"| INV2[overage invoice]
  S -->|"metered ≤ balance"| OK[✓ Settled cleanly]
  INV1 --> EMAIL[Email user with pay link]
  INV2 --> EMAIL
  INV1 --> STOP[Stop running pods]
```

Any metered usage that settles above your wallet balance becomes an overage
invoice for the difference.

## 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).

<Tip>
  **First-deposit bonus** — top up **\$5 or more on your first deposit and we
  add an extra \$5** to your balance, automatically. One bonus per account; it
  appears as a **Promo bonus** line in your billing history.
</Tip>

See [Topping up](/guides/topping-up) for the dashboard walkthrough.

## The ledger

Every wallet movement is an immutable entry, visible in the dashboard's
billing history — deposits, holds, charges, releases, refunds, promo bonuses,
invoice payments and adjustments. Negative amounts are debits; the ledger is
append-only, so even invoice payments add new entries rather than amending old
ones.

## Refunds

**Credit back to your wallet** — we do this automatically when something on our
side went wrong, so you're never billed for it:

1. **Failed provisioning** — pod never went Running → full credit to wallet
2. **Crash within 60s** — pod went Running then died → full credit to wallet

**Money back to your card** — if you ask for a refund
([help@gpuoutlet.ai](mailto:help@gpuoutlet.ai)) and we send it to your card,
that amount is **removed from your wallet balance** and recorded in your billing
history, so your balance always matches what's actually yours. If you'd already
spent some of those funds, the remainder becomes an invoice you can settle (by
card or from your balance).

Want your unused balance wired out? Email
[business@gpuoutlet.ai](mailto:business@gpuoutlet.ai) — we'll send the remaining
balance (minus Stripe's processing fee).

## Seller earnings & payouts

If you list a machine, the money flows the other way. As a buyer rents your
machine, you **earn for every second it runs**, minus a flat platform fee.
Earnings post to your seller ledger the same way wallet movements do — as
immutable entries.

The **Sell** dashboard ([gpuoutlet.ai/app/supplier](https://gpuoutlet.ai/app/supplier))
shows three numbers at the top:

* **Pending** — earned, still within a short clearing hold
* **Cleared** — past the hold, withdrawable to your payout method
* **Lifetime** — everything you've ever earned

<Note>
  Earnings clear after a short hold (it covers refunds and disputes on the
  buyer's side), then become withdrawable. Connect a payout method in the Sell
  dashboard to receive them.
</Note>

## What's NOT here

* **Monthly post-paid plans** — on the roadmap. For now everyone is
  prepaid + invoiced. Email [business@gpuoutlet.ai](mailto: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](https://gpuoutlet.ai/privacy) for the full scope.
