Usage and costs
View MarkdownEvery 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
Section titled “See what a run cost”Each compute object shows its cost so far in status.cost:
nodus get job train-llama -o jsonpath='{.status.cost}'{"totalUSD": "4.182500", "heldUSD": "0.750000", "bySegment": {"bootUSD": "0.121000", "runningUSD": "3.980000", "teardownUSD": "0.081500"}}heldUSD is reserved but not yet charged. The total becomes final once the capacity behind the run is confirmed
deleted, which can be a minute or two after the run itself ends.
When a run fails because of Nodus, the teardown after the failure and any of its start not yet billed are not
charged: bySegment.coveredByNodus names those segments, and nodus describe shows them on the cost line, for
example $0.00 (covered by Nodus: boot, teardown).
What each segment covers
Section titled “What each segment covers”Compute usage from the moment the capacity starts billing until it is confirmed deleted is split into segments:
| Segment | Covers |
|---|---|
Boot |
From the start of billing to the moment your command starts: boot, registration, readiness checks and pulling your image |
Running |
Your command running, including reading inputs, lazy image fetches, checkpoint writes and the snapshot when the run stops |
Restore |
For a run that resumes from a checkpoint or snapshot: from the start of billing to the moment your command starts again, including the restore. It replaces Boot |
Teardown |
From the stop to confirmed deletion, plus the capacity’s billing increment (lines with detail: IncrementRounding) |
Time between runs that reuse the same capacity is billed on the warm_idle_seconds meter and has no segment. When
Nodus itself delays a deletion, that time is not charged: it shows as a zero-amount line with detail: NodusBorne.
List and group usage
Section titled “List and group usage”nodus get usage --since 2dnodus get usage --group-by project,meternodus get usage --group-by member --since 30dnodus get usage --group-by label:team,daynodus 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:
metadata: name: train-llama labels: team: researchGrouped 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
Section titled “Export as CSV”nodus get usage --since 30d -o csv > usage.csvcurl -H "Authorization: Bearer $NODUS_TOKEN" -H "Accept: text/csv" \ "https://api.nodus-compute.ai/v1/usagerecords?since=30d"Amounts are in US dollars with six decimals. quantity is in the meter’s unit (seconds, tokens, GiB or
characters), and rate_micros is the rate in micro-dollars per rate_basis units.
Inference and Indra
Section titled “Inference and Indra”Inference requests are rolled up into one line per model, meter and hour. A request to nodus/indra (Indra)
shows the model that served it and, beside it, the routing call’s input and output tokens on lines whose SKU ends
in :routing:input and :routing:output. The request is charged once, rounded up to the micro-dollar over all of
its lines together.
Agents
Section titled “Agents”An Agent’s idle workers bill as warm idle on the Agent. When a run claims a worker, the worker’s time from that moment bills on the AgentRun until the run releases it, so each second of worker time appears once. Model calls a run makes with Nodus’s Claude are billed per request on the AgentRun, with the routing call beside the model that answered; calls made with your own Anthropic key carry no Nodus model charge.
Storage and egress
Section titled “Storage and egress”Retained storage (checkpoints, Volumes, images you build, and Job and Agent outputs) is sampled every hour per
object. The first 10 GB across your organization are included and shared across your objects in proportion to
their size; each object’s line shows only its billable part. The hours of a UTC day are charged together
shortly after midnight UTC, as one Storage transaction.
Egress from your containers and interactive sessions is counted per object per UTC day. The first 10 GiB a day
across your organization are included, and the rest is charged the next morning as one Egress transaction,
split across objects by bytes.
If your balance cannot cover a daily storage or egress charge, the remainder becomes arrears. While arrears are
outstanding, new runs and uploads are refused with ArrearsOutstanding; your next top-up pays them first.
Storage left in arrears gets an email at 7, 21 and 28 days. At 30 days Nodus proposes deleting the stored data beyond the included 10 GB: finished Jobs’ checkpoints and outputs first, then older Volume revisions, then the latest revisions, oldest first. Nothing is deleted until two Nodus administrators approve the list, and paying your arrears before then cancels it. Deleting data does not clear the arrears.
Meters reference
Section titled “Meters reference”quantity is in the meter’s unit. rate applies to rateBasis units of quantity, so a line’s amount is
quantity × rate ÷ rateBasis, rounded down, except that the last line of a run rounds up to the capacity’s
billing increment.
| Meter | Billed for | Unit | Rate is per | rateBasis |
SKU |
|---|---|---|---|---|---|
compute_seconds |
Dedicated capacity for Jobs, GPU Sandboxes, GPU Workspaces, Functions and training members, with a segment | seconds | hour | 3 600 | rented:<offering> |
warm_idle_seconds |
Warm capacity kept between runs, idle Function and agent workers | seconds | hour | 3 600 | rented:<offering> |
node_vcpu_seconds |
vCPU on shared nodes (Sandboxes, agent runs), with a segment | milli-vCPU seconds | vCPU-hour | 3 600 000 | node:vcpu |
node_gib_seconds |
Memory on shared nodes, with a segment | MiB seconds | GiB-hour | 3 686 400 | node:memory |
node_disk_gib_seconds |
Requested disk above 10 GiB per vCPU on shared nodes | GiB seconds | GiB-hour | 3 600 | node:disk |
build_vcpu_seconds |
Image builds, with a segment | milli-vCPU seconds | vCPU-hour | 3 600 000 | build:vcpu |
storage_gb_hours |
Retained storage above 10 GB per organization | MB hours | GB-month (30 days) | 720 000 | storage:retained |
egress_gib |
Egress above 10 GiB per organization per UTC day; relayed training traffic from the first byte | MiB | GiB | 1 024 | egress:gib, egress:mesh-relay, egress:supplier |
inference_input_tokens |
Input tokens | tokens | million tokens | 1 000 000 | model:<model>:input |
inference_output_tokens |
Output tokens, reasoning included | tokens | million tokens | 1 000 000 | model:<model>:output |
inference_cache_read_tokens |
Cached input read | tokens | million tokens | 1 000 000 | model:<model>:cache_read |
inference_cache_write_tokens |
Cache writes, 5-minute or 1-hour | tokens | million tokens | 1 000 000 | model:<model>:cache_write_5m, model:<model>:cache_write_1h |
inference_audio_seconds |
Transcription and translation, 10 s minimum per request | milliseconds | audio-hour | 3 600 000 | model:<model>:audio |
inference_speech_characters |
Speech synthesis input | characters | million characters | 1 000 000 | model:<model>:speech |
platform_device_hours |
Your own devices assigned to Nodus-scheduled work | device seconds | device-hour | 3 600 | platform:device-hour |
platform_predict_seconds |
Predict on one of your pools | seconds | 30-day month | 2 592 000 | platform:predict |
Indra requests add a routing line beside the model’s lines, with SKU <router>:routing:input or
<router>:routing:output. An egress:supplier line passes through an egress charge billed for your dedicated
capacity at the same margin as the capacity itself.