Skip to main content
Field names are the wire’s, snake_case, identical in TypeScript and Python. Four keys are the exception: TypeScript exposes nextCursor, hasMore, byStatus and taskMatrix as the wire spells them; Python maps them to next_cursor, has_more, by_status and task_matrix. Python results are dataclasses and their closed vocabularies are Literal types. Eleven closed vocabularies are exported as runtime lists in TypeScript: TRIAL_STATUSES, ANALYSIS_STATUSES, CHECK_STATUSES, EVAL_SANDBOX_PROVIDERS, JOB_LIST_SCOPES, TRIAL_ARTIFACT_STREAMS, ANALYSIS_ARTIFACT_STREAMS, AGENT_EFFORT_SUPPORT_VALUES, TASK_LINKED_BY, TASK_LINK_REASONS and HOSTED_ERROR_CODES. Python exports HOSTED_ERROR_CODES.

Page

Every list answers Page<T>: items, nextCursor (pass it back as cursor; null means no next page) and hasMore. A list handle is awaited for one page or iterated for every page.

Job

One shape from start, get, list, cancel, resume, retry and regrade.

AgentArm

RetryConfig

max_retries, include_exceptions (string[] or null, null meaning no filter), exclude_exceptions (string[]), wait_multiplier, min_wait_sec, max_wait_sec. Backoff between attempts is min(min_wait_sec × wait_multiplier^attempt, max_wait_sec). The input shape accepts every field as optional; an explicit exclude_exceptions: null turns exclusions off, while omitting it keeps the default non-retryable set. include_exceptions null, omitted or [] all mean no filter.

AnalyzeConfig

model_name, rubric ({ criteria: [{ name, description, guidance }] }), prompt (string or null for the default body), reasoning_effort, sandbox_provider, n_concurrent (number or null for the organization’s ceiling alone), passing, failing (both false means every analyzable trial), n_trials (number or null for no cap). The input shape takes every field as optional.

JobStats

Counters are cumulative: errored trials are a subset of completed, cancelled a subset of errored. The disjoint breakdown is Job.trials.byStatus. AgentDatasetStats: n_trials (trials that produced a rewards map), n_errors (trials carrying exception_info), metrics (a mean per arm, unrewarded trials counting 0), pass_at_k (a map of k as string to a value in [0, 1]; {} when the group cannot answer), reward_stats (reward key → value → trial ids), exception_stats (exception type → trial ids). JobAnalysisStats: n_completed, n_failed, n_pending (trials by their latest analysis), cost_usd (the latest analyses’ measured spend summed; null when none was measured), checks (per criterion, { n_pass, n_fail, n_not_applicable, n_unknown }).

JobBuildExclusion

dataset ({ name, version }), n_tasks_ran, n_tasks_selected (what the filters matched before any n_tasks cap), n_tasks_failed_to_build, failed_task_names (sorted), note (the sentence to show).

UploadProvenance

original_job_id and original_job_name (what the archive’s own files said; null when they said nothing), uploaded_at, reported_totals (cost_usd, n_input_tokens, n_cache_tokens, n_output_tokens, each null when no trial reported it, plus n_trials_reporting; null on jobs ingested before the field existed), task_links (JobTaskLink[]; null on jobs ingested before task linking existed). JobTaskLink: task_name, n_trials, n_linked, n_unlinked, linked_by (dataset_flag, job_dataset_record, task_hash or none), datasets (the name@version refs linked to), link_reasons (a count per reason: hash_mismatch, task_not_in_dataset, no_dataset_named, dataset_ambiguous, no_hash_match, no_task_digest), candidates (the refs an ambiguous hash matched).

Trial

One shape on list rows and on trials().get(); the detail route alone serves exception_info.exception_message untruncated. Execution facts (sandbox_provider, verifier_environment_mode, agent_result.cost_usd, spend_source) are null until the trial has executed: null means “did not run”, never zero.

UsageReading

The same object, same keys, on trials, analyses and managed-agent sessions.

TrialAnalysis

Check and TaskCheck

Check: id, status (queued, running, completed; a check never fails as a whole), source ({ type, sha256, bytes, dataset }: type is archive with bytes set and dataset null, or dataset with the resolved name@version and bytes null), model_name, reasoning_effort, rubric, prompt (null for the default), sandbox_provider, n_concurrent (null for the ceiling alone), include_task_names, exclude_task_names, n_tasks (null for no cap), results (TaskCheck[], sorted by task name), cost_usd (the sum of measured task costs; null when none), created_at, finished_at (null until every task settled). TaskCheck: id, check_id, task_name, status (queued, running, completed, failed), checks (as on an analysis; no summary), label (has_a_problem, unclear, no_problem_found; null until completed and under a custom rubric), executed (true when none of the five run-based criteria is unknown; null exactly when label is null), cost_usd, attempts, failure, created_at, finished_at.

Dataset

list() returns the summary fields; get() adds versions, selected_version, tasks, failed_tasks, created_at and updated_at.

DatasetVersion

Task

Public fields only; instructions, environments and tests never leave the server. task_name, agent_timeout_sec, verifier_timeout_sec, gpus (0 for a CPU task), gpu_types (null means any type), providers (per provider { ok: true }, { ok: true, degrades_to: "modal", reason } or { ok: false, reason }), notes ({ code: "tests_dockerfile_not_built", message }[]; empty when there is nothing to say). TaskBuild, from getTaskBuild(): task_name, state (READY or FAILED), failure ({ code, step, message, excerpt }; step is parse, image-build, image-config, skills-verify, compose-resolve, image-mirror or store; null on READY), build_log_ref (null on READY and on parse refusals).

UpstreamStatus

git_url (userinfo stripped), ref, current_commit, path (null for the repository root), latest_commit (null when the last check failed), acked_commit (the newest commit a local version exists for), moved (branch on this), behind_by (reserved, null), checked_at, error (why the last check failed; show “could not check”, never “up to date”), auto_import. A version pinned to a sha serves the watch at rest: latest_commit, checked_at and error null, moved false.

DatasetImport

JobImport

Events

jobs().watch() yields JobEvent: seq (the resume position) plus type and data. Switching on type narrows data.

Smaller shapes

  • JobTaskRollup, from jobs().tasks(): task_name, source, trials ({ total, byStatus }), mean_reward (over SCORED trials; null when none), cost_usd, check (the task’s latest TaskCheck on a version this job spans; null when never checked).
  • CompareResponse, from jobs().compare(): jobs (per job: id, datasets, status, mean_reward over SCORED trials, coverage { scored, total }, cost_usd, agents, started_at) and taskMatrix (per task: task_name, disagreement, cells in the caller’s id order, each { job_id, status, mean_reward, coverage } where status is a trial status when every trial in the cell shares it, MIXED when they differ, MISSING when the job has no trial for the task). Disagreement rows come first.
  • StopResponse, from trials().stop(): stopped (Trial[]), stopped_analyses (TrialAnalysis[], each failed with phase stopped), already_terminal (ids), not_found (ids that do not exist or are not yours; never told apart). Every requested id appears in exactly one list.
  • JobGrepGroup, from jobs().grep(): trial_id, task_name (string or null), match_count (exact), events (the first five matches).
  • TrialFile, from trials().files(): path, size_bytes.
  • TraceEvent: seq, type, data. A usage event whose data.update.source is gateway is the platform’s meter and the only usage line that carries tokens and money; gatewayUsageOf(event) reads it. On a terminal trial these follow the last harness event with seq from 1000000000 (GATEWAY_TRACE_SEQ_BASE).
  • SkillUpload: id, name, digest, size_bytes, description, ref (the upload:<id> string), created_at.
  • Agent: name, source (install_script or tarball), run_command, env, created_at, updated_at.
  • AuthStatus: user_id, email, key ({ id, label, created_at, last_used_at }; last_used_at is always null today).
  • Organization: org_id, slug, display_name, personal, role (owner or member), created_at. OrganizationDetail adds member_count, quota and usage; see auth and orgs.
  • JobDeleteResult: job_id, trials_deleted, analyses_deleted.
  • DatasetPreflight, from datasets().preflight(): importer_version, checks (the guards that ran), deferred ({ name, reads }[], the guards a task.toml alone cannot decide), manifest ({ ok, name, short_name, version, task_count, reason } \| null), tasks (per task name, ok, task_key, schema_version, providers, notes, reason), tasks_total, tasks_ok, tasks_refused.