Skip to content

Create Finetune Job

POST
/v1/finetune
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.

x-api-key
string | null
Media type application/json
FinetuneRequest

Request to start a finetune job.

object
project_id
required

Project ID to associate the job with

string format: uuid
model_id

HuggingFace model ID to finetune. Required for smolvla, pi05. Must NOT be provided for act, sarm.

string | null
model_revision

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.

string | null
/^[0-9a-f]{40}$/
vla_type
required
VLAType

VLA model type (determines camera slot configuration)

string
Allowed values: act smolvla pi05 sarm
dataset_version_id
required

Immutable QDS DatasetVersion ID. Training never accepts mutable repository names, branches, or external dataset identifiers.

string format: uuid
hours
required

Training duration in hours

number
> 0 <= 168
instance_type

GPU instance type (from /v1/instances). If not specified, cheapest available is used.

string | null
region

Cloud region. If not specified, best available is selected.

string | null
batch_size

Training batch size

integer
default: 32 >= 1 <= 512
name

Job name/description. Defaults to ‘SDK Job - {vla_type}’

string | null
<= 255 characters
model_name

Output model name, independent of the job description.

string | null
<= 193 characters
camera_mappings
required

Camera mappings from model camera slots to dataset image keys.

object
key
additional properties
string
Example
{
"cam_1": "observation.images.top",
"cam_2": "observation.images.wrist",
"cam_3": "observation.images.front"
}
vla_hyper_spec

Advanced hyperparameters for VLA models. Use GET /v1/finetune/hyperparams/defaults to get defaults.

object
key
additional properties
any
use_rabc

Whether to use SARM Reward-Aware Behavior Cloning (RA-BC) for training

boolean
sarm_reward_model_id

Hugging Face repository ID for the trained SARM reward model. Required with an exact commit when use_rabc=True.

string | null
sarm_reward_model_revision

Exact 40-character lowercase Hugging Face commit SHA for the SARM reward model. Required when use_rabc=True.

string | null
/^[0-9a-f]{40}$/
rabc_head_mode

SARM head mode to use: ‘sparse’, ‘dense’, or ‘both’

string
default: sparse
Allowed values: sparse dense both
sarm_image_observation_key

Image key from camera_mappings for SARM reward annotations (required if use_rabc=True)

string | null
job_type
JobType

Type of fine-tuning job: ‘vla’, ‘reward’, or ‘vla_w_reward’

string
default: vla
Allowed values: vla reward vla_w_reward
compute_overrides

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
dev_session

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.

string | null
driver

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.

string | null
Allowed value: gcp
hints

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
key
additional properties
any
op_hints

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
key
additional properties
any

Finetune job created successfully

Media type application/json
FinetuneResponse

Response after creating a finetune job.

object
job_id
required

Unique job identifier

string format: uuid
status
required

Current job status

string
message

Status message

string | null
Example generated
{
"job_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"status": "example",
"message": "example"
}

Invalid camera mappings or request parameters

Media type application/json
ErrorResponse

Standard error response.

object
detail
required

Error message describing what went wrong

string
Example generated
{
"detail": "example"
}

Invalid or missing API key

Media type application/json
ErrorResponse

Standard error response.

object
detail
required

Error message describing what went wrong

string
Example generated
{
"detail": "example"
}

Validation error