> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.islo.dev/api-reference/jobs/list-job-versions/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.islo.dev/_mcp/server. # List deployed versions GET https://api.islo.dev/jobs/{name}/versions Reference: https://docs.islo.dev/api-reference/jobs/list-job-versions ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Request ### Path parameters - `name` (string, required) ### Query parameters - `limit` (integer, optional, default: 50) - `offset` (integer, optional, default: 0) ## Response ### 200 Successful Response - `list of JobVersionResponse` ## Errors ### 422 Unprocessable Entity Error Validation Error - `detail` (list of ValidationError, optional) ## Types ### JobVersionResponse - `id` (string, required) - `version_number` (integer, required) - `content_hash` (string, required) - `deployed_at` (datetime, required) - `manifest` (JobManifest-Output, required) — Full job.toml manifest (TOML or JSON authoring; stored as JSON). ### ValidationError - `loc` (list of ValidationErrorLocItems, required) - `msg` (string, required) - `type` (string, required) - `input` (any, optional) - `ctx` (ValidationErrorCtx, optional) ### JobManifest-Output Full job.toml manifest (TOML or JSON authoring; stored as JSON). - `job` (JobSection, required) - `run` (RunSection-Output, required) - `schedule` (ScheduleSection, optional, nullable) - `verification` (VerificationSection, optional, nullable) - `outputs` (map from string to JobOutputSpec, optional, nullable) — Public job output contract for the job and downstream lines. ### ValidationErrorLocItems ### ValidationErrorCtx ### JobSection - `name` (string, required) — Job name; must match jobs/\/ and deploy path - `version` (string, optional, nullable) - `description` (string, optional, nullable) - `params` (map from string to JobParamSpec, optional, nullable) — Declared run parameters. Reference as \{\{name}} in manifest strings (substitution and undeclared-reference checks walk the whole manifest, not only step fields). Reserved: \{\{run\_id}}. ### RunSection-Output - `tasks` (list of Task-Output, required) - `fail_fast` (boolean, optional, default: true) - `fanout` (boolean, optional, default: false) - `concurrency` (integer, optional, default: 1) - `workdir` (string, optional, nullable) — Working directory for every exec and run_agent step. Defaults to ".". Falls back to run.sandbox.workdir when omitted. - `timeout` (RunSectionOutputTimeout, optional, nullable) - `region` (string, optional, nullable) - `teardown_on_complete` (boolean, optional, nullable) - `resume_on_start` (boolean, optional, nullable) - `sandbox` (SandboxConfig, optional, nullable) — Sandbox requirements for job runs (matches compute IncomingWebhookSandboxTemplate shape). ### ScheduleSection - `cron` (string, required) — Cron expression; validated at deploy time. Every param the schedule uses must have a default before you add [schedule]. - `timezone` (string, optional, default: UTC) - `enabled` (boolean, optional, default: true) ### VerificationSection - `enabled` (boolean, optional, default: false) - `gate` (VerificationGate, optional, nullable) ### JobOutputSpec Public job output contract. Writers emit the producer type; lines bind the published type after reduce. Session agents and $ISLO_OUTPUT use producer types (collect/gather still send the producer type, not the published array). - `type` (enum, required) - Allowed values: `string`, `integer`, `number`, `boolean`, `array` - `items` (enum, optional, nullable) — Item type for array outputs. Required at deploy when type = array. Do not use reduce = collect with type = array; use gather to concatenate arrays. - Allowed values: `string`, `integer`, `number`, `boolean` - `required` (boolean, optional, default: true) - `description` (string, optional, nullable) - `enum` (list of any, optional, nullable) - `reduce` (enum, optional, default: one) — one: exactly one claiming step. last: last successful write in manifest task order. collect: published array of producer values (dense nulls for missing tasks); required collect must be claimed by every task. gather: concatenate arrays or collect scalars, skipping omissions. - Allowed values: `one`, `last`, `collect`, `gather` ### JobParamSpec - `type` (JobParamSpecType, required) - `items` (enum, optional, nullable) — Item type when type = array. - Allowed values: `string`, `integer`, `number`, `boolean` - `required` (boolean, optional, default: false) — Cannot combine required=true with a default. - `description` (string, optional, nullable) - `pattern` (string, optional, nullable) - `prefix` (string, optional, nullable) - `enum` (list of any, optional, nullable) ### Task-Output - `name` (string, required) - `steps` (list of TaskStep-Output, required) - `sandbox` (SandboxConfig, optional, nullable) — Sandbox requirements for job runs (matches compute IncomingWebhookSandboxTemplate shape). ### RunSectionOutputTimeout ### SandboxConfig Sandbox requirements for job runs (matches compute IncomingWebhookSandboxTemplate shape). - `mode` (enum, optional, default: provision) - Allowed values: `provision`, `ensure`, `reuse` - `name` (string, optional, nullable) — Required for ensure/reuse. Supports \{\{param}} substitution. - `image` (string, optional, nullable) — Required for provision/ensure. - `vcpus` (integer, optional, default: 2) - `memory_mb` (integer, optional, default: 2048) - `disk_gb` (integer, optional, default: 10) - `snapshot_name` (string, optional, nullable) - `gateway_profile` (string, optional, nullable) - `environment` (string, optional, nullable) - `init` (SandboxConfigInit, optional, nullable) - `internet_enabled` (boolean, optional, default: true) - `workdir` (string, optional, nullable) — Sandbox default working directory. Used when [run].workdir is omitted. - `cache_key` (string, optional, nullable) - `env` (map from string to string, optional, nullable) - `sources` (list of GitSource, optional, nullable) - `setup_scripts` (list of SetupScript, optional, nullable) - `lifecycle` (LifecyclePolicy, optional, nullable) ### VerificationGate - `compare_to` (string, optional, nullable) - `min_pass_rate` (double, optional, nullable) ### JobParamSpecType ### TaskStep-Output One compute action per step. Define exactly one action key (exec, run_agent, snapshot, pause, resume, or delete). Task names and step names must be unique and non-blank. A job with [outputs], exactly one session run_agent step, and no step listing outputs implicitly claims every output key. More than one potential writer, or any explicit outputs list, requires every writer to claim. - `name` (string, optional, nullable) — Unique non-blank step name within the task. - `workdir` (string, optional, nullable) — Override \[run].workdir for this step. Supports \{\{name}} placeholders. - `timeout` (integer, optional, nullable) — Max wall-clock duration for this step in seconds. - `user` (string, optional, nullable) - `exec` (TaskStepOutputExec, optional, nullable) — Shell command. Supports \{\{name}} placeholders in each argv element. Control plane sets \$ISLO\_OUTPUT to /dev/null when the step claims no output keys, or /tmp/islo\_output.\.\ when it claims keys. Write key=value lines (JSON after =, raw string fallback for type=string). Do not pre-create the file. Cap is 64 KiB. - `run_agent` (TaskStepOutputRunAgent, optional, nullable) — Run an agent step. Session mode publishes claimed producer keys as structured JSON. Exec mode uses $ISLO_OUTPUT like exec. - `snapshot` (SnapshotStepAction, optional, nullable) - `pause` (boolean, optional, nullable) - `resume` (boolean, optional, nullable) - `delete` (boolean, optional, nullable) - `upload` (string, optional, nullable) — Not implemented yet; do not author. - `download` (string, optional, nullable) — Not implemented yet; do not author. - `outputs` (TaskStepOutputOutputs, optional, nullable) — Claim job output keys. List shortcut: outputs = ["summary"]. Table: [run.tasks.steps.outputs.summary] from = "agent_key", required = true. ### SandboxConfigInit - `type`: `custom` (SandboxInitCustom) - `await_ready` (boolean, optional, default: false) - `capabilities` (list of enum, optional) - Allowed values: `ssh`, `docker` - `type`: `full` (SandboxInitFull) - `type`: `minimal` (SandboxInitMinimal) ### GitSource A git source to clone into /workspace. - `repo_url` (string, required) - `branch` (string, optional, nullable) - `target_path` (string, optional, nullable) ### SetupScript A named setup script to execute after git clones. - `script` (string, required) - `name` (string, optional) ### LifecyclePolicy - `auto_resume` (enum, optional) - Allowed values: `never`, `on_activity` - `delete_after` (long, optional, nullable) - `pause_after` (long, optional, nullable) - `pause_after_idle` (long, optional, nullable) ### TaskStepOutputExec Shell command. Supports \{\{name}} placeholders in each argv element. Control plane sets \$ISLO\_OUTPUT to /dev/null when the step claims no output keys, or /tmp/islo\_output.\.\ when it claims keys. Write key=value lines (JSON after =, raw string fallback for type=string). Do not pre-create the file. Cap is 64 KiB. ### TaskStepOutputRunAgent Run an agent step. Session mode publishes claimed producer keys as structured JSON. Exec mode uses $ISLO_OUTPUT like exec. - `mode`: `exec` (RunAgentExecStepAction) - `command` (TaskStepOutputRunAgentDiscriminatorMappingExecCommand, required) - `harness` (enum, required) - Allowed values: `codex`, `cursor`, `claude`, `opencode`, `custom` - `model` (string, optional, nullable) - `mode`: `session` (RunAgentSessionStepAction) - `harness` (enum, required) — Session outputs require claude, codex, cursor, or opencode. - Allowed values: `codex`, `cursor`, `claude`, `opencode` - `command` (TaskStepOutputRunAgentDiscriminatorMappingSessionCommand, optional, nullable) - `effort` (string, optional, nullable) — Reasoning effort token. Requires model. Legal values come from the effort table on GET /inference/models, which is keyed by harness and optionally by model. For cursor the pair also resolves to a real model id, because cursor encodes effort in the id rather than taking a flag. Omit to use the harness default. - `knowledge` (list of KnowledgeBinding, optional, nullable) - `mcp` (list of McpEntry, optional, nullable) — MCP server descriptors to make available to the agent. Each entry carries a key (unique label) and url (MCP endpoint). Duplicates by key are rejected. - `model` (string, optional, nullable) - `model_provider` (enum, optional, nullable) - Allowed values: `islo`, `islo_inference` - `prompt` (TaskStepOutputRunAgentDiscriminatorMappingSessionPrompt, optional, nullable) - `resume_prompt` (TaskStepOutputRunAgentDiscriminatorMappingSessionResumePrompt, optional, nullable) - `session` (string, optional, nullable) ### SnapshotStepAction - `name` (string, required) ### TaskStepOutputOutputs Claim job output keys. List shortcut: outputs = ["summary"]. Table: [run.tasks.steps.outputs.summary] from = "agent_key", required = true. ### TaskStepOutputRunAgentDiscriminatorMappingExecCommand ### TaskStepOutputRunAgentDiscriminatorMappingSessionCommand ### KnowledgeBinding - `slug` (string, required) ### McpEntry One MCP server descriptor in a run_agent step. - `key` (string, required) - `url` (string, required) ### TaskStepOutputRunAgentDiscriminatorMappingSessionPrompt - `type`: `knowledge` (KnowledgeBinding) - `slug` (string, required) - `type`: `literal` (LiteralBinding) - `value` (any, required) ### TaskStepOutputRunAgentDiscriminatorMappingSessionResumePrompt - `type`: `knowledge` (KnowledgeBinding) - `slug` (string, required) - `type`: `literal` (LiteralBinding) - `value` (any, required) ## Examples **Response** ```json [ { "id": "string", "version_number": 1, "content_hash": "string", "deployed_at": "2024-01-15T09:30:00Z", "manifest": { "job": { "name": "string", "version": "string", "description": "string", "params": {} }, "run": { "tasks": [ { "name": "string", "steps": [ { "name": "string", "workdir": "string", "timeout": 1, "user": "string", "exec": [ "string" ], "run_agent": { "mode": "session", "harness": "codex", "command": [ "string" ], "effort": "string", "knowledge": [ { "slug": "string", "type": "string" } ], "mcp": [ { "key": "string", "url": "string" } ], "model": "string", "model_provider": "islo", "prompt": { "type": "string", "value": null }, "resume_prompt": { "type": "string", "value": null }, "session": "string" }, "snapshot": { "name": "string" }, "pause": true, "resume": true, "delete": true, "upload": "string", "download": "string", "outputs": {} } ], "sandbox": { "mode": "provision", "name": "string", "image": "string", "vcpus": 2, "memory_mb": 2048, "disk_gb": 10, "snapshot_name": "string", "gateway_profile": "string", "environment": "string", "init": { "type": "minimal" }, "internet_enabled": true, "workdir": "string", "cache_key": "string", "env": {}, "sources": [ { "repo_url": "string", "branch": "string", "target_path": "string", "primary": false } ], "setup_scripts": [ { "script": "string", "name": "" } ], "lifecycle": { "auto_resume": "never", "delete_after": 1, "pause_after": 1, "pause_after_idle": 1 } } } ], "fail_fast": true, "fanout": false, "concurrency": 1, "workdir": "string", "timeout": "string", "region": "string", "teardown_on_complete": true, "resume_on_start": true, "sandbox": { "mode": "provision", "name": "string", "image": "string", "vcpus": 2, "memory_mb": 2048, "disk_gb": 10, "snapshot_name": "string", "gateway_profile": "string", "environment": "string", "init": { "type": "minimal" }, "internet_enabled": true, "workdir": "string", "cache_key": "string", "env": {}, "sources": [ { "repo_url": "string", "branch": "string", "target_path": "string", "primary": false } ], "setup_scripts": [ { "script": "string", "name": "" } ], "lifecycle": { "auto_resume": "never", "delete_after": 1, "pause_after": 1, "pause_after_idle": 1 } } }, "schedule": { "cron": "string", "timezone": "UTC", "enabled": true }, "verification": { "enabled": false, "gate": { "compare_to": "string", "min_pass_rate": 0.5 } }, "outputs": {} } } ] ``` **SDK Code** ```python import requests url = "https://api.islo.dev/jobs/name/versions" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript const url = 'https://api.islo.dev/jobs/name/versions'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.islo.dev/jobs/name/versions" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://api.islo.dev/jobs/name/versions") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.islo.dev/jobs/name/versions") .header("Authorization", "Bearer ") .asString(); ``` ```php request('GET', 'https://api.islo.dev/jobs/name/versions', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://api.islo.dev/jobs/name/versions"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://api.islo.dev/jobs/name/versions")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```