curl https://win.oneshotagent.com/v1/compute/3f2b9c1e-8d4a-4f6b-9e2a-7c1d5b8a0f42/outputs \
-H "X-Agent-ID: 0xYourWalletAddress" \
-H "x-agent-proof: <base64 EIP-712 proof, scope read>"
const goal = await agent.getComputeGoal(goalId);
console.log(goal.result);
for (const out of await agent.getComputeOutputs(goalId)) {
if (!out.readable) continue;
const { content } = await agent.getComputeOutput(goalId, out.key);
console.log(out.key, content);
}
goal = client.get_compute_goal(goal_id)
print(goal["result"])
for out in client.get_compute_outputs(goal_id):
if out["readable"]:
print(out["key"], client.get_compute_output(goal_id, out["key"])["content"])
{
"success": true,
"data": [
{
"key": "artifacts/b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b/result.txt",
"task_id": "b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b",
"content_type": "text/plain",
"size_bytes": 84,
"summary": "Agent output: result.txt (84 bytes)",
"readable": true,
"updated_at": "2026-01-15T12:06:10.000Z"
}
]
}
{
"success": true,
"data": {
"key": "artifacts/b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b/result.txt",
"task_id": "b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b",
"content_type": "text/plain",
"size_bytes": 84,
"summary": "Agent output: result.txt (84 bytes)",
"readable": true,
"updated_at": "2026-01-15T12:06:10.000Z",
"content": "f6a0dbd5b741d76782253e9be928c53e3a4ab4ab4c60ee7f46c53b704688315f\n2880067194370816120",
"truncated": false
}
}
Compute
Goal Outputs
List and read what a compute goal’s tasks produced
GET
/
v1
/
compute
/
{goalId}
/
outputs
curl https://win.oneshotagent.com/v1/compute/3f2b9c1e-8d4a-4f6b-9e2a-7c1d5b8a0f42/outputs \
-H "X-Agent-ID: 0xYourWalletAddress" \
-H "x-agent-proof: <base64 EIP-712 proof, scope read>"
const goal = await agent.getComputeGoal(goalId);
console.log(goal.result);
for (const out of await agent.getComputeOutputs(goalId)) {
if (!out.readable) continue;
const { content } = await agent.getComputeOutput(goalId, out.key);
console.log(out.key, content);
}
goal = client.get_compute_goal(goal_id)
print(goal["result"])
for out in client.get_compute_outputs(goal_id):
if out["readable"]:
print(out["key"], client.get_compute_output(goal_id, out["key"])["content"])
{
"success": true,
"data": [
{
"key": "artifacts/b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b/result.txt",
"task_id": "b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b",
"content_type": "text/plain",
"size_bytes": 84,
"summary": "Agent output: result.txt (84 bytes)",
"readable": true,
"updated_at": "2026-01-15T12:06:10.000Z"
}
]
}
{
"success": true,
"data": {
"key": "artifacts/b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b/result.txt",
"task_id": "b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b",
"content_type": "text/plain",
"size_bytes": 84,
"summary": "Agent output: result.txt (84 bytes)",
"readable": true,
"updated_at": "2026-01-15T12:06:10.000Z",
"content": "f6a0dbd5b741d76782253e9be928c53e3a4ab4ab4c60ee7f46c53b704688315f\n2880067194370816120",
"truncated": false
}
}
Overview
A goal answers in two places. Its short answer, in the planner’s words, isresult on the status endpoint. What its tasks produced is here: the files a sandbox task left in its output folder, and tool results too large for a task row.
GET /v1/compute/{goalId}/outputslists them.GET /v1/compute/{goalId}/outputs/{key}returns one with its content. The key is a path and keeps its slashes.
awaiting_confirmation.
Authentication
Send your agent wallet address inX-Agent-ID and a signed read proof in x-agent-proof (EIP-712, scope: "read"), or an access token (Authorization: Bearer oneshot_…) instead. A request without a valid proof or token gets 401 proof_required. The OneShot SDK signs and sends the proof automatically. Raw HTTP callers: see Read Proof Authentication.
Only the wallet that created the goal can read its outputs; other callers get a 404.
Path Parameters
string
required
Goal ID (a UUID) from the create endpoint
string
For a read: the full
key of one output, for example artifacts/<task_id>/result.txtResponse
array | object
The list returns an array; a read returns one object. Each output has:
key:artifacts/<task_id>/<file>for a file a sandbox task left,results/<tool>/<task_id>for a large tool resulttask_id: the task that produced it, ornullcontent_type: for exampletext/plainsize_bytes: size of the contentsummary: one line describing it, ornullreadable:falsewhen the content was too large to keep (about 10 KB and over); only the description existsupdated_at: timestamp
content: the text, ornullwhenreadableisfalsetruncated:truewhen the content was cut to 200,000 characters
outputs by key.
curl https://win.oneshotagent.com/v1/compute/3f2b9c1e-8d4a-4f6b-9e2a-7c1d5b8a0f42/outputs \
-H "X-Agent-ID: 0xYourWalletAddress" \
-H "x-agent-proof: <base64 EIP-712 proof, scope read>"
const goal = await agent.getComputeGoal(goalId);
console.log(goal.result);
for (const out of await agent.getComputeOutputs(goalId)) {
if (!out.readable) continue;
const { content } = await agent.getComputeOutput(goalId, out.key);
console.log(out.key, content);
}
goal = client.get_compute_goal(goal_id)
print(goal["result"])
for out in client.get_compute_outputs(goal_id):
if out["readable"]:
print(out["key"], client.get_compute_output(goal_id, out["key"])["content"])
{
"success": true,
"data": [
{
"key": "artifacts/b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b/result.txt",
"task_id": "b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b",
"content_type": "text/plain",
"size_bytes": 84,
"summary": "Agent output: result.txt (84 bytes)",
"readable": true,
"updated_at": "2026-01-15T12:06:10.000Z"
}
]
}
{
"success": true,
"data": {
"key": "artifacts/b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b/result.txt",
"task_id": "b7e4f0a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b",
"content_type": "text/plain",
"size_bytes": 84,
"summary": "Agent output: result.txt (84 bytes)",
"readable": true,
"updated_at": "2026-01-15T12:06:10.000Z",
"content": "f6a0dbd5b741d76782253e9be928c53e3a4ab4ab4c60ee7f46c53b704688315f\n2880067194370816120",
"truncated": false
}
}