Skip to content

Replace a TrainingJob

PUT
/apis/nodus.dev/v1beta1/namespaces/{namespace}/trainingjobs/{name}
curl --request PUT \
--url https://example.com/apis/nodus.dev/v1beta1/namespaces/example/trainingjobs/example \
--header 'Content-Type: application/json' \
--data '{ "apiVersion": "example", "kind": "example", "metadata": { "annotations": { "additionalProperty": "example" }, "creationTimestamp": "example", "deletionGracePeriodSeconds": 1, "deletionTimestamp": "example", "finalizers": [ "example" ], "generateName": "example", "generation": 1, "labels": { "additionalProperty": "example" }, "managedFields": [ { "apiVersion": "example", "fieldsType": "example", "fieldsV1": { "additionalProperty": "example" }, "manager": "example", "operation": "example", "subresource": "example", "time": "example" } ], "name": "example", "namespace": "example", "ownerReferences": [ { "apiVersion": "example", "blockOwnerDeletion": true, "controller": true, "kind": "example", "name": "example", "uid": "example" } ], "resourceVersion": "example", "selfLink": "example", "uid": "example" }, "spec": { "data": { "columns": { "additionalProperty": "example" }, "format": "example", "path": "example", "revision": 1, "validationFraction": "example", "volume": "example" }, "distributed": { "gpusPerNode": 1, "launcher": "example", "maxAssemblyRetries": 1, "network": "example", "nodes": 1, "startupTimeout": "example", "totalGPUs": 1, "transport": "example" }, "environment": { "heldOutTasks": 1, "name": "example", "seed": 1, "trainTasks": 1 }, "evaluation": { "baseline": true, "final": true, "minComparisonTasks": 1 }, "expectedDuration": "example", "exportTo": { "volume": "example" }, "grading": { "maxParallel": 1 }, "maxCostUSD": "example", "mode": "example", "model": { "secret": "example", "uri": "example", "volume": { "name": "example", "revision": 1 } }, "parameters": "example", "placement": { "dedicated": true, "interruptible": "example", "maxRateUSDPerHour": "example", "offerings": [ "example" ], "pool": "example", "profile": "example", "queueTimeout": "example", "regions": [ "example" ] }, "resources": { "cpu": "example", "disk": "example", "gpu": { "count": 1, "exact": true, "interconnect": "example", "minMemory": "example", "type": [ "example" ] }, "memory": "example", "nodes": 1 }, "runtime": "example", "state": "example", "task": "example", "teacher": { "secret": "example", "uri": "example", "volume": { "name": "example", "revision": 1 } }, "tracking": { "mlflow": { "experiment": "example", "secret": "example", "uri": "example" }, "wandb": { "connection": "example" } } }, "status": { "compiledJob": { "activeDeadlineSeconds": 1, "args": [ "example" ], "backoffLimit": 1, "command": [ "example" ], "completeByTime": "example", "completions": 1, "connections": [ "example" ], "distributed": { "gpusPerNode": 1, "launcher": "example", "maxAssemblyRetries": 1, "network": "example", "nodes": 1, "startupTimeout": "example", "totalGPUs": 1, "transport": "example" }, "env": [ { "name": "example", "value": "example", "valueFrom": { "secretKeyRef": { "key": "example", "name": "example" } } } ], "expectedDuration": "example", "image": "example", "imagePullSecrets": [ "example" ], "imageRef": "example", "initCommand": { "command": [ "example" ], "timeout": "example" }, "inputs": [ { "bucket": { "connection": "example", "sha256": "example", "uri": "example" }, "fromStage": { "output": "example", "stage": "example" }, "fromWorkspace": { "name": "example", "path": "example" }, "name": "example", "output": { "index": 1, "job": "example", "name": "example" }, "url": { "sha256": "example", "url": "example" }, "volume": { "name": "example", "revision": 1 } } ], "maxCostUSD": "example", "network": { "egress": { "allow": [ "example" ], "policy": "example", "presets": [ "example" ] } }, "outputs": [ { "fromRanks": "example", "name": "example", "path": "example", "sink": { "connection": "example", "mode": "example", "table": "example" } } ], "parallelism": 1, "placement": { "dedicated": true, "interruptible": "example", "maxRateUSDPerHour": "example", "offerings": [ "example" ], "pool": "example", "profile": "example", "queueTimeout": "example", "regions": [ "example" ] }, "recovery": { "checkpoint": { "format": "example", "integration": "example", "interval": "example", "maxSize": "example", "paths": [ "example" ], "retainAfterFinish": "example" }, "continuity": "example", "maxAttempts": 1, "minProgressDuration": "example", "onInterruption": "example" }, "resources": { "cpu": "example", "disk": "example", "gpu": { "count": 1, "exact": true, "interconnect": "example", "minMemory": "example", "type": [ "example" ] }, "memory": "example", "nodes": 1 }, "scaledownWindow": "example", "secrets": [ { "name": "example", "version": 1 } ], "serviceAccountName": "example", "sidecars": [ { "command": [ "example" ], "env": [ { "name": "example", "value": "example", "valueFrom": { "secretKeyRef": { "key": "example", "name": "example" } } } ], "image": "example", "name": "example", "startupTimeout": "example" } ], "source": { "blob": "example", "git": { "path": "example", "ref": "example", "repo": "example" } }, "state": "example", "timeout": "example", "ttlSecondsAfterFinished": 1, "volumes": [ { "mountPath": "example", "readOnly": true, "revision": 1, "volume": "example" } ], "workingDir": "example" }, "conditions": [ { "lastTransitionTime": "example", "message": "example", "observedGeneration": 1, "reason": "example", "status": "example", "type": "example" } ], "cost": { "bySegment": { "bootUSD": "example", "coveredByNodus": [ "example" ], "restoreUSD": "example", "runningUSD": "example", "teardownUSD": "example" }, "final": true, "fundedUntilTime": "example", "heldUSD": "example", "limitUSD": "example", "rateUSDPerHour": "example", "totalUSD": "example" }, "diagnostics": { "rewardSignal": "example", "weightsChanged": true }, "estimate": { "assemblyBoundUSD": "example", "blockingReasons": [ { "code": "example", "fix": "example", "message": "example" } ], "concurrentHoldUSD": "example", "costUSD": { "p50": "example", "p90": "example" }, "gangHoldUSD": "example", "holdUSD": "example", "minimumChargeUSD": "example", "overheadUSD": { "p50": "example", "p90": "example" }, "placementPreview": { "explain": "example", "interruptible": true, "offering": "example", "regionClass": "example", "warmReuse": true }, "pricebookVersion": "example", "rateUSDPerHour": "example", "startup": { "cold": { "p50": "example", "p90": "example" }, "warm": { "p50": "example", "p90": "example" } }, "topology": "example", "validUntil": "example", "warnings": [ { "code": "example", "message": "example" } ] }, "job": "example", "message": "example", "metrics": { "gpuMemoryBytes": 1, "loss": "example", "step": 1, "tokensPerSecond": "example", "totalSteps": 1 }, "observedGeneration": 1, "outputs": [ { "name": "example", "sizeBytes": 1 } ], "phase": "example", "progress": { "stage": "example" }, "provenance": { "environmentDigest": "example", "managed": true, "modelRevision": "example", "parametersSHA256": "example", "runtimeDigest": "example" }, "reason": "example", "summary": { "baseline": { "errors": 1, "inProgress": 1, "meanReward": "example", "passRate": "example", "passed": 1, "tasks": 1 }, "comparison": { "changePP": "example", "comparable": true, "measurable": true, "note": "example", "reason": "example", "resolutionPP": "example" }, "evaluation": { "errors": 1, "inProgress": 1, "meanReward": "example", "passRate": "example", "passed": 1, "tasks": 1 } } } }'
namespace
required
string

The project.

name
required
string

The object’s name.

dryRun
string
fieldValidation
string
fieldManager
string
Idempotency-Key
string
If-Match
string
Media type application/json

TrainingJob is pre-training, fine-tuning, post-training or an RL run on a TrainingRuntime (Beta). It compiles to one Job, a multi-node gang when it asks for more than one node, and mirrors that Job’s phase.

object
apiVersion
string
kind
string
metadata
object
annotations
object
key
additional properties
string
creationTimestamp
string
deletionGracePeriodSeconds
integer format: int64
deletionTimestamp
string
finalizers
Array<string>
nullable
generateName
string
generation
integer format: int64
labels
object
key
additional properties
string
managedFields
Array<object>
nullable
object
apiVersion
string
fieldsType
string
fieldsV1
object
key
additional properties
manager
string
operation
string
subresource
string
time
string
name
string
namespace
string
ownerReferences
Array<object>
nullable
object
apiVersion
required
string
blockOwnerDeletion
boolean
controller
boolean
kind
required
string
name
required
string
uid
required
string
resourceVersion
string
selfLink
string
uid
string
spec
required

TrainingJobSpec describes one training run.

object
data

TrainingData is a dataset in a Volume.

object
columns

Columns maps the runtime’s column roles (prompt, completion, chosen, rejected, text) to dataset columns.

object
key
additional properties
string
format

Format is Auto (default), JSONL, JSON or CSV.

string
path

Path is a file or directory inside the Volume.

string
revision

Revision pins a revision.

integer format: int64
validationFraction

ValidationFraction is the share held out for validation, as a decimal string (default “0.05”).

string
volume
required

Volume is the Volume holding the data.

string
distributed

Distributed runs the Job as a gang of nodes that start together and restart together (Beta).

object
gpusPerNode

GPUsPerNode is 1, 2, 4 or 8 and equals resources.gpu.count when both are set.

integer format: int32
launcher

Launcher is Plain (env contract only), Torchrun, Ray, Verl, Accelerate or Deepspeed.

string
maxAssemblyRetries

MaxAssemblyRetries is how many times a timed-out assembly is re-placed (0–5, default 2).

integer format: int32
network

Network is Colocated (one provider and region), Regional (one region class) or Global.

string
nodes

Nodes is the gang size (2–16; the beta caps it at 8). Exactly one of nodes and totalGPUs.

integer format: int32
startupTimeout

StartupTimeout is the gang assembly budget (5m–60m, default 15m).

string
totalGPUs

TotalGPUs is resolved into status.topology at admission (2–64).

integer format: int32
transport

Transport is Direct (private or direct paths only) or Auto (relayed paths allowed).

string
environment

EnvironmentBinding selects an Environment and its task counts.

object
heldOutTasks

HeldOutTasks is the number of held-out tasks evaluated before and after training.

integer format: int32
name
required

Name is nodus/@ or @ in this project.

string
seed

Seed selects the tasks deterministically (default 0).

integer format: int64
trainTasks

TrainTasks is the number of training tasks.

integer format: int32
evaluation

Evaluation controls the baseline and final evaluation.

object
baseline

Baseline evaluates the model before training (default true).

boolean
final

Final evaluates the model after training (default true).

boolean
minComparisonTasks

MinComparisonTasks is the smallest held-out set a comparison is reported on (default and minimum 16).

integer format: int32
expectedDuration

ExpectedDuration overrides the runtime estimate of steps × seconds per step.

string
exportTo

ExportTarget is a Volume the outputs are also written to.

object
volume
required

Volume is the Volume.

string
grading

GradingPolicy bounds grading.

object
maxParallel

MaxParallel is the most grading Sandboxes at once (default 4, at most 32).

integer format: int32
maxCostUSD

MaxCostUSD caps the run, its compiled Job and its grading Sandboxes together; it can only be raised.

string
mode

Mode is Train (default) or Evaluate, and must be one of the runtime’s modes.

string
model

ModelSource is exactly one of uri and volume.

object
secret

Secret names a Secret with HF_TOKEN for gated models.

string
uri

URI is hf://[@]; admission pins it to a 40-hex commit, cached once per organization as a read-only Volume.

string
volume

ModelVolume names a Volume revision.

object
name
required

Name is the Volume.

string
revision

Revision pins a revision (latest Ready at admission when unset).

integer format: int64
parameters

Parameters are validated against the runtime’s JSON Schema (at most 64 KiB) over the runtime defaults.

placement

Placement constrains where work may run.

object
dedicated

Dedicated is reserved; only true is accepted.

boolean
interruptible

Interruptible is Never, Allow (the scheduler decides by expected cost) or Prefer.

string
maxRateUSDPerHour

MaxRateUSDPerHour filters out offerings above this customer rate.

string
offerings

Offerings restricts placement to these Offerings.

Array<string>
nullable
pool

Pool is a BYOC Pool in the project.

string
profile

Profile is Balanced, Cost or Speed.

string
queueTimeout

QueueTimeout is how long the Job may wait for capacity before failing with CapacityUnavailable (default 24h; 0s waits forever).

string
regions

Regions are region classes (us, eu, …); empty means any.

Array<string>
nullable
resources

Resources are capacity floors. For GPU work the offering’s host shape applies if larger.

object
cpu

CPU is the vCPU floor.

string
disk

Disk is the ephemeral disk floor.

string
gpu

GPURequest asks for accelerators. A family (H100) matches any of its variants and never another family.

object
count

Count is the GPUs per node: 1, 2, 4 or 8.

integer format: int32
exact

Exact pins the exact variant instead of matching the family.

boolean
interconnect

Interconnect is Any or NVLink.

string
minMemory

MinMemory is the per-GPU memory floor.

string
type

Type lists 1–8 accelerator ids or families from the catalog.

Array<string>
nullable
memory

Memory is the host memory floor.

string
nodes

Nodes above 1 is shorthand for spec.distributed.nodes and is stored in that form.

integer format: int32
runtime
required

Runtime is a Ready TrainingRuntime: nodus/ for the catalog or in this project.

string
state

State is the desired state: Running (default), Suspended, or the terminal stop state.

string
task

Task overrides the runtime’s task; Pretrain on sft trains on raw text with packing.

string
teacher

ModelSource is exactly one of uri and volume.

object
secret

Secret names a Secret with HF_TOKEN for gated models.

string
uri

URI is hf://[@]; admission pins it to a 40-hex commit, cached once per organization as a read-only Volume.

string
volume

ModelVolume names a Volume revision.

object
name
required

Name is the Volume.

string
revision

Revision pins a revision (latest Ready at admission when unset).

integer format: int64
tracking

Tracking names customer-owned trackers; they are never the source of truth for comparisons.

object
mlflow

MLflowTracking is an MLflow server.

object
experiment

Experiment is the experiment name.

string
secret

Secret holds MLFLOW_TRACKING_TOKEN or username and password.

string
uri
required

URI is the tracking server (https://).

string
wandb

WandBTracking is a Weights & Biases project.

object
connection
required

Connection is a WandB Connection.

string
status

TrainingJobStatus is written by the TrainingJob controller.

object
compiledJob

JobSpec describes a Job. Everything is immutable after create except parallelism, backoffLimit, timeout, maxCostUSD (raise only), recovery.maxAttempts, recovery.checkpoint.interval and retainAfterFinish, ttlSecondsAfterFinished and state.

object
activeDeadlineSeconds

ActiveDeadlineSeconds is accepted as an alias of timeout on write and folded into it.

integer format: int64
args
Array<string>
nullable
backoffLimit

BackoffLimit is how many customer failures (non-zero exits, OOM) across all indexes are retried before the Job fails (0–100).

integer format: int32
command
Array<string>
nullable
completeByTime

CompleteByTime is a finish-by hint for placement and checkpoint cadence. It never stops the Job.

string
completions

Completions is how many indexes must succeed (1–10000). Each index gets NODUS_INDEX and JOB_COMPLETION_INDEX.

integer format: int32
connections
Array<string>
nullable
distributed

Distributed runs the Job as a gang of nodes that start together and restart together (Beta).

object
gpusPerNode

GPUsPerNode is 1, 2, 4 or 8 and equals resources.gpu.count when both are set.

integer format: int32
launcher

Launcher is Plain (env contract only), Torchrun, Ray, Verl, Accelerate or Deepspeed.

string
maxAssemblyRetries

MaxAssemblyRetries is how many times a timed-out assembly is re-placed (0–5, default 2).

integer format: int32
network

Network is Colocated (one provider and region), Regional (one region class) or Global.

string
nodes

Nodes is the gang size (2–16; the beta caps it at 8). Exactly one of nodes and totalGPUs.

integer format: int32
startupTimeout

StartupTimeout is the gang assembly budget (5m–60m, default 15m).

string
totalGPUs

TotalGPUs is resolved into status.topology at admission (2–64).

integer format: int32
transport

Transport is Direct (private or direct paths only) or Auto (relayed paths allowed).

string
env
Array<object>
nullable

EnvVar is one environment variable: a literal value or a Secret key.

object
name
required

Name matches ^[A-Za-z_][A-Za-z0-9_]*$.

string
value

Value is the literal value.

string
valueFrom

EnvVarSource names where an env value comes from.

object
secretKeyRef

SecretKeySelector selects one key of a Secret.

object
key
required

Key is the key within it.

string
name
required

Name is the Secret.

string
expectedDuration

ExpectedDuration is the declared runtime the estimate uses first.

string
image
string
imagePullSecrets
Array<string>
nullable
imageRef
string
initCommand

InitCommand is a preflight run before the command.

object
command
required

Command is the argv.

Array<string>
nullable
timeout

Timeout is at most 30m.

string
inputs

Inputs are materialized read-only under /nodus/inputs/ before the command starts (at most 8).

Array<object>
nullable

JobInput is one input: exactly one of volume, output, bucket, url and fromWorkspace. It is mounted at /nodus/inputs/, with the path in NODUS_INPUT_, and materialized inside the billed time.

object
bucket

BucketInput is an object in customer storage.

object
connection
required

Connection is an S3 Connection that can read it.

string
sha256

SHA256 is checked at end of stream when set.

string
uri
required

URI is s3://bucket/key.

string
fromStage

StageInput names an output of a Pipeline stage.

object
output
required

Output is the output name.

string
stage
required

Stage is the producing stage.

string
fromWorkspace

WorkspaceInput mounts a Workspace home.

object
name
required

Name is the Workspace.

string
path

Path is a subdirectory of the home.

string
name
required

Name matches ^[A-Za-z][A-Za-z0-9_]{0,63}$ and is unique among inputs.

string
output

OutputInput names a committed output of another Job.

object
index

Index selects an index of an Indexed Job (default 0).

integer format: int32
job
required

Job is the producing Job.

string
name
required

Name is the output.

string
url

URLInput is a file downloaded over HTTPS.

object
sha256
required

SHA256 is the expected digest.

string
url
required

URL is https:// only.

string
volume

VolumeInput names a Volume revision.

object
name
required

Name is the Volume.

string
revision

Revision pins a revision.

integer format: int64
maxCostUSD

MaxCostUSD caps what the Job may spend. Reaching it suspends the Job; it can only be raised.

string
network

Network sets egress for the container.

object
egress

Egress is the outbound network policy.

object
allow

Allow lists DNS names or *.suffix patterns (AllowList only; at most 128).

Array<string>
nullable
policy

Policy is Deny, AllowList or Open.

string
presets

Presets add curated host lists such as python-packages or huggingface.

Array<string>
nullable
outputs

Outputs are files or directories collected when an index succeeds (at most 32). Everything under /nodus/outputs is also collected as the output named “outputs”.

Array<object>
nullable

JobOutput is a declared output.

object
fromRanks

FromRanks is Zero (rank 0 only) or All (every rank under rank-/) for gang Jobs.

string
name
required

Name matches ^[a-z0-9._-]{1,64}$; the nodus. prefix is reserved.

string
path
required

Path is an absolute file or directory path; directories are archived as tar.zst.

string
sink

OutputSink loads an output into a customer database table.

object
connection
required

Connection is a Postgres, Neon or Supabase Connection.

string
mode

Mode is Append (default) or Replace.

string
table
required

Table is the destination table.

string
parallelism

Parallelism is how many indexes run at once (1 to min(completions, 256)).

integer format: int32
placement

Placement constrains where work may run.

object
dedicated

Dedicated is reserved; only true is accepted.

boolean
interruptible

Interruptible is Never, Allow (the scheduler decides by expected cost) or Prefer.

string
maxRateUSDPerHour

MaxRateUSDPerHour filters out offerings above this customer rate.

string
offerings

Offerings restricts placement to these Offerings.

Array<string>
nullable
pool

Pool is a BYOC Pool in the project.

string
profile

Profile is Balanced, Cost or Speed.

string
queueTimeout

QueueTimeout is how long the Job may wait for capacity before failing with CapacityUnavailable (default 24h; 0s waits forever).

string
regions

Regions are region classes (us, eu, …); empty means any.

Array<string>
nullable
recovery

Recovery says how progress survives lost capacity.

object
checkpoint

CheckpointPolicy configures checkpoints.

object
format

Format is Snapshot, or Dcp for torch.distributed.checkpoint (the default for distributed Jobs).

string
integration

Integration is Auto, None or HFTrainer.

string
interval

Interval is auto or a duration from 1m to 6h.

string
maxSize

MaxSize is checked before upload (default 1Ti, at most 2Ti).

string
paths

Paths are saved together in one checkpoint (at most 64; default /nodus/state).

Array<string>
nullable
retainAfterFinish

RetainAfterFinish keeps checkpoints this long after the Job finishes (default 168h).

string
continuity

Continuity is Checkpointed (restore the latest checkpoint), Restartable (progress cursor) or Ephemeral.

string
maxAttempts

MaxAttempts is how many infrastructure replacements each index may use (1–32; gangs count restarts).

integer format: int32
minProgressDuration

MinProgressDuration is the run time that counts as progress (default 2m).

string
onInterruption

OnInterruption is Resume, or Fail to fail instead of recovering or suspending.

string
resources

Resources are capacity floors. For GPU work the offering’s host shape applies if larger.

object
cpu

CPU is the vCPU floor.

string
disk

Disk is the ephemeral disk floor.

string
gpu

GPURequest asks for accelerators. A family (H100) matches any of its variants and never another family.

object
count

Count is the GPUs per node: 1, 2, 4 or 8.

integer format: int32
exact

Exact pins the exact variant instead of matching the family.

boolean
interconnect

Interconnect is Any or NVLink.

string
minMemory

MinMemory is the per-GPU memory floor.

string
type

Type lists 1–8 accelerator ids or families from the catalog.

Array<string>
nullable
memory

Memory is the host memory floor.

string
nodes

Nodes above 1 is shorthand for spec.distributed.nodes and is stored in that form.

integer format: int32
scaledownWindow

ScaledownWindow keeps the capacity warm for reuse this long after the Job ends (0s–20m).

string
secrets
Array<object>
nullable

SecretMount mounts one Secret, optionally pinned to a version. The bare name is accepted on write.

object
name
required

Name is the Secret.

string
version

Version pins a version; unset pins the latest at admission.

integer format: int32
serviceAccountName
string
sidecars
Array<object>
nullable

Sidecar is a helper container with native-sidecar semantics.

object
command
required

Command is the sidecar’s argv.

Array<string>
nullable
env

Env adds environment variables.

Array<object>
nullable

EnvVar is one environment variable: a literal value or a Secret key.

object
name
required

Name matches ^[A-Za-z_][A-Za-z0-9_]*$.

string
value

Value is the literal value.

string
valueFrom

EnvVarSource names where an env value comes from.

object
secretKeyRef

SecretKeySelector selects one key of a Secret.

object
key
required

Key is the key within it.

string
name
required

Name is the Secret.

string
image

Image defaults to the Job’s image.

string
name
required

Name is unique within the Job.

string
startupTimeout

StartupTimeout bounds how long the sidecar may take to become ready.

string
source

Source is the code for the container: exactly one of git and blob.

object
blob

Blob is sha256: of an archive uploaded through /blobs/v1.

string
git

GitSource is a repository checkout.

object
path

Path is the checkout path (default workingDir).

string
ref

Ref is a branch, tag or commit.

string
repo
required

Repo is owner/name or an https:// URL.

string
state

State is the desired state: Running (the default), Suspended, or the cancel state that stops the Job for good.

string
timeout

Timeout is the wall-clock limit counted from the first Provisioning, excluding time spent Suspended. The Job then fails with DeadlineExceeded.

string
ttlSecondsAfterFinished

TTLSecondsAfterFinished deletes the Job, its outputs and checkpoints this long after it finishes.

integer format: int32
volumes
Array<object>
nullable

VolumeMount mounts a Volume.

object
mountPath
required

MountPath is the absolute mount point; system paths are refused.

string
readOnly

ReadOnly mounts it read-only.

boolean
revision

Revision pins a revision; only with readOnly.

integer format: int64
volume
required

Volume names the Volume.

string
workingDir
string
conditions

Conditions are the latest observations.

Array<object>
nullable
object
lastTransitionTime
required
string
message
required
string
observedGeneration
integer format: int64
reason
required
string
status
required
string
type
required
string
cost

Cost is status.cost on every kind that spends money. It is a display copy of the ledger: amounts are decimal USD strings, and nothing is charged from these fields.

object
bySegment

CostSegments splits a charge by billing segment.

object
bootUSD

BootUSD is the charge from the start of billing until the program started.

string
coveredByNodus

CoveredByNodus lists the segments (Boot, Running, Restore, Teardown) with time Nodus paid for instead of charging it, such as the start and teardown of a run that failed because of Nodus.

Array<string>
nullable
restoreUSD

RestoreUSD is the charge for bringing a replacement up after capacity was lost.

string
runningUSD

RunningUSD is the charge while the program ran.

string
teardownUSD

TeardownUSD is the charge from stop until deletion was confirmed, with the billing increment.

string
final

Final is true once the final charge has posted.

boolean
fundedUntilTime

FundedUntilTime is when the current holds stop paying for the object.

string
heldUSD

HeldUSD is what is currently held for it.

string
limitUSD

LimitUSD is the object’s maxCostUSD, if it has one.

string
rateUSDPerHour

RateUSDPerHour is the sum of the hourly rates of its capacity that is still billing.

string
totalUSD

TotalUSD is what has been charged for this object so far.

string
diagnostics

TrainingDiagnostics interpret training.

object
rewardSignal

RewardSignal is ContrastObserved, NoRewardContrast or InsufficientEvidence.

string
weightsChanged

WeightsChanged reports whether the trainer reported changed weights.

boolean
estimate

Estimate is returned in status.estimate by a dry-run (?dryRun=All) and on create for every compute kind (ADR-031). Amounts are decimal USD strings; the ETag of the dry-run response binds a later create to it.

object
assemblyBoundUSD

AssemblyBoundUSD is the most a multi-node Job can cost if its members never assemble.

string
blockingReasons

BlockingReasons say why a real create would fail now, with the amounts and a fix.

Array<object>
nullable

BlockingReason says why a create would fail now.

object
code
required

Code is the error code the create would return, for example InsufficientCredits.

string
fix

Fix says what to do.

string
message

Message states the reason with the amounts involved.

string
concurrentHoldUSD

ConcurrentHoldUSD is the total of the holds for every slot that starts at once.

string
costUSD

USDBand is a median and a 90th-percentile amount in USD.

object
p50

P50 is the median amount.

string
p90

P90 is the 90th-percentile amount.

string
gangHoldUSD

GangHoldUSD is the total of the member holds of a multi-node Job.

string
holdUSD

HoldUSD is the first hold that must fit your balance, every matching Budget and the object’s own cap.

string
minimumChargeUSD

MinimumChargeUSD is the billing increment rounding charged once per allocation.

string
overheadUSD

USDBand is a median and a 90th-percentile amount in USD.

object
p50

P50 is the median amount.

string
p90

P90 is the 90th-percentile amount.

string
placementPreview

PlacementPreview is the customer-safe description of the capacity a create would use.

object
explain

Explain is the scheduler’s explanation, the same shape as Attempt status.placement.explain.

interruptible

Interruptible reports whether the capacity can be reclaimed.

boolean
offering

Offering is the offering id, for example h100-sxm-80g-x8-us.

string
regionClass

RegionClass is the region class of the offering.

string
warmReuse

WarmReuse reports whether warm capacity would be reused.

boolean
pricebookVersion

PricebookVersion is the price book the estimate used.

string
rateUSDPerHour

RateUSDPerHour is the hourly rate of the chosen capacity.

string
startup

StartupEstimate is the expected time to start.

object
cold

DurationBand is a median and a 90th-percentile duration, as Go duration strings.

object
p50

P50 is the median duration.

string
p90

P90 is the 90th-percentile duration.

string
warm

DurationBand is a median and a 90th-percentile duration, as Go duration strings.

object
p50

P50 is the median duration.

string
p90

P90 is the 90th-percentile duration.

string
topology

Topology is the resolved multi-node topology of a gang Job.

validUntil

ValidUntil is when the prices this estimate used stop being current. A create bound by If-Match is admitted after it too, and never placed above rateUSDPerHour plus 10 %.

string
warnings

Warnings are non-blocking notes, for example ColdStart or InterruptibleSelected.

Array<object>
nullable

EstimateWarning is a non-blocking note on an estimate.

object
code
required

Code is the CamelCase warning code.

string
message

Message explains the warning.

string
job

Job is the compiled Job’s name (label nodus.dev/trainingjob).

string
message

Message explains Reason.

string
metrics

TrainingMetrics are the latest metrics the trainer reported.

object
gpuMemoryBytes

GPUMemoryBytes is the peak GPU memory.

integer format: int64
loss

Loss is the latest training loss, as a decimal string.

string
step

Step is the current optimizer step.

integer format: int64
tokensPerSecond

TokensPerSecond is the latest throughput, as a decimal string.

string
totalSteps

TotalSteps is the planned number of steps.

integer format: int64
observedGeneration

ObservedGeneration is the generation the status describes.

integer format: int64
outputs

Outputs are the committed results, such as results.json and the adapter.

Array<object>
nullable

TrainingOutput is one committed result of the compiled Job.

object
name
required

Name is the output name.

string
sizeBytes

SizeBytes is the committed size.

integer format: int64
phase

Phase mirrors the compiled Job in the run-to-completion vocabulary.

string
progress

TrainingProgress is the current stage.

object
stage

Stage is Baseline, Training, Evaluating or Exporting.

string
provenance

Provenance identifies exactly what ran.

object
environmentDigest

EnvironmentDigest is the environment image digest.

string
managed
required

Managed is true when a catalog runtime ran without image or command overrides.

boolean
modelRevision

ModelRevision is the pinned model revision.

string
parametersSHA256

ParametersSHA256 hashes the canonical merged parameters.

string
runtimeDigest

RuntimeDigest is the runtime image digest.

string
reason

Reason says why the run failed, stopped or is suspended.

string
summary

TrainingSummary is folded incrementally from task events.

object
baseline

PhaseSummary counts one phase’s latest report per task attempt.

object
errors
required

Errors counts attempts that ended in an infrastructure or grading error; they never count as failed.

integer format: int32
inProgress
required

InProgress counts started attempts with no completion yet.

integer format: int32
meanReward

MeanReward is the mean finite reward, as a decimal string.

string
passRate

PassRate is passed divided by tasks, as a decimal string.

string
passed
required

Passed is how many passed.

integer format: int32
tasks
required

Tasks is the number of completed, scored task attempts.

integer format: int32
comparison

Comparison is the comparability gate: like-for-like tasks, at least minComparisonTasks, not all 0 % or all 100 %, and no missing events.

object
changePP

ChangePP is the pass-rate change in percentage points, as a decimal string.

string
comparable
required

Comparable is true when baseline and evaluation scored the same tasks and no events are missing.

boolean
measurable
required

Measurable is true when the tasks can show a change (comparable and not all failed or all passed).

boolean
note

Note explains Reason in one sentence.

string
reason
required

Reason is Comparable, SmallestStep, TooFewTasks, DifferentTasks, NonePassed, AllPassed or IncompleteEvents.

string
resolutionPP

ResolutionPP is the smallest change the task set can show (100 / tasks), as a decimal string.

string
evaluation

PhaseSummary counts one phase’s latest report per task attempt.

object
errors
required

Errors counts attempts that ended in an infrastructure or grading error; they never count as failed.

integer format: int32
inProgress
required

InProgress counts started attempts with no completion yet.

integer format: int32
meanReward

MeanReward is the mean finite reward, as a decimal string.

string
passRate

PassRate is passed divided by tasks, as a decimal string.

string
passed
required

Passed is how many passed.

integer format: int32
tasks
required

Tasks is the number of completed, scored task attempts.

integer format: int32
Example generated
{
"apiVersion": "example",
"kind": "example",
"metadata": {
"annotations": {
"additionalProperty": "example"
},
"creationTimestamp": "example",
"deletionGracePeriodSeconds": 1,
"deletionTimestamp": "example",
"finalizers": [
"example"
],
"generateName": "example",
"generation": 1,
"labels": {
"additionalProperty": "example"
},
"managedFields": [
{
"apiVersion": "example",
"fieldsType": "example",
"fieldsV1": {
"additionalProperty": "example"
},
"manager": "example",
"operation": "example",
"subresource": "example",
"time": "example"
}
],
"name": "example",
"namespace": "example",
"ownerReferences": [
{
"apiVersion": "example",
"blockOwnerDeletion": true,
"controller": true,
"kind": "example",
"name": "example",
"uid": "example"
}
],
"resourceVersion": "example",
"selfLink": "example",
"uid": "example"
},
"spec": {
"data": {
"columns": {
"additionalProperty": "example"
},
"format": "example",
"path": "example",
"revision": 1,
"validationFraction": "example",
"volume": "example"
},
"distributed": {
"gpusPerNode": 1,
"launcher": "example",
"maxAssemblyRetries": 1,
"network": "example",
"nodes": 1,
"startupTimeout": "example",
"totalGPUs": 1,
"transport": "example"
},
"environment": {
"heldOutTasks": 1,
"name": "example",
"seed": 1,
"trainTasks": 1
},
"evaluation": {
"baseline": true,
"final": true,
"minComparisonTasks": 1
},
"expectedDuration": "example",
"exportTo": {
"volume": "example"
},
"grading": {
"maxParallel": 1
},
"maxCostUSD": "example",
"mode": "example",
"model": {
"secret": "example",
"uri": "example",
"volume": {
"name": "example",
"revision": 1
}
},
"parameters": "example",
"placement": {
"dedicated": true,
"interruptible": "example",
"maxRateUSDPerHour": "example",
"offerings": [
"example"
],
"pool": "example",
"profile": "example",
"queueTimeout": "example",
"regions": [
"example"
]
},
"resources": {
"cpu": "example",
"disk": "example",
"gpu": {
"count": 1,
"exact": true,
"interconnect": "example",
"minMemory": "example",
"type": [
"example"
]
},
"memory": "example",
"nodes": 1
},
"runtime": "example",
"state": "example",
"task": "example",
"teacher": {
"secret": "example",
"uri": "example",
"volume": {
"name": "example",
"revision": 1
}
},
"tracking": {
"mlflow": {
"experiment": "example",
"secret": "example",
"uri": "example"
},
"wandb": {
"connection": "example"
}
}
},
"status": {
"compiledJob": {
"activeDeadlineSeconds": 1,
"args": [
"example"
],
"backoffLimit": 1,
"command": [
"example"
],
"completeByTime": "example",
"completions": 1,
"connections": [
"example"
],
"distributed": {
"gpusPerNode": 1,
"launcher": "example",
"maxAssemblyRetries": 1,
"network": "example",
"nodes": 1,
"startupTimeout": "example",
"totalGPUs": 1,
"transport": "example"
},
"env": [
{
"name": "example",
"value": "example",
"valueFrom": {
"secretKeyRef": {
"key": "example",
"name": "example"
}
}
}
],
"expectedDuration": "example",
"image": "example",
"imagePullSecrets": [
"example"
],
"imageRef": "example",
"initCommand": {
"command": [
"example"
],
"timeout": "example"
},
"inputs": [
{
"bucket": {
"connection": "example",
"sha256": "example",
"uri": "example"
},
"fromStage": {
"output": "example",
"stage": "example"
},
"fromWorkspace": {
"name": "example",
"path": "example"
},
"name": "example",
"output": {
"index": 1,
"job": "example",
"name": "example"
},
"url": {
"sha256": "example",
"url": "example"
},
"volume": {
"name": "example",
"revision": 1
}
}
],
"maxCostUSD": "example",
"network": {
"egress": {
"allow": [
"example"
],
"policy": "example",
"presets": [
"example"
]
}
},
"outputs": [
{
"fromRanks": "example",
"name": "example",
"path": "example",
"sink": {
"connection": "example",
"mode": "example",
"table": "example"
}
}
],
"parallelism": 1,
"placement": {
"dedicated": true,
"interruptible": "example",
"maxRateUSDPerHour": "example",
"offerings": [
"example"
],
"pool": "example",
"profile": "example",
"queueTimeout": "example",
"regions": [
"example"
]
},
"recovery": {
"checkpoint": {
"format": "example",
"integration": "example",
"interval": "example",
"maxSize": "example",
"paths": [
"example"
],
"retainAfterFinish": "example"
},
"continuity": "example",
"maxAttempts": 1,
"minProgressDuration": "example",
"onInterruption": "example"
},
"resources": {
"cpu": "example",
"disk": "example",
"gpu": {
"count": 1,
"exact": true,
"interconnect": "example",
"minMemory": "example",
"type": [
"example"
]
},
"memory": "example",
"nodes": 1
},
"scaledownWindow": "example",
"secrets": [
{
"name": "example",
"version": 1
}
],
"serviceAccountName": "example",
"sidecars": [
{
"command": [
"example"
],
"env": [
{
"name": "example",
"value": "example",
"valueFrom": {
"secretKeyRef": {
"key": "example",
"name": "example"
}
}
}
],
"image": "example",
"name": "example",
"startupTimeout": "example"
}
],
"source": {
"blob": "example",
"git": {
"path": "example",
"ref": "example",
"repo": "example"
}
},
"state": "example",
"timeout": "example",
"ttlSecondsAfterFinished": 1,
"volumes": [
{
"mountPath": "example",
"readOnly": true,
"revision": 1,
"volume": "example"
}
],
"workingDir": "example"
},
"conditions": [
{
"lastTransitionTime": "example",
"message": "example",
"observedGeneration": 1,
"reason": "example",
"status": "example",
"type": "example"
}
],
"cost": {
"bySegment": {
"bootUSD": "example",
"coveredByNodus": [
"example"
],
"restoreUSD": "example",
"runningUSD": "example",
"teardownUSD": "example"
},
"final": true,
"fundedUntilTime": "example",
"heldUSD": "example",
"limitUSD": "example",
"rateUSDPerHour": "example",
"totalUSD": "example"
},
"diagnostics": {
"rewardSignal": "example",
"weightsChanged": true
},
"estimate": {
"assemblyBoundUSD": "example",
"blockingReasons": [
{
"code": "example",
"fix": "example",
"message": "example"
}
],
"concurrentHoldUSD": "example",
"costUSD": {
"p50": "example",
"p90": "example"
},
"gangHoldUSD": "example",
"holdUSD": "example",
"minimumChargeUSD": "example",
"overheadUSD": {
"p50": "example",
"p90": "example"
},
"placementPreview": {
"explain": "example",
"interruptible": true,
"offering": "example",
"regionClass": "example",
"warmReuse": true
},
"pricebookVersion": "example",
"rateUSDPerHour": "example",
"startup": {
"cold": {
"p50": "example",
"p90": "example"
},
"warm": {
"p50": "example",
"p90": "example"
}
},
"topology": "example",
"validUntil": "example",
"warnings": [
{
"code": "example",
"message": "example"
}
]
},
"job": "example",
"message": "example",
"metrics": {
"gpuMemoryBytes": 1,
"loss": "example",
"step": 1,
"tokensPerSecond": "example",
"totalSteps": 1
},
"observedGeneration": 1,
"outputs": [
{
"name": "example",
"sizeBytes": 1
}
],
"phase": "example",
"progress": {
"stage": "example"
},
"provenance": {
"environmentDigest": "example",
"managed": true,
"modelRevision": "example",
"parametersSHA256": "example",
"runtimeDigest": "example"
},
"reason": "example",
"summary": {
"baseline": {
"errors": 1,
"inProgress": 1,
"meanReward": "example",
"passRate": "example",
"passed": 1,
"tasks": 1
},
"comparison": {
"changePP": "example",
"comparable": true,
"measurable": true,
"note": "example",
"reason": "example",
"resolutionPP": "example"
},
"evaluation": {
"errors": 1,
"inProgress": 1,
"meanReward": "example",
"passRate": "example",
"passed": 1,
"tasks": 1
}
}
}
}

OK

Media type application/json

TrainingJob is pre-training, fine-tuning, post-training or an RL run on a TrainingRuntime (Beta). It compiles to one Job, a multi-node gang when it asks for more than one node, and mirrors that Job’s phase.

object
apiVersion
string
kind
string
metadata
object
annotations
object
key
additional properties
string
creationTimestamp
string
deletionGracePeriodSeconds
integer format: int64
deletionTimestamp
string
finalizers
Array<string>
nullable
generateName
string
generation
integer format: int64
labels
object
key
additional properties
string
managedFields
Array<object>
nullable
object
apiVersion
string
fieldsType
string
fieldsV1
object
key
additional properties
manager
string
operation
string
subresource
string
time
string
name
string
namespace
string
ownerReferences
Array<object>
nullable
object
apiVersion
required
string
blockOwnerDeletion
boolean
controller
boolean
kind
required
string
name
required
string
uid
required
string
resourceVersion
string
selfLink
string
uid
string
spec
required

TrainingJobSpec describes one training run.

object
data

TrainingData is a dataset in a Volume.

object
columns

Columns maps the runtime’s column roles (prompt, completion, chosen, rejected, text) to dataset columns.

object
key
additional properties
string
format

Format is Auto (default), JSONL, JSON or CSV.

string
path

Path is a file or directory inside the Volume.

string
revision

Revision pins a revision.

integer format: int64
validationFraction

ValidationFraction is the share held out for validation, as a decimal string (default “0.05”).

string
volume
required

Volume is the Volume holding the data.

string
distributed

Distributed runs the Job as a gang of nodes that start together and restart together (Beta).

object
gpusPerNode

GPUsPerNode is 1, 2, 4 or 8 and equals resources.gpu.count when both are set.

integer format: int32
launcher

Launcher is Plain (env contract only), Torchrun, Ray, Verl, Accelerate or Deepspeed.

string
maxAssemblyRetries

MaxAssemblyRetries is how many times a timed-out assembly is re-placed (0–5, default 2).

integer format: int32
network

Network is Colocated (one provider and region), Regional (one region class) or Global.

string
nodes

Nodes is the gang size (2–16; the beta caps it at 8). Exactly one of nodes and totalGPUs.

integer format: int32
startupTimeout

StartupTimeout is the gang assembly budget (5m–60m, default 15m).

string
totalGPUs

TotalGPUs is resolved into status.topology at admission (2–64).

integer format: int32
transport

Transport is Direct (private or direct paths only) or Auto (relayed paths allowed).

string
environment

EnvironmentBinding selects an Environment and its task counts.

object
heldOutTasks

HeldOutTasks is the number of held-out tasks evaluated before and after training.

integer format: int32
name
required

Name is nodus/@ or @ in this project.

string
seed

Seed selects the tasks deterministically (default 0).

integer format: int64
trainTasks

TrainTasks is the number of training tasks.

integer format: int32
evaluation

Evaluation controls the baseline and final evaluation.

object
baseline

Baseline evaluates the model before training (default true).

boolean
final

Final evaluates the model after training (default true).

boolean
minComparisonTasks

MinComparisonTasks is the smallest held-out set a comparison is reported on (default and minimum 16).

integer format: int32
expectedDuration

ExpectedDuration overrides the runtime estimate of steps × seconds per step.

string
exportTo

ExportTarget is a Volume the outputs are also written to.

object
volume
required

Volume is the Volume.

string
grading

GradingPolicy bounds grading.

object
maxParallel

MaxParallel is the most grading Sandboxes at once (default 4, at most 32).

integer format: int32
maxCostUSD

MaxCostUSD caps the run, its compiled Job and its grading Sandboxes together; it can only be raised.

string
mode

Mode is Train (default) or Evaluate, and must be one of the runtime’s modes.

string
model

ModelSource is exactly one of uri and volume.

object
secret

Secret names a Secret with HF_TOKEN for gated models.

string
uri

URI is hf://[@]; admission pins it to a 40-hex commit, cached once per organization as a read-only Volume.

string
volume

ModelVolume names a Volume revision.

object
name
required

Name is the Volume.

string
revision

Revision pins a revision (latest Ready at admission when unset).

integer format: int64
parameters

Parameters are validated against the runtime’s JSON Schema (at most 64 KiB) over the runtime defaults.

placement

Placement constrains where work may run.

object
dedicated

Dedicated is reserved; only true is accepted.

boolean
interruptible

Interruptible is Never, Allow (the scheduler decides by expected cost) or Prefer.

string
maxRateUSDPerHour

MaxRateUSDPerHour filters out offerings above this customer rate.

string
offerings

Offerings restricts placement to these Offerings.

Array<string>
nullable
pool

Pool is a BYOC Pool in the project.

string
profile

Profile is Balanced, Cost or Speed.

string
queueTimeout

QueueTimeout is how long the Job may wait for capacity before failing with CapacityUnavailable (default 24h; 0s waits forever).

string
regions

Regions are region classes (us, eu, …); empty means any.

Array<string>
nullable
resources

Resources are capacity floors. For GPU work the offering’s host shape applies if larger.

object
cpu

CPU is the vCPU floor.

string
disk

Disk is the ephemeral disk floor.

string
gpu

GPURequest asks for accelerators. A family (H100) matches any of its variants and never another family.

object
count

Count is the GPUs per node: 1, 2, 4 or 8.

integer format: int32
exact

Exact pins the exact variant instead of matching the family.

boolean
interconnect

Interconnect is Any or NVLink.

string
minMemory

MinMemory is the per-GPU memory floor.

string
type

Type lists 1–8 accelerator ids or families from the catalog.

Array<string>
nullable
memory

Memory is the host memory floor.

string
nodes

Nodes above 1 is shorthand for spec.distributed.nodes and is stored in that form.

integer format: int32
runtime
required

Runtime is a Ready TrainingRuntime: nodus/ for the catalog or in this project.

string
state

State is the desired state: Running (default), Suspended, or the terminal stop state.

string
task

Task overrides the runtime’s task; Pretrain on sft trains on raw text with packing.

string
teacher

ModelSource is exactly one of uri and volume.

object
secret

Secret names a Secret with HF_TOKEN for gated models.

string
uri

URI is hf://[@]; admission pins it to a 40-hex commit, cached once per organization as a read-only Volume.

string
volume

ModelVolume names a Volume revision.

object
name
required

Name is the Volume.

string
revision

Revision pins a revision (latest Ready at admission when unset).

integer format: int64
tracking

Tracking names customer-owned trackers; they are never the source of truth for comparisons.

object
mlflow

MLflowTracking is an MLflow server.

object
experiment

Experiment is the experiment name.

string
secret

Secret holds MLFLOW_TRACKING_TOKEN or username and password.

string
uri
required

URI is the tracking server (https://).

string
wandb

WandBTracking is a Weights & Biases project.

object
connection
required

Connection is a WandB Connection.

string
status

TrainingJobStatus is written by the TrainingJob controller.

object
compiledJob

JobSpec describes a Job. Everything is immutable after create except parallelism, backoffLimit, timeout, maxCostUSD (raise only), recovery.maxAttempts, recovery.checkpoint.interval and retainAfterFinish, ttlSecondsAfterFinished and state.

object
activeDeadlineSeconds

ActiveDeadlineSeconds is accepted as an alias of timeout on write and folded into it.

integer format: int64
args
Array<string>
nullable
backoffLimit

BackoffLimit is how many customer failures (non-zero exits, OOM) across all indexes are retried before the Job fails (0–100).

integer format: int32
command
Array<string>
nullable
completeByTime

CompleteByTime is a finish-by hint for placement and checkpoint cadence. It never stops the Job.

string
completions

Completions is how many indexes must succeed (1–10000). Each index gets NODUS_INDEX and JOB_COMPLETION_INDEX.

integer format: int32
connections
Array<string>
nullable
distributed

Distributed runs the Job as a gang of nodes that start together and restart together (Beta).

object
gpusPerNode

GPUsPerNode is 1, 2, 4 or 8 and equals resources.gpu.count when both are set.

integer format: int32
launcher

Launcher is Plain (env contract only), Torchrun, Ray, Verl, Accelerate or Deepspeed.

string
maxAssemblyRetries

MaxAssemblyRetries is how many times a timed-out assembly is re-placed (0–5, default 2).

integer format: int32
network

Network is Colocated (one provider and region), Regional (one region class) or Global.

string
nodes

Nodes is the gang size (2–16; the beta caps it at 8). Exactly one of nodes and totalGPUs.

integer format: int32
startupTimeout

StartupTimeout is the gang assembly budget (5m–60m, default 15m).

string
totalGPUs

TotalGPUs is resolved into status.topology at admission (2–64).

integer format: int32
transport

Transport is Direct (private or direct paths only) or Auto (relayed paths allowed).

string
env
Array<object>
nullable

EnvVar is one environment variable: a literal value or a Secret key.

object
name
required

Name matches ^[A-Za-z_][A-Za-z0-9_]*$.

string
value

Value is the literal value.

string
valueFrom

EnvVarSource names where an env value comes from.

object
secretKeyRef

SecretKeySelector selects one key of a Secret.

object
key
required

Key is the key within it.

string
name
required

Name is the Secret.

string
expectedDuration

ExpectedDuration is the declared runtime the estimate uses first.

string
image
string
imagePullSecrets
Array<string>
nullable
imageRef
string
initCommand

InitCommand is a preflight run before the command.

object
command
required

Command is the argv.

Array<string>
nullable
timeout

Timeout is at most 30m.

string
inputs

Inputs are materialized read-only under /nodus/inputs/ before the command starts (at most 8).

Array<object>
nullable

JobInput is one input: exactly one of volume, output, bucket, url and fromWorkspace. It is mounted at /nodus/inputs/, with the path in NODUS_INPUT_, and materialized inside the billed time.

object
bucket

BucketInput is an object in customer storage.

object
connection
required

Connection is an S3 Connection that can read it.

string
sha256

SHA256 is checked at end of stream when set.

string
uri
required

URI is s3://bucket/key.

string
fromStage

StageInput names an output of a Pipeline stage.

object
output
required

Output is the output name.

string
stage
required

Stage is the producing stage.

string
fromWorkspace

WorkspaceInput mounts a Workspace home.

object
name
required

Name is the Workspace.

string
path

Path is a subdirectory of the home.

string
name
required

Name matches ^[A-Za-z][A-Za-z0-9_]{0,63}$ and is unique among inputs.

string
output

OutputInput names a committed output of another Job.

object
index

Index selects an index of an Indexed Job (default 0).

integer format: int32
job
required

Job is the producing Job.

string
name
required

Name is the output.

string
url

URLInput is a file downloaded over HTTPS.

object
sha256
required

SHA256 is the expected digest.

string
url
required

URL is https:// only.

string
volume

VolumeInput names a Volume revision.

object
name
required

Name is the Volume.

string
revision

Revision pins a revision.

integer format: int64
maxCostUSD

MaxCostUSD caps what the Job may spend. Reaching it suspends the Job; it can only be raised.

string
network

Network sets egress for the container.

object
egress

Egress is the outbound network policy.

object
allow

Allow lists DNS names or *.suffix patterns (AllowList only; at most 128).

Array<string>
nullable
policy

Policy is Deny, AllowList or Open.

string
presets

Presets add curated host lists such as python-packages or huggingface.

Array<string>
nullable
outputs

Outputs are files or directories collected when an index succeeds (at most 32). Everything under /nodus/outputs is also collected as the output named “outputs”.

Array<object>
nullable

JobOutput is a declared output.

object
fromRanks

FromRanks is Zero (rank 0 only) or All (every rank under rank-/) for gang Jobs.

string
name
required

Name matches ^[a-z0-9._-]{1,64}$; the nodus. prefix is reserved.

string
path
required

Path is an absolute file or directory path; directories are archived as tar.zst.

string
sink

OutputSink loads an output into a customer database table.

object
connection
required

Connection is a Postgres, Neon or Supabase Connection.

string
mode

Mode is Append (default) or Replace.

string
table
required

Table is the destination table.

string
parallelism

Parallelism is how many indexes run at once (1 to min(completions, 256)).

integer format: int32
placement

Placement constrains where work may run.

object
dedicated

Dedicated is reserved; only true is accepted.

boolean
interruptible

Interruptible is Never, Allow (the scheduler decides by expected cost) or Prefer.

string
maxRateUSDPerHour

MaxRateUSDPerHour filters out offerings above this customer rate.

string
offerings

Offerings restricts placement to these Offerings.

Array<string>
nullable
pool

Pool is a BYOC Pool in the project.

string
profile

Profile is Balanced, Cost or Speed.

string
queueTimeout

QueueTimeout is how long the Job may wait for capacity before failing with CapacityUnavailable (default 24h; 0s waits forever).

string
regions

Regions are region classes (us, eu, …); empty means any.

Array<string>
nullable
recovery

Recovery says how progress survives lost capacity.

object
checkpoint

CheckpointPolicy configures checkpoints.

object
format

Format is Snapshot, or Dcp for torch.distributed.checkpoint (the default for distributed Jobs).

string
integration

Integration is Auto, None or HFTrainer.

string
interval

Interval is auto or a duration from 1m to 6h.

string
maxSize

MaxSize is checked before upload (default 1Ti, at most 2Ti).

string
paths

Paths are saved together in one checkpoint (at most 64; default /nodus/state).

Array<string>
nullable
retainAfterFinish

RetainAfterFinish keeps checkpoints this long after the Job finishes (default 168h).

string
continuity

Continuity is Checkpointed (restore the latest checkpoint), Restartable (progress cursor) or Ephemeral.

string
maxAttempts

MaxAttempts is how many infrastructure replacements each index may use (1–32; gangs count restarts).

integer format: int32
minProgressDuration

MinProgressDuration is the run time that counts as progress (default 2m).

string
onInterruption

OnInterruption is Resume, or Fail to fail instead of recovering or suspending.

string
resources

Resources are capacity floors. For GPU work the offering’s host shape applies if larger.

object
cpu

CPU is the vCPU floor.

string
disk

Disk is the ephemeral disk floor.

string
gpu

GPURequest asks for accelerators. A family (H100) matches any of its variants and never another family.

object
count

Count is the GPUs per node: 1, 2, 4 or 8.

integer format: int32
exact

Exact pins the exact variant instead of matching the family.

boolean
interconnect

Interconnect is Any or NVLink.

string
minMemory

MinMemory is the per-GPU memory floor.

string
type

Type lists 1–8 accelerator ids or families from the catalog.

Array<string>
nullable
memory

Memory is the host memory floor.

string
nodes

Nodes above 1 is shorthand for spec.distributed.nodes and is stored in that form.

integer format: int32
scaledownWindow

ScaledownWindow keeps the capacity warm for reuse this long after the Job ends (0s–20m).

string
secrets
Array<object>
nullable

SecretMount mounts one Secret, optionally pinned to a version. The bare name is accepted on write.

object
name
required

Name is the Secret.

string
version

Version pins a version; unset pins the latest at admission.

integer format: int32
serviceAccountName
string
sidecars
Array<object>
nullable

Sidecar is a helper container with native-sidecar semantics.

object
command
required

Command is the sidecar’s argv.

Array<string>
nullable
env

Env adds environment variables.

Array<object>
nullable

EnvVar is one environment variable: a literal value or a Secret key.

object
name
required

Name matches ^[A-Za-z_][A-Za-z0-9_]*$.

string
value

Value is the literal value.

string
valueFrom

EnvVarSource names where an env value comes from.

object
secretKeyRef

SecretKeySelector selects one key of a Secret.

object
key
required

Key is the key within it.

string
name
required

Name is the Secret.

string
image

Image defaults to the Job’s image.

string
name
required

Name is unique within the Job.

string
startupTimeout

StartupTimeout bounds how long the sidecar may take to become ready.

string
source

Source is the code for the container: exactly one of git and blob.

object
blob

Blob is sha256: of an archive uploaded through /blobs/v1.

string
git

GitSource is a repository checkout.

object
path

Path is the checkout path (default workingDir).

string
ref

Ref is a branch, tag or commit.

string
repo
required

Repo is owner/name or an https:// URL.

string
state

State is the desired state: Running (the default), Suspended, or the cancel state that stops the Job for good.

string
timeout

Timeout is the wall-clock limit counted from the first Provisioning, excluding time spent Suspended. The Job then fails with DeadlineExceeded.

string
ttlSecondsAfterFinished

TTLSecondsAfterFinished deletes the Job, its outputs and checkpoints this long after it finishes.

integer format: int32
volumes
Array<object>
nullable

VolumeMount mounts a Volume.

object
mountPath
required

MountPath is the absolute mount point; system paths are refused.

string
readOnly

ReadOnly mounts it read-only.

boolean
revision

Revision pins a revision; only with readOnly.

integer format: int64
volume
required

Volume names the Volume.

string
workingDir
string
conditions

Conditions are the latest observations.

Array<object>
nullable
object
lastTransitionTime
required
string
message
required
string
observedGeneration
integer format: int64
reason
required
string
status
required
string
type
required
string
cost

Cost is status.cost on every kind that spends money. It is a display copy of the ledger: amounts are decimal USD strings, and nothing is charged from these fields.

object
bySegment

CostSegments splits a charge by billing segment.

object
bootUSD

BootUSD is the charge from the start of billing until the program started.

string
coveredByNodus

CoveredByNodus lists the segments (Boot, Running, Restore, Teardown) with time Nodus paid for instead of charging it, such as the start and teardown of a run that failed because of Nodus.

Array<string>
nullable
restoreUSD

RestoreUSD is the charge for bringing a replacement up after capacity was lost.

string
runningUSD

RunningUSD is the charge while the program ran.

string
teardownUSD

TeardownUSD is the charge from stop until deletion was confirmed, with the billing increment.

string
final

Final is true once the final charge has posted.

boolean
fundedUntilTime

FundedUntilTime is when the current holds stop paying for the object.

string
heldUSD

HeldUSD is what is currently held for it.

string
limitUSD

LimitUSD is the object’s maxCostUSD, if it has one.

string
rateUSDPerHour

RateUSDPerHour is the sum of the hourly rates of its capacity that is still billing.

string
totalUSD

TotalUSD is what has been charged for this object so far.

string
diagnostics

TrainingDiagnostics interpret training.

object
rewardSignal

RewardSignal is ContrastObserved, NoRewardContrast or InsufficientEvidence.

string
weightsChanged

WeightsChanged reports whether the trainer reported changed weights.

boolean
estimate

Estimate is returned in status.estimate by a dry-run (?dryRun=All) and on create for every compute kind (ADR-031). Amounts are decimal USD strings; the ETag of the dry-run response binds a later create to it.

object
assemblyBoundUSD

AssemblyBoundUSD is the most a multi-node Job can cost if its members never assemble.

string
blockingReasons

BlockingReasons say why a real create would fail now, with the amounts and a fix.

Array<object>
nullable

BlockingReason says why a create would fail now.

object
code
required

Code is the error code the create would return, for example InsufficientCredits.

string
fix

Fix says what to do.

string
message

Message states the reason with the amounts involved.

string
concurrentHoldUSD

ConcurrentHoldUSD is the total of the holds for every slot that starts at once.

string
costUSD

USDBand is a median and a 90th-percentile amount in USD.

object
p50

P50 is the median amount.

string
p90

P90 is the 90th-percentile amount.

string
gangHoldUSD

GangHoldUSD is the total of the member holds of a multi-node Job.

string
holdUSD

HoldUSD is the first hold that must fit your balance, every matching Budget and the object’s own cap.

string
minimumChargeUSD

MinimumChargeUSD is the billing increment rounding charged once per allocation.

string
overheadUSD

USDBand is a median and a 90th-percentile amount in USD.

object
p50

P50 is the median amount.

string
p90

P90 is the 90th-percentile amount.

string
placementPreview

PlacementPreview is the customer-safe description of the capacity a create would use.

object
explain

Explain is the scheduler’s explanation, the same shape as Attempt status.placement.explain.

interruptible

Interruptible reports whether the capacity can be reclaimed.

boolean
offering

Offering is the offering id, for example h100-sxm-80g-x8-us.

string
regionClass

RegionClass is the region class of the offering.

string
warmReuse

WarmReuse reports whether warm capacity would be reused.

boolean
pricebookVersion

PricebookVersion is the price book the estimate used.

string
rateUSDPerHour

RateUSDPerHour is the hourly rate of the chosen capacity.

string
startup

StartupEstimate is the expected time to start.

object
cold

DurationBand is a median and a 90th-percentile duration, as Go duration strings.

object
p50

P50 is the median duration.

string
p90

P90 is the 90th-percentile duration.

string
warm

DurationBand is a median and a 90th-percentile duration, as Go duration strings.

object
p50

P50 is the median duration.

string
p90

P90 is the 90th-percentile duration.

string
topology

Topology is the resolved multi-node topology of a gang Job.

validUntil

ValidUntil is when the prices this estimate used stop being current. A create bound by If-Match is admitted after it too, and never placed above rateUSDPerHour plus 10 %.

string
warnings

Warnings are non-blocking notes, for example ColdStart or InterruptibleSelected.

Array<object>
nullable

EstimateWarning is a non-blocking note on an estimate.

object
code
required

Code is the CamelCase warning code.

string
message

Message explains the warning.

string
job

Job is the compiled Job’s name (label nodus.dev/trainingjob).

string
message

Message explains Reason.

string
metrics

TrainingMetrics are the latest metrics the trainer reported.

object
gpuMemoryBytes

GPUMemoryBytes is the peak GPU memory.

integer format: int64
loss

Loss is the latest training loss, as a decimal string.

string
step

Step is the current optimizer step.

integer format: int64
tokensPerSecond

TokensPerSecond is the latest throughput, as a decimal string.

string
totalSteps

TotalSteps is the planned number of steps.

integer format: int64
observedGeneration

ObservedGeneration is the generation the status describes.

integer format: int64
outputs

Outputs are the committed results, such as results.json and the adapter.

Array<object>
nullable

TrainingOutput is one committed result of the compiled Job.

object
name
required

Name is the output name.

string
sizeBytes

SizeBytes is the committed size.

integer format: int64
phase

Phase mirrors the compiled Job in the run-to-completion vocabulary.

string
progress

TrainingProgress is the current stage.

object
stage

Stage is Baseline, Training, Evaluating or Exporting.

string
provenance

Provenance identifies exactly what ran.

object
environmentDigest

EnvironmentDigest is the environment image digest.

string
managed
required

Managed is true when a catalog runtime ran without image or command overrides.

boolean
modelRevision

ModelRevision is the pinned model revision.

string
parametersSHA256

ParametersSHA256 hashes the canonical merged parameters.

string
runtimeDigest

RuntimeDigest is the runtime image digest.

string
reason

Reason says why the run failed, stopped or is suspended.

string
summary

TrainingSummary is folded incrementally from task events.

object
baseline

PhaseSummary counts one phase’s latest report per task attempt.

object
errors
required

Errors counts attempts that ended in an infrastructure or grading error; they never count as failed.

integer format: int32
inProgress
required

InProgress counts started attempts with no completion yet.

integer format: int32
meanReward

MeanReward is the mean finite reward, as a decimal string.

string
passRate

PassRate is passed divided by tasks, as a decimal string.

string
passed
required

Passed is how many passed.

integer format: int32
tasks
required

Tasks is the number of completed, scored task attempts.

integer format: int32
comparison

Comparison is the comparability gate: like-for-like tasks, at least minComparisonTasks, not all 0 % or all 100 %, and no missing events.

object
changePP

ChangePP is the pass-rate change in percentage points, as a decimal string.

string
comparable
required

Comparable is true when baseline and evaluation scored the same tasks and no events are missing.

boolean
measurable
required

Measurable is true when the tasks can show a change (comparable and not all failed or all passed).

boolean
note

Note explains Reason in one sentence.

string
reason
required

Reason is Comparable, SmallestStep, TooFewTasks, DifferentTasks, NonePassed, AllPassed or IncompleteEvents.

string
resolutionPP

ResolutionPP is the smallest change the task set can show (100 / tasks), as a decimal string.

string
evaluation

PhaseSummary counts one phase’s latest report per task attempt.

object
errors
required

Errors counts attempts that ended in an infrastructure or grading error; they never count as failed.

integer format: int32
inProgress
required

InProgress counts started attempts with no completion yet.

integer format: int32
meanReward

MeanReward is the mean finite reward, as a decimal string.

string
passRate

PassRate is passed divided by tasks, as a decimal string.

string
passed
required

Passed is how many passed.

integer format: int32
tasks
required

Tasks is the number of completed, scored task attempts.

integer format: int32
Example generated
{
"apiVersion": "example",
"kind": "example",
"metadata": {
"annotations": {
"additionalProperty": "example"
},
"creationTimestamp": "example",
"deletionGracePeriodSeconds": 1,
"deletionTimestamp": "example",
"finalizers": [
"example"
],
"generateName": "example",
"generation": 1,
"labels": {
"additionalProperty": "example"
},
"managedFields": [
{
"apiVersion": "example",
"fieldsType": "example",
"fieldsV1": {
"additionalProperty": "example"
},
"manager": "example",
"operation": "example",
"subresource": "example",
"time": "example"
}
],
"name": "example",
"namespace": "example",
"ownerReferences": [
{
"apiVersion": "example",
"blockOwnerDeletion": true,
"controller": true,
"kind": "example",
"name": "example",
"uid": "example"
}
],
"resourceVersion": "example",
"selfLink": "example",
"uid": "example"
},
"spec": {
"data": {
"columns": {
"additionalProperty": "example"
},
"format": "example",
"path": "example",
"revision": 1,
"validationFraction": "example",
"volume": "example"
},
"distributed": {
"gpusPerNode": 1,
"launcher": "example",
"maxAssemblyRetries": 1,
"network": "example",
"nodes": 1,
"startupTimeout": "example",
"totalGPUs": 1,
"transport": "example"
},
"environment": {
"heldOutTasks": 1,
"name": "example",
"seed": 1,
"trainTasks": 1
},
"evaluation": {
"baseline": true,
"final": true,
"minComparisonTasks": 1
},
"expectedDuration": "example",
"exportTo": {
"volume": "example"
},
"grading": {
"maxParallel": 1
},
"maxCostUSD": "example",
"mode": "example",
"model": {
"secret": "example",
"uri": "example",
"volume": {
"name": "example",
"revision": 1
}
},
"parameters": "example",
"placement": {
"dedicated": true,
"interruptible": "example",
"maxRateUSDPerHour": "example",
"offerings": [
"example"
],
"pool": "example",
"profile": "example",
"queueTimeout": "example",
"regions": [
"example"
]
},
"resources": {
"cpu": "example",
"disk": "example",
"gpu": {
"count": 1,
"exact": true,
"interconnect": "example",
"minMemory": "example",
"type": [
"example"
]
},
"memory": "example",
"nodes": 1
},
"runtime": "example",
"state": "example",
"task": "example",
"teacher": {
"secret": "example",
"uri": "example",
"volume": {
"name": "example",
"revision": 1
}
},
"tracking": {
"mlflow": {
"experiment": "example",
"secret": "example",
"uri": "example"
},
"wandb": {
"connection": "example"
}
}
},
"status": {
"compiledJob": {
"activeDeadlineSeconds": 1,
"args": [
"example"
],
"backoffLimit": 1,
"command": [
"example"
],
"completeByTime": "example",
"completions": 1,
"connections": [
"example"
],
"distributed": {
"gpusPerNode": 1,
"launcher": "example",
"maxAssemblyRetries": 1,
"network": "example",
"nodes": 1,
"startupTimeout": "example",
"totalGPUs": 1,
"transport": "example"
},
"env": [
{
"name": "example",
"value": "example",
"valueFrom": {
"secretKeyRef": {
"key": "example",
"name": "example"
}
}
}
],
"expectedDuration": "example",
"image": "example",
"imagePullSecrets": [
"example"
],
"imageRef": "example",
"initCommand": {
"command": [
"example"
],
"timeout": "example"
},
"inputs": [
{
"bucket": {
"connection": "example",
"sha256": "example",
"uri": "example"
},
"fromStage": {
"output": "example",
"stage": "example"
},
"fromWorkspace": {
"name": "example",
"path": "example"
},
"name": "example",
"output": {
"index": 1,
"job": "example",
"name": "example"
},
"url": {
"sha256": "example",
"url": "example"
},
"volume": {
"name": "example",
"revision": 1
}
}
],
"maxCostUSD": "example",
"network": {
"egress": {
"allow": [
"example"
],
"policy": "example",
"presets": [
"example"
]
}
},
"outputs": [
{
"fromRanks": "example",
"name": "example",
"path": "example",
"sink": {
"connection": "example",
"mode": "example",
"table": "example"
}
}
],
"parallelism": 1,
"placement": {
"dedicated": true,
"interruptible": "example",
"maxRateUSDPerHour": "example",
"offerings": [
"example"
],
"pool": "example",
"profile": "example",
"queueTimeout": "example",
"regions": [
"example"
]
},
"recovery": {
"checkpoint": {
"format": "example",
"integration": "example",
"interval": "example",
"maxSize": "example",
"paths": [
"example"
],
"retainAfterFinish": "example"
},
"continuity": "example",
"maxAttempts": 1,
"minProgressDuration": "example",
"onInterruption": "example"
},
"resources": {
"cpu": "example",
"disk": "example",
"gpu": {
"count": 1,
"exact": true,
"interconnect": "example",
"minMemory": "example",
"type": [
"example"
]
},
"memory": "example",
"nodes": 1
},
"scaledownWindow": "example",
"secrets": [
{
"name": "example",
"version": 1
}
],
"serviceAccountName": "example",
"sidecars": [
{
"command": [
"example"
],
"env": [
{
"name": "example",
"value": "example",
"valueFrom": {
"secretKeyRef": {
"key": "example",
"name": "example"
}
}
}
],
"image": "example",
"name": "example",
"startupTimeout": "example"
}
],
"source": {
"blob": "example",
"git": {
"path": "example",
"ref": "example",
"repo": "example"
}
},
"state": "example",
"timeout": "example",
"ttlSecondsAfterFinished": 1,
"volumes": [
{
"mountPath": "example",
"readOnly": true,
"revision": 1,
"volume": "example"
}
],
"workingDir": "example"
},
"conditions": [
{
"lastTransitionTime": "example",
"message": "example",
"observedGeneration": 1,
"reason": "example",
"status": "example",
"type": "example"
}
],
"cost": {
"bySegment": {
"bootUSD": "example",
"coveredByNodus": [
"example"
],
"restoreUSD": "example",
"runningUSD": "example",
"teardownUSD": "example"
},
"final": true,
"fundedUntilTime": "example",
"heldUSD": "example",
"limitUSD": "example",
"rateUSDPerHour": "example",
"totalUSD": "example"
},
"diagnostics": {
"rewardSignal": "example",
"weightsChanged": true
},
"estimate": {
"assemblyBoundUSD": "example",
"blockingReasons": [
{
"code": "example",
"fix": "example",
"message": "example"
}
],
"concurrentHoldUSD": "example",
"costUSD": {
"p50": "example",
"p90": "example"
},
"gangHoldUSD": "example",
"holdUSD": "example",
"minimumChargeUSD": "example",
"overheadUSD": {
"p50": "example",
"p90": "example"
},
"placementPreview": {
"explain": "example",
"interruptible": true,
"offering": "example",
"regionClass": "example",
"warmReuse": true
},
"pricebookVersion": "example",
"rateUSDPerHour": "example",
"startup": {
"cold": {
"p50": "example",
"p90": "example"
},
"warm": {
"p50": "example",
"p90": "example"
}
},
"topology": "example",
"validUntil": "example",
"warnings": [
{
"code": "example",
"message": "example"
}
]
},
"job": "example",
"message": "example",
"metrics": {
"gpuMemoryBytes": 1,
"loss": "example",
"step": 1,
"tokensPerSecond": "example",
"totalSteps": 1
},
"observedGeneration": 1,
"outputs": [
{
"name": "example",
"sizeBytes": 1
}
],
"phase": "example",
"progress": {
"stage": "example"
},
"provenance": {
"environmentDigest": "example",
"managed": true,
"modelRevision": "example",
"parametersSHA256": "example",
"runtimeDigest": "example"
},
"reason": "example",
"summary": {
"baseline": {
"errors": 1,
"inProgress": 1,
"meanReward": "example",
"passRate": "example",
"passed": 1,
"tasks": 1
},
"comparison": {
"changePP": "example",
"comparable": true,
"measurable": true,
"note": "example",
"reason": "example",
"resolutionPP": "example"
},
"evaluation": {
"errors": 1,
"inProgress": 1,
"meanReward": "example",
"passRate": "example",
"passed": 1,
"tasks": 1
}
}
}
}

An error: a metav1.Status whose reason is a registered code.

Media type application/json

Status is the error body of every API response: a Kubernetes metav1.Status (so kubectl and client-go understand it) plus three top-level extensions that those clients ignore (ADR-028).

object
apiVersion
string
code
integer format: int32
details
object
causes
Array<object>
nullable
object
field
string
message
string
reason
string
group
string
kind
string
name
string
retryAfterSeconds
integer format: int32
uid
string
docs

Docs is the URL of the code’s docs page.

string
fix

Fix says what to do next, for example a CLI command or the field to change.

string
kind
string
message
string
metadata
object
continue
string
remainingItemCount
integer format: int64
resourceVersion
string
selfLink
string
shardInfo
object
selector
required
string
reason
string
requestId

RequestID identifies the request in logs and support tickets.

string
status
string
Example generated
{
"apiVersion": "example",
"code": 1,
"details": {
"causes": [
{
"field": "example",
"message": "example",
"reason": "example"
}
],
"group": "example",
"kind": "example",
"name": "example",
"retryAfterSeconds": 1,
"uid": "example"
},
"docs": "example",
"fix": "example",
"kind": "example",
"message": "example",
"metadata": {
"continue": "example",
"remainingItemCount": 1,
"resourceVersion": "example",
"selfLink": "example",
"shardInfo": {
"selector": "example"
}
},
"reason": "example",
"requestId": "example",
"status": "example"
}