# Billing and limits

---

Prepaid credits, usage, budgets and what happens when funds run out.

---

# Quotas

> See the limits on your org, what counts against them, and how to raise them.

Source: https://www.nodus-compute.ai/docs/guides/access/quotas/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Quotas keep one mistake from running away with your credits. See yours with:

Terminal window

```bash
nodus get quota default -o yaml
```

|Quota|Default before your first purchase|After a purchase|
|-|-|-|
|`members` (seats, including pending invites)|10|10|
|`apiKeys` (live keys, including CLI logins and ServiceAccount tokens)|50|200|
|`liveSandboxes` (stopped ones count until their delete completes)|10|100|
|`storageGiB`|50|1024|
|`egressGiBPerDay`|20|100|
|`nodusNodes`|1|10|
|`gangNodes` (multi-node jobs)|0|8|
|`inferenceRPM` / `inferenceTPM`|60 / 100,000|600 / 1,000,000|
|`assistantUSDPerDay`|$1|$10|

Going over a count quota refuses the create with `429 QuotaExceeded`, naming the quota. Nothing already running is touched. Daily quotas (`egressGiBPerDay`, `assistantUSDPerDay`) reset at 00:00 UTC. Expired and revoked API keys do not count against `apiKeys`.

Multi-node jobs are in Beta: your org needs the distributed training beta, and `gangNodes` counts the nodes of running multi-node jobs. A job that would go over it waits in the queue instead of failing.

Owners and Admins of an org that has bought credits set their own seats, up to 1,000, under **Team › Members › Change**, or with `PATCH /apis/nodus.dev/v1/quotas/default` and `{"hard": {"members": 25}}`. Seats never go below the members and pending invites you have. To raise any other org limit, or seats past 1,000, contact support. To cap what one project or one person spends, use a [Budget](https://www.nodus-compute.ai/docs/guides/billing/#cap-spending-with-a-budget).


---

# Usage and billing

> Add credits, redeem a code, cap spending with Budgets, and see exactly what every run cost.

Source: https://www.nodus-compute.ai/docs/guides/billing/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Nodus is prepaid: you add credits, and every run reserves funds before it starts. New orgs get [starter credit](https://www.nodus-compute.ai/docs/guides/billing/credits/) to try things out. This guide covers adding credits, reviewing usage and setting spending limits.

## Check your balance

Terminal window

```console
$ nodus billing
Available     $17.42   purchased $15.80 · credits $3.52 (starter, expires Oct 31)
Reserved       $1.90   job/train-a, sandbox/sb-3, function/embed
This month   $232.58   budget research-monthly 42 % of $500.00
Auto-recharge  on      add $50.00 below $10.00 · visa •••• 4242
```

In the console, open **Usage & billing → Balance** for available credit and this month’s spend. Payment method and auto-recharge settings sit below the summary. **Manage payment details** opens a hosted page to add or update your card and billing information. Choose **Page actions (⋯) → Partner offers** for eligibility and benefits. Use **Usage** for detailed spending and **Budgets** for limits.

## Add credits

Terminal window

```console
$ nodus billing top-up 20
Opening https://checkout.stripe.com/c/pay/cs_live_... (expires in 60 min)
Waiting for payment... added $20.00. Available $37.42.
Receipt: https://invoice.stripe.com/i/...
```

Top-ups are between $5.00 and $1,000.00 in whole cents, up to $5,000 per org per day. Payment happens on a hosted page; Nodus never sees your card number. In the console, **Add credits** offers $10, $20, $50, $100 or a custom amount and brings you back to Billing when the payment completes. A top-up settles any unpaid charges first. Every top-up has a receipt and an invoice PDF under **Receipts & invoices** and in `nodus billing receipts`.

Topping up needs the `billing:write` permission, which org Owners and Admins have.

## Auto-recharge

Auto-recharge adds credit when your available balance drops below a threshold, so long runs never stop for money:

Terminal window

```console
$ nodus billing auto-recharge --threshold 10 --amount 50
```

The first time, this opens a card setup page. Each recharge is an invoice with its own receipt. At most 5 recharges or $5,000 run per day, and three failed charges in a row turn auto-recharge off and email you. Turn it off with `nodus billing auto-recharge --off`.

In **Balance**, expand **Auto-recharge** to edit its settings. **Save** updates the amounts and warning level without turning auto-recharge on or off. Use **Turn on** or **Turn off** to change that setting. If another admin or failed payments change it while you edit, the console refreshes the settings and asks you to review them before saving again.

## Redeem a promo code

Terminal window

```console
$ nodus billing redeem LAUNCH25
Redeemed ****CH25: $25.00 of credit, expires 2026-11-30.
```

See [Promo codes](https://www.nodus-compute.ai/docs/guides/billing/promo-codes/) for limits and errors.

## See what you spent

Terminal window

```console
$ nodus get usage --group-by project,label:owner --since 30d
PROJECT    OWNER  AMOUNT
research   ml     $212.41
default    -      $20.17

$ nodus get usage --group-by project,meter --since 30d -o csv > usage.csv
$ nodus get transactions --since 7d
```

Group usage by `project`, `kind`, `label:<key>`, `meter`, `day`, `segment` or `rank`. `segment` splits machine time into `Boot`, `Restore`, `Running` and `Teardown`, and `rank` itemizes the members of a multi-node run. The console **Usage** tab shows the same data as a daily chart and a table, and every table exports CSV.

Transactions list every change to your balance, with the balance after it: top-ups, grants, captures, storage, egress, refunds and adjustments. See [Usage and costs](https://www.nodus-compute.ai/docs/guides/billing/usage-and-costs/) to filter and export your records.

## Cap spending with a Budget

A Budget is an enforced limit over the org, a project or a label selector, per month or in total. When a `Block` Budget is exhausted, work in its scope stops gracefully and new work is refused until the next period:

budget.yaml

```yaml
apiVersion: nodus.dev/v1
kind: Budget
metadata:
  name: examples-billing-monthly
spec:
  limitUSD: "25.00"
  period: Monthly
  scope:
    project: examples
  action: Block
  thresholds: [50, 80, 100]
```

Terminal window

```console
$ nodus apply -f budget.yaml
$ nodus get budgets
```

You get an email at each threshold. The console **Budgets** tab creates and edits Budgets and previews which objects a scope matches now.

To cap one person, scope a Budget to them by email. It counts everything they start, with any of their API keys, including inference requests:

Terminal window

```console
$ nodus create budget ada-monthly --limit 300 --period Monthly --scope-member ada@example.com
```

## When work is refused for money

A create that cannot be funded fails with `402` and the exact amounts, and the console shows an **Add credits** action:

|Error|What to do|
|-|-|
|`InsufficientCredits`|Add credits, or lower `spec.maxCostUSD`|
|`BudgetExceeded`|Raise the Budget’s `spec.limitUSD`, or wait for its next period|
|`ArrearsOutstanding`|Add credits; the top-up settles the unpaid charges first|
|`PaymentDisputed`|Contact support; new work waits until the dispute closes|

## Payment methods and billing details

`nodus billing portal` opens the billing portal, where you update cards, your billing email, address and tax ID, and download past invoices.

## Learn more

* [Credits](https://www.nodus-compute.ai/docs/guides/billing/credits/): the starter credit, grants and expiry
* [Promo codes](https://www.nodus-compute.ai/docs/guides/billing/promo-codes/)
* [Refunds](https://www.nodus-compute.ai/docs/guides/billing/refunds/)
* [Usage and costs](https://www.nodus-compute.ai/docs/guides/billing/usage-and-costs/)


---

# Add a card before running work

> Save a payment method without buying credits.

Source: https://www.nodus-compute.ai/docs/guides/billing/add-a-card/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Open **Billing → Payment method → Add a card**, or run:

Terminal window

```sh
nodus billing portal --setup
```

The hosted setup saves your card without charging it or enabling auto-recharge. Your $30 signup credit keeps its original 30-day expiration. New work needs a verified card even when promotional credit covers its entire cost. An organization billing administrator must add the card. Other members can view its status.

After returning from checkout, wait for Billing to show that the card is ready. Returning to the page alone does not complete verification. If you canceled setup, choose **Add a card** again. CLI and SDK requests receive `PaymentMethodRequired` until verification completes. `PaymentVerificationUnavailable` means to retry shortly.

Removing or letting the card expire blocks new work. Existing running work continues within its available credits and budgets. A restart or new allocation checks the payment method again. Adding a card does not let work exceed your prepaid balance.


---

# Auto-recharge

> Top up automatically from a saved card when your balance falls below a threshold, so running work never stops for money.

Source: https://www.nodus-compute.ai/docs/guides/billing/auto-recharge/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Auto-recharge buys credits for you when your available balance falls below a threshold you choose. Each recharge is charged to a saved card and emailed to you as a receipt, exactly like a top-up you buy yourself. It is off until you turn it on.

## Turn it on

Terminal window

```bash
nodus billing auto-recharge --threshold 10 --amount 50
```

This recharges $50 whenever your available balance drops below $10. If no card is on file yet, the command first opens a hosted page to save one, then turns auto-recharge on. You can also save a card while buying credits with `nodus billing top-up 20 --save-card`. In the console, open **Usage & billing → Balance** and select **Manage payment details** to add a card through hosted checkout. Then expand **Auto-recharge** to configure recharges.

The same settings live on your org’s `BillingAccount`:

```yaml
apiVersion: nodus.dev/v1
kind: BillingAccount
metadata:
  name: default
spec:
  autoRecharge:
    enabled: true
    thresholdUSD: "10.00"   # at least 5.00
    amountUSD: "50.00"      # 5.00 to 1000.00
```

|Setting|Default|Allowed|
|-|-|-|
|`thresholdUSD`|`"10.00"`|$5.00 or more|
|`amountUSD`|`"20.00"`|$5.00 to $1,000.00|

Turning it on without a saved card is refused; check `PaymentMethodPresent` in `nodus billing`, or save a card through the billing portal (`nodus billing portal`). You can turn auto-recharge off in the console even if you no longer have a saved card. Turning it off does not save other settings you are editing.

## When it recharges

Nodus checks your balance each time it renews the hold of running work, settles inference or storage, or refuses a new hold. It recharges when all of these are true:

* your available balance is below `thresholdUSD`;
* a card is on file;
* no other auto-recharge is still being paid;
* the org has had fewer than 5 auto-recharges, and less than $5,000 of them, today (UTC);
* the last 3 auto-recharges did not all fail.

A recharge usually lands in seconds. Work whose funding is running short keeps running while it is paid, so a successful recharge within that window means nothing stops.

## See what it did

Each recharge is a `TopUp` with `spec.origin: AutoRecharge`:

Terminal window

```bash
nodus get topups -o wide
nodus billing receipts
```

`nodus billing` shows the auto-recharge state from `status.autoRecharge`: `consecutiveFailures`, `lastAttemptTime`, `lastResult` and, when it has been switched off, `disabledReason`.

## When a recharge fails

If the card is declined, the recharge `TopUp` ends `Failed` (`PaymentFailed`), nothing is credited, and the billing email and the org’s owners and admins get an email. Auto-recharge tries again the next time the balance is checked.

After 3 failures in a row, Nodus turns auto-recharge off, sets `status.autoRecharge.disabledReason` to `ConsecutiveFailures`, shows a banner in the console and emails the same people. To turn it back on:

1. Update the card in the billing portal: `nodus billing portal`.
2. Run `nodus billing auto-recharge --threshold 10 --amount 50` again, or set `enabled: true`.

If your balance runs out while auto-recharge is off, work stops gracefully as described in [When money runs out](https://www.nodus-compute.ai/docs/guides/billing/when-money-runs-out/).

## Turn it off

Terminal window

```bash
nodus billing auto-recharge --off
```

The saved card stays on file for later; remove it in the billing portal.


---

# Budgets and spending caps

> Put an enforced limit on what an org, a project or a labelled group of work can spend, and cap any single run.

Source: https://www.nodus-compute.ai/docs/guides/billing/budgets/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Nodus enforces two kinds of spending limits. Both are checked before any paid work starts and again every few minutes while it runs, so a limit always stops spend instead of reporting it afterwards.

* A **Budget** limits what matching work across your org can spend in a month or in total.
* **`maxCostUSD`** caps one object: a Job, Pipeline, Sweep, TrainingJob, Sandbox, Workspace, Function, Agent or InferenceEndpoint. A cap on a Pipeline or Sweep is shared by every run it creates.

## Create a Budget

```yaml
apiVersion: nodus.dev/v1
kind: Budget
metadata:
  name: research-monthly
spec:
  limitUSD: "500.00"
  period: Monthly          # a UTC calendar month; Total counts from creation
  scope:
    project: research      # leave out for the whole org
    selector:
      matchLabels: {team: nlp}
  action: Block            # Notify only sends notices
  thresholds: [50, 80, 100]
  notify:
    emails: [research-leads@example.com]
```

Terminal window

```bash
nodus apply -f budget.yaml
nodus get budget research-monthly
```

`nodus get budget` shows what is spent, what is held for running work, what remains and the thresholds already notified this period. An org can have up to 50 Budgets.

## What a Budget covers

A Budget counts every hold and charge of work in its project whose labels matched the selector **when the work was created**. Changing a running Job’s labels does not move it out of a Budget. A Budget you create while work is already running starts covering that work within 5 minutes.

## What happens at the limit

With `action: Block`:

* New work in scope is refused with `402 BudgetExceeded`, naming the Budget, what is left and what the work needs:

  ```text
  budget "research-monthly" has $0.40 left of $500.00 this month; job "train-a" needs $3.20.
  fix: raise spec.limitUSD on budget/research-monthly, or wait until 2026-11-01
  ```

* Running work in scope stops gracefully, as described in [When money runs out](https://www.nodus-compute.ai/docs/guides/billing/when-money-runs-out/), with `Funded=False` and reason `BudgetExceeded`.

* Raising `spec.limitUSD`, switching to `Notify`, deleting the Budget or the start of the next month resumes it.

With `action: Notify`, nothing is refused; you only get the notices.

## Notices

Each threshold is sent once per period as a `BudgetThreshold` Event, a `budget.threshold` webhook and an email to the billing email, org owners and admins, and the addresses in `spec.notify.emails`. Reaching a `Block` limit also sends `BudgetExceeded` (webhook `budget.exceeded`).

In **Usage & billing → Budgets**, expand **Email notifications** to manage your alerts and billing recipients.

## Cap a single run

```yaml
kind: Job
spec:
  maxCostUSD: "25.00"
```

A Job never holds more than its cap. When its spend reaches the cap, it checkpoints and becomes `Suspended` with reason `MaxCostReached`; raising `maxCostUSD` resumes it from the checkpoint. You can raise a cap at any time, but not lower it.

A Pipeline, Sweep or TrainingJob shares its cap with the Jobs it creates. Each child must fit both its own cap and its parent’s remaining cap, along with every matching Budget. A dry-run reports an insufficient spending limit in `status.estimate.blockingReasons` without reserving funds.


---

# Buy credits

> Add prepaid credits with a card through hosted checkout from the console, the CLI or the API, and add the $20 Indra plan.

Source: https://www.nodus-compute.ai/docs/guides/billing/buy-credits/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Nodus is prepaid. You buy credits, and paid work draws on them through a funded hold placed before it starts. You pay on a hosted page, so Nodus never sees your card number. Every purchase is a `TopUp` object that you can list and follow until the credit is on your balance.

## Buy from the console

Open **Usage & billing**, choose **Add credits**, and pick $10, $20, $50, $100 or a custom amount. The console sends you to hosted checkout and brings you back to the billing page, which shows the top-up until it is paid.

## Buy from the CLI

Terminal window

```bash
nodus billing top-up 20
```

The CLI opens the payment page in your browser, waits until the payment is credited and prints your new balance.

|Flag|Does|
|-|-|
|`--save-card`|Saves the card for [auto-recharge](https://www.nodus-compute.ai/docs/guides/billing/auto-recharge/)|
|`--no-open`|Prints the payment link instead of opening a browser, for a remote shell|
|`--no-wait`|Returns as soon as the payment link exists|

## Buy through the API

A top-up is an ordinary resource. Create it, then open its `status.checkoutURL`, which appears within about a second:

```yaml
apiVersion: nodus.dev/v1
kind: TopUp
metadata:
  name: october-credits
spec:
  amountUSD: "50.00"
  savePaymentMethod: false   # true also saves the card for auto-recharge
```

Terminal window

```bash
nodus apply -f topup.yaml
nodus get topup october-credits -o yaml
```

The REST path is `/apis/nodus.dev/v1/topups`. By default Checkout returns to the console billing page; set `spec.successURL` and `spec.cancelURL` to return somewhere else on the console, or to an `http://127.0.0.1` address for a local tool. A top-up cannot be edited or deleted; an unpaid one expires by itself.

## Limits

|Limit|Value|
|-|-|
|Amount of one top-up|$5.00 to $1,000.00, in whole cents|
|Top-ups per org per day|$5,000 in total, per UTC day|
|Payment page|Payable for 1 hour after it is created|

An amount outside the range is refused with `422 Invalid` before anything is charged.

## Follow a top-up

Terminal window

```bash
nodus get topups -o wide
```

|Phase|Reason|Meaning|
|-|-|-|
|`Queued`||Nodus is creating the payment page|
|`Running`||The payment page is open and waiting for you|
|`Running`|`PaymentPending`|You paid with a method that confirms later, such as a bank debit|
|`Succeeded`||Paid and credited; `status.creditedUSD` is on your balance and `status.receiptURL` links the receipt|
|`Failed`|`Expired`|Nobody paid within the hour; nothing was charged|
|`Failed`|`PaymentFailed`|The payment did not complete; nothing was credited|

A declined card does not fail the top-up: the payment page stays open so you can try another card. When a payment fails after you submit it, such as a bank debit that does not clear, Nodus emails your billing email.

## When the credit arrives

Nodus credits each payment once, as soon as payment is confirmed, which usually takes a few seconds. If a payment confirmation is delayed or lost, Nodus rechecks the payment status within the hour and again in a nightly check, so a paid top-up is always credited, and never twice.

If your org owes arrears, the top-up pays them first and the rest goes to your balance. Work that stopped because money ran out resumes by itself; see [When money runs out](https://www.nodus-compute.ai/docs/guides/billing/when-money-runs-out/).

A receipt is emailed for every paid top-up to your billing email. See [Receipts and invoices](https://www.nodus-compute.ai/docs/guides/billing/receipts/).

## The Indra plan

Review the current plan terms at checkout. Manage your subscription and view its invoices in the billing portal.

Start the plan by opening an Indra plan checkout session (type `ComposerSubscription`) and paying on the page it returns:

Terminal window

```bash
curl -X POST "https://api.nodus-compute.ai/apis/nodus.dev/v1/billingaccounts/default/sessions" \
  -H "Authorization: Bearer $NODUS_TOKEN" -H "Idempotency-Key: $(uuidgen)" \
  -d '{"type": "ComposerSubscription"}'
```

The response is `{url, expirationTime}`. An org can have one Indra plan; a second request while the plan is active is refused with `409 Conflict`.

* **Renewal.** Your card is charged each month and an invoice is emailed. A new month’s credit is added only once its invoice is paid; while a renewal payment is failing, payment is retried and Indra requests draw on your regular credits.
* **Cancel.** Open the billing portal with `nodus billing portal` and cancel the plan there. It ends at the end of the paid month: that month’s credit stays usable until then, and nothing further is charged or added.


---

# Credits

> The starter credit, credit grants, the order credits are spent in, and when they expire.

Source: https://www.nodus-compute.ai/docs/guides/billing/credits/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Credit grants are credit Nodus gives you, as opposed to credit you buy. Each grant is a `CreditGrant` you can read but not change:

Terminal window

```console
$ nodus get creditgrants
NAME           SOURCE    AMOUNT   REMAINING  EXPIRES
grt_01j9x...   Starter   $30.00   $12.40     2026-10-31
grt_01j9y...   Promo     $25.00   $25.00     2026-11-30
```

Grants are included in the available balance under **Usage & billing → Balance**. Use `nodus get creditgrants` to inspect individual grants and expiration dates.

## Starter credit

The first org you create gets **$30.00** of starter credit once your email address is verified. It expires 30 days after the org is created. Each person gets starter credit once, however many orgs they create.

Orgs that only have starter credit keep tighter limits until their first top-up: 20 GiB of egress a day, $1 a day of console assistant use and no multi-node runs.

## Where grants come from

|Source|How you get it|
|-|-|
|`Starter`|Your first org, once your email is verified|
|`Promo`|[Redeeming a promo code](https://www.nodus-compute.ai/docs/guides/billing/promo-codes/)|
|`Admin`|Credit added by Nodus support, for example a pilot or a migrated balance|
|`Goodwill`|Credit from Nodus support for a problem on our side|

Some plan grants pay only for Indra (`nodus/indra`) model calls; they show `nodus/auto`, Indra’s other name, as their scope and are never spent on anything else.

## Spending order

Charges draw from grants first, soonest expiry first, then from grants that never expire, and only then from purchased credit. You never have to pick which credit pays.

## Expiry

You get an email 7 days and 1 day before a grant expires. At its expiry the unspent remainder leaves your balance at once, even if a run is still using it; the run keeps going on its other credit. Grants are never refunded or turned into cash.

A grant also settles unpaid charges first, the same way a top-up does.


---

# Partner offers

> Apply an eligible partner offer and understand promotional matching.

Source: https://www.nodus-compute.ai/docs/guides/billing/partner-offers/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Open **Usage & billing → Balance**, choose **Page actions (⋯) → Partner offers**, enter your code and optionally add your company or batch. An organization admin submits the request; a platform administrator verifies eligibility before credit is granted. Organization members can view progress.

For the YC offer, promotional credit reaches **$100 total**, including earlier grants even if spent or expired. A previous $30 starter grant therefore leaves **$70 extra**. You keep the existing **10 GB storage inclusion**.

After approval, earn **10% back on the first $10,000 of eligible usage**, for a maximum **$1,000 bonus**. Only captured usage paid from purchased credit qualifies. Usage paid by starter credit, promotional grants or earned bonuses does not. Earned credit does not expire. Usage corrections adjust the matching benefit, including after an offer is revoked.

You can also use the CLI:

Terminal window

```sh
nodus billing deal
nodus billing deal YC --note 'Company and batch'
```

A request snapshots the terms you applied for. Later offer edits do not change them. Approval keeps the usual card prerequisite and usage prices. If an offer is revoked, future matching stops and existing earned credit remains, subject to corrections.


---

# Promo codes

> Redeem a promo code for credit, and what each redemption error means.

Source: https://www.nodus-compute.ai/docs/guides/billing/promo-codes/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

A promo code adds a [credit grant](https://www.nodus-compute.ai/docs/guides/billing/credits/) to your org. Redeem it from the CLI:

Terminal window

```console
$ nodus billing redeem LAUNCH25
Redeemed ****CH25: $25.00 of credit, expires 2026-11-30.
```

Codes are not case-sensitive, and spaces around them are ignored. Redeeming needs the `billing:write` permission. The response shows the code masked to its last four characters; Nodus stores only a keyed digest of each code.

## Errors

|Error|Meaning|
|-|-|
|`404 NotFound`|The code does not exist, or it has been withdrawn|
|`410 Expired`|The code’s last redemption date has passed|
|`409 Conflict`|Your org has already redeemed this code, or the code has been fully redeemed|
|`429 TooManyRequests`|More than 5 attempts in a minute; wait a minute and try again|

Retrying a redemption with the same `Idempotency-Key` returns the first result and never adds credit twice. The CLI sets the key for you.

## Expiry

A promo grant expires on the date the code sets, counted from when you redeem it. Codes without one never expire.


---

# Receipts and invoices

> Find the receipt and invoice for every top-up and plan payment, change where receipts are sent, and manage your card and billing details.

Source: https://www.nodus-compute.ai/docs/guides/billing/receipts/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Every payment you make to Nodus, whether a top-up you buy, an auto-recharge or an Indra plan month, has a hosted invoice with a PDF and an emailed receipt. Nodus does not send postpaid bills: credits are prepaid, and what they paid for is in your [usage records](https://www.nodus-compute.ai/docs/guides/billing/usage-and-costs/).

## Where receipts go

Receipts go to the billing email of your org’s `BillingAccount`, which defaults to the email of the owner who created the org. To send them somewhere else, such as a finance mailbox, change `spec.billingEmail`:

```yaml
apiVersion: nodus.dev/v1
kind: BillingAccount
metadata:
  name: default
spec:
  billingEmail: finance@example.com
```

Terminal window

```bash
nodus apply -f billing.yaml
```

The new address applies to the next payment and is also where Nodus sends money notices, such as a failed auto-recharge, together with the org’s owners and admins.

## Find a receipt

Terminal window

```bash
nodus billing receipts
```

This lists your top-ups, Checkout and auto-recharge alike, with a link to each invoice page and its PDF. The same links are on each `TopUp`:

Terminal window

```bash
nodus get topup october-credits -o yaml
```

|Field|Links to|
|-|-|
|`status.receiptURL`|The hosted invoice page, which shows the payment and the card used|
|`status.invoicePDFURL`|The invoice as a PDF|

The links appear a few seconds after the payment succeeds, once the invoice is finalized.

## The billing portal

Terminal window

```bash
nodus billing portal
```

This opens the hosted billing portal for your org, where you can:

* see and download every invoice and receipt, including Indra plan invoices;
* add, replace or remove the card used for auto-recharge and the Indra plan;
* change the name, address and other details printed on your invoices;
* cancel the Indra plan.

The portal link is valid for 5 minutes; run the command again for a new one. From the API, create a session with `POST /apis/nodus.dev/v1/billingaccounts/default/sessions` and `{"type": "Portal"}`.

Nodus does not charge sales tax or VAT on top-ups.

## Refunds

Refunds cover unspent purchased credit and are made by Nodus support. A refunded top-up shows the amount in `status.refundedUSD`, the credit leaves your balance when the refund is approved, and the refund appears on the top-up’s invoice page. Credit from grants and promo codes is not refundable.

## Questions about a charge

Contact Nodus support before disputing a charge with your bank. While a dispute is open, new work that needs credit is refused with `402 PaymentDisputed`; running work is not stopped. When the dispute closes in your favor the credit returns to your balance.


---

# Refunds

> How to get unspent purchased credit back to your card, and what can be refunded.

Source: https://www.nodus-compute.ai/docs/guides/billing/refunds/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

You can get **unspent purchased credit** back to the card that paid for it. Credit grants, including starter credit and promo codes, are never refunded.

## Ask for a refund

Contact support with your org and the top-up you want refunded. Support checks the request and starts the refund; refunds above $500 are approved by a second person at Nodus. You do not need to stop your work first.

The amount leaves your available balance as soon as the refund is approved, so it cannot be spent while the card refund is processing. The top-up shows the refund under **Usage & billing → Receipts & invoices**, and `nodus get transactions` shows a `RefundRequest` and then a `Refund`. Your card is usually credited within 5 to 10 business days. If the card refund fails, a `RefundFailed` transaction returns the amount to your balance.

## What can be refunded

* At most what you paid on that top-up, less anything already refunded on it.
* At most your unspent purchased credit at approval: credit already used for runs is not refunded.
* One refund per top-up at a time, in whole cents.

## Disputes

If you dispute a payment with your bank instead, the disputed amount is removed from your balance and new work is paused with `402 PaymentDisputed` until the dispute closes. Running work continues. Contacting support first is usually faster.


---

# Usage and costs

> See what each run cost, split by project, label, meter and segment, and export usage as CSV.

Source: https://www.nodus-compute.ai/docs/guides/billing/usage-and-costs/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Every charge Nodus makes is backed by usage records: one line per meter, per object, per window. This page shows how to read them, group them and export them.

## See what a run cost

Each compute object shows its cost so far in `status.cost`:

Terminal window

```bash
nodus get job train-llama -o jsonpath='{.status.cost}'
```

```json
{"totalUSD": "4.182500", "heldUSD": "0.750000", "bySegment": {"bootUSD": "0.121000", "runningUSD": "3.980000", "teardownUSD": "0.081500"}}
```

`heldUSD` is reserved credit. Review the final total in the run’s Cost tab.

## List and group usage

Terminal window

```bash
nodus get usage --since 2d
nodus get usage --group-by project,meter
nodus get usage --group-by member --since 30d
nodus get usage --group-by label:team,day
nodus get usage --group-by rank,segment --field-selector object.uid=<uid of a multi-node Job>
```

`--group-by` accepts `project`, `kind`, `member`, `meter`, `day`, `segment`, `rank` and `label:<key>`. `member` is the person who started the work, whichever of their API keys they used. Labels are the ones the object carried when it was admitted, so label your work before you submit it:

```yaml
metadata:
  name: train-llama
  labels:
    team: research
```

Grouped totals always add up to the ungrouped total: every line lands in exactly one group, and lines without the grouped value share an empty group.

## Export as CSV

Terminal window

```bash
nodus get usage --since 30d -o csv > usage.csv
curl -H "Authorization: Bearer $NODUS_TOKEN" -H "Accept: text/csv" \
  "https://api.nodus-compute.ai/v1/usagerecords?since=30d"
```

Amounts are in US dollars. Use the exported totals to reconcile your spending with the console.

For help with a charge, see [Receipts and invoices](https://www.nodus-compute.ai/docs/guides/billing/receipts/#questions-about-a-charge).


---

# When money runs out

> How Nodus warns you, stops work gracefully and resumes it when credits, a raised Budget or a raised cap return.

Source: https://www.nodus-compute.ai/docs/guides/billing/when-money-runs-out/
Build revision: 4ebfc6023eeed1bd55d9969af1612182a7b0c7ff

Credits are prepaid. Before paid work starts, Nodus places a funded hold on your balance, and it renews that hold every 5 minutes while the work runs. When a renewal cannot be funded, from your balance, a Budget or a `maxCostUSD` cap, the work stops gracefully inside time that is already paid for. Nothing runs past what you funded, and nothing is lost that the work saved.

## Before you start: fail fast

A create that cannot be funded is refused at once with the amounts and the fix:

```text
402 InsufficientCredits
job "train-a" needs a $3.20 hold to start (released when it ends); available $1.10.
fix: nodus billing top-up 20, or lower spec.maxCostUSD
```

Other refusals are `BudgetExceeded` (a Budget or a cap has too little left), `ArrearsOutstanding` (unpaid charges) and `PaymentDisputed`. A distributed Job checks all of its nodes together: it starts with every node funded or not at all.

## Warnings

When your available balance falls below $5, or below 20 % of what the next renewal of your running work needs, you get a `LowBalance` Event, a `billing.low_balance` webhook, at most one email a day and a console banner. Running work whose funds will run out soon still shows `Funded=True`, and the condition’s message gives the time it will stop. A top-up, a credit grant or an auto-recharge before that time keeps it running.

When a charge is larger than what is left, the rest becomes unpaid charges. You get an `ArrearsPosted` Event, a `billing.arrears_posted` webhook and at most one email a day, and new work waits until a top-up or credit grant pays them.

## How each kind stops

|Kind|What happens|State|Resumes|
|-|-|-|-|
|Job (checkpointed)|Takes an urgent checkpoint, then stops|`Suspended`, `Funded=False`|Automatically once funded, from the checkpoint|
|Job (restartable or ephemeral)|Stops at the funded edge|`Suspended`, `Funded=False`|Automatically; ephemeral Jobs restart from the start|
|Job at `maxCostUSD`|Checkpoints, then stops|`Suspended`, reason `MaxCostReached`|When you raise `maxCostUSD`|
|Distributed Job|Every node checkpoints together, then all stop|`Suspended`, `Funded=False`|Automatically, with all nodes funded|
|Sandbox|Snapshots its filesystem and state, then stops|`Stopped`, `stopReason: InsufficientCredits`; `spec.state` stays `Running`|On the next exec or connect once funded|
|Workspace|Saves the home volume, then stops|`Stopped` with the money reason|On `nodus start`, SSH connect or the schedule once funded|
|AgentRun|Finishes or interrupts the current step|`Waiting` for funds|Automatically|
|Agent idle workers|Scale to zero|`Funded=False` on the Agent|Automatically|
|Function|Stops taking calls, finishes in-flight calls, scales to zero|New calls queue with `Funded=False`|Automatically|
|TrainingJob|Its Jobs suspend; grading Sandboxes are deleted|`Suspended`|Automatically|
|Image build|The build stops|Image `Pending`, `Funded=False`|Automatically rebuilds|
|Volume import or export|The transfer stops|`ImportFailed(InsufficientCredits)`|`nodus request reimport volume/<name>`|
|Inference|New requests return an OpenAI- or Anthropic-shaped `402`; in-flight requests finish|—|Immediately|

Nodus never changes the `spec.state` you set. It records the stop in the object’s phase and `Funded` condition, emits `FundingLost`, and emits `FundingRestored` when it resumes. You get at most one email an hour listing stopped work.

## Getting going again

Terminal window

```bash
nodus billing top-up 20
nodus get jobs --watch
```

A top-up resumes waiting work oldest first, as each hold fits. Work stopped by a Budget resumes when you raise the Budget’s limit, switch it to `Notify`, delete it or the next month starts; work stopped at `maxCostUSD` resumes when you raise the cap.
