/v1/training_jobs/*. All endpoints require Bearer token auth (Authorization: Bearer vk_...) unless flagged worker-only.
Endpoints
Worker-only endpoints (used by the runner agent, authenticated via per-job
callback_token): POST /status, POST /presigned-upload, POST /logs/presigned-upload. Documented in the worker-callbacks appendix at the bottom.
POST /v1/training_jobs
Create a job. Returns immediately with statusqueued.
Request schema (TrainingJobCreate):
base_model, dataset_id, output_name, gpu. Required for method=grpo and grpo_harness: reward_source (or reward_sources, or environments).
dataset_id also accepts dataset stream references: a stream’s name or id with @latest or @snap-N (for example acme-feedback@latest). The job resolves and stores the pinned snapshot as dataset_snapshot_id in its response, so later appends never change what the job trains on.
Reward fields: reward_source is the Python source text of a TRL-signature reward function. For multiple weighted rewards, pass reward_sources (a list) plus optional reward_weights (same length). reward_source/reward_sources and environments are mutually exclusive. Limits: at most 8 sources, 256 KiB each, and each source must define a function; violations are HTTP 400 at submit. See Reward functions.
Validation rules:
method=grpoorgrpo_harness→ reward required (reward_source,reward_sources, orenvironments).grpo_agenticis being rebuilt and is not currently available.method=sft_text,dpo,sft_video_gen, orcustom_script→ reward fields must be omitted (these learn from the dataset)gpu.gpu_typemust be one of:A100-80GB,H100-80GB,L4-24GB,A10G-24GBgpu.gpu_countin[1, 8]
400 Bad Request: invalid reward source (too many, too large, or doesn’t define a function)402 Payment Required— credit balance too low for the requested resources (see Billing)404 Not Found—dataset_iddoesn’t exist or belongs to another user422 Unprocessable Entity— schema validation failed
TrainingJobResponse, 201):
GET /v1/training_jobs
List your jobs. Filter bystatus (queued / provisioning / running / completed / failed / cancelled) or method (grpo / grpo_harness / sft_text / dpo / sft_video_gen).
PaginatedList[TrainingJobResponse] with data + has_more.
GET /v1/training_jobs/
Single job. Same shape as the create response, but with timestamps populated as the job progresses.GET /v1/training_jobs//metrics
Sampled training metrics for charting. Server-side stride downsampling if you ask for more thanmax_points.
Query params:
keys— comma-separated metric names (e.g.loss,reward_mean,kl_div). Omit for all available.from_step,to_step— inclusive boundsmax_points— cap result size, default500, max5000
GET /v1/training_jobs//events
Job lifecycle audit trail. Each event has timestamp, level (info / warn / error), event_type, and metadata.
GET /v1/training_jobs//logs
Tail of recent stdout from the worker. Returns chunked plain text. Falls back to the cachedlog_tail if the worker hasn’t streamed anything fresh.
For the full log after a job completes, use /logs/full instead.
GET /v1/training_jobs//logs/full
Returns the complete stdout as plain text from S3 (uploaded ~30s during the run + a final flush at exit). Returns206 Partial Content if the upload hasn’t happened yet (early-stage jobs); 404 if neither full log nor tail exists.
POST /v1/training_jobs//cancel
Cancel a non-terminal job. The worker terminates at the next checkpoint boundary, not instantly —status may stay running for a few seconds before flipping to cancelled.
DELETE /v1/training_jobs/
Hard-delete the job row + cascading metrics + events + S3 artifacts (logs, status files, checkpoints). Constraints:- Job must be in a terminal state (
completed,failed,cancelled) - No active deployments may reference this job (
source="training_job",source_job_id=this_id)
400 Bad Request — delete the deployment first.
GET /v1/training_jobs//model
Presigned S3 download URL for the final HF-format checkpoint. Only available afterstatus=completed.
Hyperparameter schemas
GRPOHyperparameters (method=grpo)
See GRPO algorithm for the full walkthrough. Schema fields with defaults:AgenticGRPOHyperparameters (method=grpo_agentic)
Inherits all GRPO fields plus:SFTVideoGenHyperparameters (method=sft_video_gen)
GPU config schema
gpu_type values: A100-80GB, H100-80GB, L4-24GB, A10G-24GB. AMD MI300X-192GB is coming soon. On AWS, A100-80GB and H100-80GB launch as 8-GPU nodes; L4-24GB and A10G-24GB are the single-GPU shapes. On vast, A100-80GB and H100-80GB rent as flexible 1-8 GPU chunks; on digitalocean, H100-80GB comes in fixed 1x and 8x droplets. Run veri gpu list to see current availability and pricing for every shape.
Checkpoint destination schema
s3, gs, az, you’ll need credentials configured via account integrations (or pass them inline — schema accepts a credentials field).
Worker callbacks (appendix)
These exist for the runner agent and are NOT for users to call directly. Auth is per-jobcallback_token (a 32-byte random secret stored in the DB on job creation), not your API key.
POST /v1/training_jobs/{id}/status— worker reports progress, metrics, terminal statePOST /v1/training_jobs/{id}/presigned-upload— worker requests a presigned S3 PUT URL for checkpoint filesPOST /v1/training_jobs/{id}/logs/presigned-upload— worker requests a presigned S3 PUT URL for the full stdout
Related
Datasets
dataset_id setup before submitting.Reward functions
Writing and attaching
reward_source.Billing
Billing states and balance checks.
Quickstart
Full SDK + CLI walkthrough.

