Skip to main content
POST
Create training job

Authorizations

Authorization
string
header
required

API key with the vk_ prefix. Create one from the dashboard.

Body

application/json
output_name
string
required
gpu
object
required
job_type
string
base_model
string | null
dataset_id
string | null

Dataset reference: a dataset id or name, optionally pinned to a snapshot: ds_…@snap-3 trains on that snapshot, ds_…@latest cuts (or reuses) a snapshot at the current head and pins it. A plain reference to a stream dataset behaves like @latest; a plain reference to a one-shot upload trains on it as before.

script
null | object

The BYO-script payload. Persisted verbatim as TrainingJob.script_config_json and read back by the worker launch path (forward contract).

reward_source
string | null

Inline reward source (Python text, TRL signature). Attached to the job at submit and stored job-scoped; there is no stored reward resource.

reward_sources
string[] | null
reward_weights
number<double>[] | null
method
string
hyperparameters
any
provider
string | null
checkpoint_destination
null | object

Where the checkpoint is stored: omit it or send {"type": "veri"}. Checkpoints are always stored in Veri storage; another type (s3, gs, az), a uri or credentials is rejected with a 400.

hf_push
null | object

Push the trained artifact to your Hugging Face account when the job completes. Requires a connected HF integration (PUT /v1/settings/integrations/huggingface). Validated at submit: managed grpo/grpo_harness/sft_text/dpo jobs only, and artifact="adapter" needs hyperparameters.lora_rank. On success the job carries hf_repo_url.

requires_heartbeat
boolean
volume
string | null

A volume to mount read-only at /mnt/ on the training machine (custom scripts see it there and in VERI_VOLUME_DIR). Coming soon: behind VERI_FEATURE_VOLUME_MOUNTS, a non-blank value is a 400 until the flag is on. To train on one file in a volume, connect it as a dataset (datasets.from_volume) instead.

resume_from
string | null

Continue training from an intermediate checkpoint of an earlier job: a checkpoint id (ckpt_...) or <job_id>@<step>. The checkpoint must be ready and resumable and its job finished; method, base_model, dataset, LoRA settings and gpu_count must match the source job, and the source job's reward functions are inherited (send none). max_steps and num_epochs may change. The result is a NEW job with its own id and billing.

region
string | null
num_nodes
integer<int32>

Response

The created training job

object
string
required
id
string
required
status
enum<string>
required
Available options:
queued,
provisioning,
configuring,
running,
completed,
failed,
cancelled
method
string
required
output_name
string
required
created_at
string<date-time>
required
updated_at
string<date-time>
required
base_model
string | null
dataset_id
string | null
dataset_snapshot_id
string | null

The dataset snapshot this job was pinned to at submit ("<dataset_id>@snap-N"); set when dataset_id was given as …@snap-N or …@latest (or names a stream dataset). Null for legacy submits.

reward_count
integer<int32> | null

How many inline reward sources the job was submitted with (null for reward-free methods). Sources are viewable per job via the dashboard.

hyperparameters
object | null

The resolved hyperparameters, defaults filled in. The shape depends on method: GrpoHyperparameters (grpo), AgenticGrpoHyperparameters (grpo_agentic), HarnessGrpoHyperparameters (grpo_harness), SftTextHyperparameters (sft_text), DpoHyperparameters (dpo), SftVideoGenHyperparameters (sft_video_gen). Null for custom_script jobs.

base_image
string | null
entrypoint
string | null
gpu
null | object

Pydantic GPUInfo (with type field). Rust uses gpu_type internally but serializes as "type" for JSON parity.

gpu_requested
null | object

Pydantic GPUInfo (with type field). Rust uses gpu_type internally but serializes as "type" for JSON parity.

provider
string | null
region
string | null
num_nodes
integer<int32>
error
null | object
resolved_parallelism
any

The multi-GPU launch plan the worker resolved (dp, zero_stage, micro_batch_size, gradient_accumulation_steps, global_batch_size, precision, ...). Null for single-GPU jobs and before the worker has planned.

refund
null | object

Credit state for a platform-attributed failure; null when not applicable.

dashboard_url
string | null
download_url
string | null
wandb_run_url
string | null
hf_push
null | object

The hf_push request echoed back (null when the job didn't opt in).

hf_repo_url
string | null

Set after a successful end-of-training push to Hugging Face; the pushed repo's URL (mirrors wandb_run_url).

current_step
integer<int32> | null
total_steps
integer<int32> | null
current_loss
number<double> | null
cost_usd
number<double> | null
duration_seconds
number<double> | null
started_at
string<date-time> | null

When the job first reached running (training started).

completed_at
string<date-time> | null
launched_at
string<date-time> | null

When the launch returned the instance: queued is created_at..launched_at. Null until launched (and on jobs launched before the column existed).

provision_started_at
string<date-time> | null

Billing start: the instance's metering anchor that cost_usd and cost_so_far_usd count from. Stamped at launch on providers that bill from launch, otherwise when the job reaches configuring.

terminated_at
string<date-time> | null

When the instance was released (set on every terminal status).

user_rate_per_hour_usd
number<double> | null

The job's price in USD per hour: every GPU of every node, at the rate it is billed. Null when no price is known for its GPU shape.

cost_so_far_usd
number<double> | null

Live cost in USD while the job is provisioning, configuring or running: user_rate_per_hour_usd times the hours since provision_started_at. Null otherwise; a finished job reports its settled cost_usd.

visibility
enum<string>

Public-run state (Explore): private (default), public, or admin_hidden (removed by Veri; cannot be re-published).

Available options:
private,
public,
admin_hidden
published_at
string<date-time> | null