200 Dataset, including versions and a page of the selected version’s tasks. See dataset methods for the complete response fields.
Catalog and version routes
Catalog filters are
search, visibility (public or private), org (slug/id), limit, cursor, sortField (name, updated, tasks), and sortDirection (asc, desc). Task-list sorting accepts only sortField=name. Dataset detail pages default to 200 tasks, maximum 500; catalog pages use 50/200 pagination.
Omitting version selects the active version. Activation selects another READY version as the default for bare-name requests. A successful publish of an owned dataset normally activates its READY version without a second request.
Enabling upstream_auto_import requires an active version with a watchable moving git reference. An uploaded archive, commit-only source, or missing active version returns 409 upstream_not_watchable; disabling it is allowed.
Preflight configuration
POST /api/datasets/preflight checks task configuration before publishing. Given a task directory named my-task, create a request from its actual configuration:
tasks must be nonempty. Each entry requires a unique name of 1–256 characters and task_toml text; optional dataset_toml is the corpus manifest text. Preflight requires Python 3 only for this request-building example; the endpoint accepts JSON from any language.
200 DatasetPreflight with per-task verdicts and an optional manifest verdict. Preflight does not build task images. See preflight methods for the returned checks.
Publish a corpus
POST /api/datasets/publish accepts multipart data. For a prepared tasks.tar.gz archive:
202 DatasetImport. Store its id as IMPORT_ID and read the import result.
Choose exactly one source:
archive, archive_url, git_url with git_ref, or hub_package. Tags and hub references are resolved to fixed content when accepted. git_path must be an unambiguous relative POSIX path, without parent/current-directory segments, whitespace, backslashes, or glob characters.
Publishing an owned name@version again restarts that version’s import in place. Use a new version label when you need to preserve the older version’s contents.
A manifest controls task selection and verifies pinned content digests. A custom metric.py is unsupported. See publish inputs for source-specific rules and complete import fields.
Follow an import
QUEUED, RUNNING, COMPLETED, or FAILED. Completion means the version is READY and at least one task built. Some tasks can still have failed: inspect import warnings and the dataset version’s n_failed_tasks before assuming every task is runnable.
A whole-dataset job selects READY tasks and reports build exclusions. Naming a failed task explicitly returns task_failed_to_build. Read a task’s build result using:
200 TaskBuild with the task’s state and failure details when present. Failed tasks do not silently become zero-reward trials.
Read task packages
Use the prefix/api/datasets/{name}/versions/{version}/tasks/{task_name}. The version is required.
List
path defaults to /. Lists default to 500 entries, maximum 1000, with next_cursor. These are the retained task files, with no live source, logs, processes, or watch operation. See task package methods for byte ranges and returned fields.
Resumable uploads
Use this protocol for large dataset archives. The SDK automatically selects it above 256 MiB. Job imports use the same protocol under/api/jobs/upload/uploads.
Creation declares the exact archive byte
size and the entire archive’s sha256 as 64 lowercase hexadecimal characters. The response supplies chunk bounds. For dataset uploads, name/version can come from the archive manifest.
Send chunks sequentially. Every PATCH requires:
Every chunk must be no larger than
chunk_max_bytes. Non-final chunks must also be at least chunk_min_bytes. After a transfer error, use HEAD to recover the accepted offset; do not assume the last chunk failed. Complete only after every declared byte has been accepted.
Completion verifies the entire archive and returns a pollable import. Repeating a successful completion returns the same import. A whole-archive digest mismatch fails the session; start a new upload. An incomplete transfer returns 409 upload_incomplete.
For an HTTP client that does not implement chunk checksums and recovery, use the dataset SDK or job upload SDK.
Errors and ownership
Dataset writes require ownership. A name owned by another account returns409 dataset_name_taken. Deletion refuses a dataset referenced by jobs with 409 dataset_in_use, including the blocking ids. Activation refuses unfinished versions with version_not_ready and failed or archived versions with version_not_activatable.
Publish errors include unpinned_git_ref, invalid archives/manifests, 413 import_too_large, and temporary upload capacity refusals. Chunk errors distinguish offset mismatch, chunk digest mismatch, and full-archive digest mismatch. See dataset import and resumable-upload errors.
