Workloads API
Submit requirements. Nodus matches a nodus:…
catalog route, runs to verified completion, and recovers through reclaim.
You never pick a supplier.
# Playground
Describe the work and its constraints, not a machine SKU. Watch Nodus match a catalog route, run with checkpoints, and recover from a reclaim; no API key required.
- workload
- -
- catalog sku
- -
- fit
- -
- est. cost
- -
- status
- -
- generation
- -
- spend_usd
- -
# Install
The SDK is not on PyPI yet, so there is no public install command,
and signup is invite-gated —
email us.
Runtime dependency: httpx.
# Authentication
Every request carries Authorization: Bearer <api_key>.
Sign in to the console and issue a key under Access.
Keys are stored as a SHA-256 hash and shown once at creation. Revocation is
checked per request; revoking never signs you out of the console.
| Variable | Default | Notes |
|---|---|---|
NODUS_API_KEY |
— | Required. Issued from the console as nk_live_… or nk_test_…. |
NODUS_BASE_URL |
https://api.nodus.run |
Override for staging. |
# Quick start
Describe the work and constraints. Hardware fit, placement, and recovery stay with Nodus.
# export NODUS_API_KEY=nk_live_… >>> import nodus >>> >>> with nodus.Client() as client: ... wl = client.run( ... command=["sh", "-c", "for i in 1 2 3; do echo step-$i; sleep 3; done"], ... model="7B fine-tune", ... peak_memory_gb=24, ... expected_runtime_hours=1, ... budget=100, ... ) ... done = client.wait(wl.id) ... print(done.status, done.spend_usd) WorkloadStatus.COMPLETED 0.02
command is the argv your workload executes;
there is no default. The nine-second loop is a stand-in; swap in
["python", "train.py"] and nothing else changes.
Finding inputs and reporting progress is the
runtime contract.
# CLI
The nodus command ships with the SDK, reads
the same environment, and submits one-off briefs.
$ export NODUS_API_KEY=nk_live_… # submit and block until the work is done $ nodus run \ --model "7B fine-tune" \ --peak-memory-gb 80 --hours 18 --budget 400 \ --continuity checkpointed \ --wait --timeout 72000 \ -- python train.py --epochs 10 # inspect without blocking $ nodus list --status active $ nodus get wl_9f3c1b2a --wait $ nodus events wl_9f3c1b2a --follow $ nodus artifacts wl_9f3c1b2a $ nodus cancel wl_9f3c1b2a
Everything after -- runs inside the workload.
--wait exits non-zero on
failed or
cancelled, so it composes in CI.