Direct Job creation is best for one-off workloads or quick experiments. For workloads you plan to run repeatedly, consider creating a Job
Recipe instead — recipes save your configuration and make re-launching easier.
Understanding Job Types
Jobs can be either BATCH or PERSISTENT:- BATCH Jobs
- PERSISTENT Jobs
BATCH jobs run until completion or timeout.
The job automatically stops when:
| Property | Value |
|---|---|
task | BATCH |
max_timeout_run_ms | Required — maximum runtime in milliseconds |
| Billing | Charged for actual execution time |
| Use cases | Rendering, data processing, inference tasks |
- Your container exits
- The timeout is reached
Create Job Request
Endpoint
Request Body
Hardware Requirements
| Field | Type | Description |
|---|---|---|
cpu_count | number | Number of CPU cores |
gpu_count | number | Number of GPU devices |
min_ram_gb | number | Minimum system RAM in GB |
min_storage_gb | number | Minimum available storage in GB |
min_vram_gb | number | Minimum GPU VRAM in GB |
Container Parameters
| Field | Type | Description |
|---|---|---|
image | string | Docker image name |
tag | string | Docker image tag |
sshkey | string | (Optional) SSH public key for access |
allowed_ips | string[] | (Optional) IP addresses allowed to connect |
Example: Create a BATCH Job
All API requests require HMAC signature authentication. See Authenticate
Requests for the
generateAuthHeaders helper function used below.Example: Create a PERSISTENT Job with SSH
Query Job Runs
After creating a Job, query for its Job Runs to get connection information:View Job Run Logs
The list endpoint (GET /v1/job-runs) does not include logs to keep responses small. To retrieve logs via the API, request a specific Job Run:
logs field with container output.
Job Lifecycle
| Status | Description |
|---|---|
PENDING | Waiting for node assignment |
ASSIGNED | Node selected, container starting |
RUNNING | Container executing |
COMPLETED | Finished successfully |
FAILED | Error occurred |
CANCELLED | Cancelled by user |
CANCELLING | Cancel requested |
Stop a Job
To stop a RUNNING job (or cancel a PENDING job):Best Practices
- Use Job Recipes for repeated workloads — If you’ll run this configuration again, create a recipe instead of submitting the full payload each time
- Use BATCH for finite tasks — Set realistic timeouts to prevent runaway costs
- Use PERSISTENT for interactive work — SSH access, development, debugging
- Stop PERSISTENT jobs promptly — Set calendar reminders if needed