Skip to main content
Do this when an agent produced a file you need — a report, a chart, a transformed dataset. Do not use this to browse workspace or project storage; these endpoints serve one task’s workspace and nothing else. Artifacts survive the sandbox that produced them. They are committed to durable storage before the tool call that created them returns, so a file listed here is a file that exists.

Prerequisites

  • A task id and its agent id.
  • An API key for the workspace that owns the task. A task in another workspace returns 404, not 403.

Steps

1

List what the task produced

path is always tasks/{task_id}/workspace/{relative_path}. download_url is an AgentArea API path, not an object-store URL — it is relative, so prefix it with your API base.Inputs you attached and outputs the agent wrote both appear here. Tell them apart by prefix: attachments land under inputs/attachments/.
2

Download one file

The response streams with Content-Length and a Content-Disposition filename. The body is verified against the stored SHA-256 before the first byte is sent, so a partial or corrupted object fails the request instead of writing a bad file.Or follow the download_url from the listing directly:
3

Download everything

There is no archive endpoint. Loop the listing:

Verify

Confirm the downloaded bytes match what the task committed. The listing’s size is the manifest’s recorded size:
Equal sizes plus a 200 response means the digest check passed on the server — the endpoint does not return a body it could not verify.

Troubleshooting

The agent answered from context without writing files. Only files committed to the task workspace appear here; text in the final response is not an artifact. Read final_response from GET /v1/agents/{agent_id}/tasks/{task_id}/summary instead.
The artifact_path segment must be the full tasks/{task_id}/workspace/... value, repeated after /artifacts/files/ . Passing only the relative tail (out/summary.md) 404s, because the endpoint validates that the first two segments match the task. Copy download_url rather than assembling the path.
Only the tasks/{task_id}/workspace/ subtree is downloadable through this endpoint. Other prefixes under the task return 404 by design.
Copy-out happens when the shell tool returns, and it refuses files over 16 MiB per artifact or beyond the 1 GiB per-task durable budget. A refused copy is reported as an error on that tool result, so check the tool.result events for the call that created it — see Debug a failed task .
Verification reads and hashes the whole object before yielding the first byte, spooling to disk past 8 MiB. Time to first byte scales with file size; this is the integrity guarantee, not a stall.
It does nothing. It is accepted for backwards compatibility; these links are API routes behind normal authorization and do not expire.

Attach files to a task

Upload a file with a checksum-bound presigned PUT

Artifacts

How files an agent produces become durable

Debug a failed task

Read the failure code, narrow it with the task rollup
Last modified on September 17, 2026