Job.
All list routes use keyset cursor pagination (cursor / next_cursor).
Upload file
metadata form field must be a JSON-encoded UploadFileRequest.
JSON upload (server-side URL fetch):
path(required) — Workspace-relative destination path. Must not start with/. No.or..segments.source(optional) —{"type": "url", "url": "...", "file_name": "..."}for server-side fetch. Omit for multipart.labels(optional) — Key-value metadata stored verbatim.graph_inclusion(optional, default"auto") —"auto","include", or"exclude". Overrides the workspace KG exclusion rules for this file.on_conflict(optional, default"reject") —"reject"raisespath_conflictif a file already exists at this path."new_version"creates a new version instead.
wait_seconds and Idempotency-Key are supported as query param and header respectively.
Response (200 — job already succeeded):
ingestion_status: "discovered" and is
not searchable until you call POST .../ingestions.
Errors:
path_conflict(409) — File already exists at this path andon_conflict="reject".file_too_large(413) — Upload exceeds the server maximum.
List files
cursor(optional) — Opaque cursor fromnext_cursor.limit(optional, default 50, max 200)
total_count is exact after access filtering. coverage reports how many files were
withheld by the access predicate and which labels would unlock them.
Get file
FileDetail — the File fields above plus:
download_url— Presigned GET URL that saves the file to disk.preview_url— Presigned GET URL that browsers render inline.download_url_expires_at— When both URLs expire.
Get file metadata
Get file output
ArtifactOutputDetail — the output fields above plus download_url, preview_url, download_url_expires_at.
Get artifact content by path
/, Unicode, spaces, and
reserved characters in path are encoded correctly:
path(required) — Exact workspace-relative path of a current source or derivative.
Range(optional) — One byte range, such asbytes=0-1023. A satisfiable range returns206 Partial Content.
Content-Length,
Accept-Ranges: bytes, and an inline Content-Disposition.
Errors:
file_not_found(404) — No current visible artifact or stored bytes exist at the path.range_not_satisfiable(416) — TheRangeheader is malformed, contains multiple ranges, or selects bytes outside the artifact.
List output members
offset(optional, default 0) — Members to skip, for paging a large folder.limit(optional, default 50, max 200)
Get file versions
Replace file
multipart/form-data: bytes in a file part and
optional parameters as JSON-encoded metadata form field. There is no JSON-only path
for labels-only updates — send the new bytes with updated metadata.
Multipart:
metadata form field):
labels(optional) — New labels. Omit to leave existing labels unchanged. Pass{}to clear all.graph_inclusion(optional) — Change this file’s KG inclusion. Omit to leave unchanged.
Job with kind: "file_replace".
Delete file
Job with kind: "file_delete".