Create Finetune Job
const url = 'https://example.com/v1/finetune';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"project_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","model_id":"lerobot/smolvla_base","model_revision":"example","vla_type":"act","dataset_version_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","hours":1,"instance_type":"example","region":"example","batch_size":32,"name":"example","model_name":"example","camera_mappings":{"cam_1":"observation.images.top","cam_2":"observation.images.wrist","cam_3":"observation.images.front"},"vla_hyper_spec":{},"use_rabc":false,"sarm_reward_model_id":"example","sarm_reward_model_revision":"example","rabc_head_mode":"sparse","sarm_image_observation_key":"example","job_type":"vla","compute_overrides":{"dev_session":"example","driver":"gcp","hints":{"max_wait_seconds":3600},"op_hints":{"finetune_act":{"drivers":[{"driver":"verda_container","gpu":"L40S"}]}}}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/v1/finetune \ --header 'Content-Type: application/json' \ --data '{ "project_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "model_id": "lerobot/smolvla_base", "model_revision": "example", "vla_type": "act", "dataset_version_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "hours": 1, "instance_type": "example", "region": "example", "batch_size": 32, "name": "example", "model_name": "example", "camera_mappings": { "cam_1": "observation.images.top", "cam_2": "observation.images.wrist", "cam_3": "observation.images.front" }, "vla_hyper_spec": {}, "use_rabc": false, "sarm_reward_model_id": "example", "sarm_reward_model_revision": "example", "rabc_head_mode": "sparse", "sarm_image_observation_key": "example", "job_type": "vla", "compute_overrides": { "dev_session": "example", "driver": "gcp", "hints": { "max_wait_seconds": 3600 }, "op_hints": { "finetune_act": { "drivers": [ { "driver": "verda_container", "gpu": "L40S" } ] } } } }'Start a new finetune job via the pipeline API.
Parameters
Section titled “ Parameters ”Header Parameters
Section titled “Header Parameters ”Request Body required
Section titled “Request Body required ”Request to start a finetune job.
object
Project ID to associate the job with
HuggingFace model ID to finetune. Required for smolvla, pi05. Must NOT be provided for act, sarm.
Exact Hugging Face commit SHA. The server supplies the reviewed pin for a built-in foundation-model alias; custom model IDs must always provide this value.
VLA model type (determines camera slot configuration)
Immutable QDS DatasetVersion ID. Training never accepts mutable repository names, branches, or external dataset identifiers.
Training duration in hours
GPU instance type (from /v1/instances). If not specified, cheapest available is used.
Cloud region. If not specified, best available is selected.
Training batch size
Job name/description. Defaults to ‘SDK Job - {vla_type}’
Output model name, independent of the job description.
Camera mappings from model camera slots to dataset image keys.
object
Example
{ "cam_1": "observation.images.top", "cam_2": "observation.images.wrist", "cam_3": "observation.images.front"}Advanced hyperparameters for VLA models. Use GET /v1/finetune/hyperparams/defaults to get defaults.
object
Whether to use SARM Reward-Aware Behavior Cloning (RA-BC) for training
Hugging Face repository ID for the trained SARM reward model. Required with an exact commit when use_rabc=True.
Exact 40-character lowercase Hugging Face commit SHA for the SARM reward model. Required when use_rabc=True.
SARM head mode to use: ‘sparse’, ‘dense’, or ‘both’
Image key from camera_mappings for SARM reward annotations (required if use_rabc=True)
Type of fine-tuning job: ‘vla’, ‘reward’, or ‘vla_w_reward’
Optional per-run compute dispatch overrides. Supports dev_session (pin to a named dev VM) and driver (pick a non-default backend like "gcp") — see ComputeOverrides.
object
Name of an existing dev session VM (as registered via qcore session start <name>). When set, all ops in this pipeline run are dispatched to that VM via the Verda Instances driver, bypassing the prod Verda Containers path. The session must exist and be in status=running.
Name of a non-default compute backend to route every container op of this run to. Today only "gcp" is recognized — it pins dispatch to the GcpContainerDriver (Google Cloud Batch). Requires the pipeline-api deployment to have GCP credentials configured; ignored otherwise.
Run-level dispatch hints — forwarded verbatim to pipeline-api’s ComputeHints model. Supported keys: drivers (ordered list of preferences), max_wait_seconds (capacity-wait window; on CapacityExhausted the run enters SCHEDULED and the scheduler retries every 30s until the deadline), and booking (whole-run VM pinning). Pipeline-api validates the shape; bad inputs are 400’d at submit time.
object
Per-op dispatch hints, keyed by op_type — forwarded verbatim to pipeline-api, where each op resolves its effective ComputeHints as: per-op override (this) > run-level hints > template default. Use this to pick compute for the training op (finetune_<vla_type>) without overriding the cheap defaults of control-plane ops like credit reservation.
object
Responses
Section titled “ Responses ”Finetune job created successfully
Response after creating a finetune job.
object
Unique job identifier
Current job status
Status message
Example generated
{ "job_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "status": "example", "message": "example"}Invalid camera mappings or request parameters
Standard error response.
object
Error message describing what went wrong
Example generated
{ "detail": "example"}Invalid or missing API key
Standard error response.
object
Error message describing what went wrong
Example generated
{ "detail": "example"}Validation error