LanguagePython ≥ 3.10 SDK1.0.0 APIv1

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.

Request

                
Customer view idle
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.

VariableDefaultNotes
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.

quickstart · python ~/your-app
# 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.

cli ~/your-app
$ 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.