Retained results

Explicit immutable output prefixes, independent of volatile execution handles.

Base URL https://app.mandala.computer/api/v1. Every request carries an API key, and failures take the shape under Errors.

POST/computers/{id}/executions/{executionId}/retained-output

Capture a retained output prefixmember+

Explicitly freeze observed background output into a new immutable result. Retrying creates another result; it never executes the command. No automatic capture, Activities record, listing or idempotency key. Accepts an application/json object (including {}) of at most 4096 bytes. The total capture deadline is 60000 milliseconds. Capture starts at independent zero offsets, stops each stream at observed EOF or its requested cap, and stores the wrapper diagnostic once. This is a finite prefix from mutable guest paths, not an atomic snapshot or completion proof. Expiry is measured from capture_started_at. No query parameters or arbitrary metadata are accepted. A lost response may leave a committed result until expiry. Responses are no-store; Location is the relative metadata URL.

Set MANDALA_API_KEY to your bearer key. MANDALA_BASE_URL, when set, is the full API base including /api/v1. Replace the illustrative resource IDs with yours. These pinned 0.16.0 SDK and direct HTTP examples do not read saved device-login credentials. SDK setup first GETs the computer. Python start/stop/suspend/restart also refresh it with another GET; TypeScript refreshes only if the action returns an acknowledgement.

curl

base_url="${MANDALA_BASE_URL:-}"
if [ -z "$base_url" ]; then base_url='https://app.mandala.computer/api/v1'; fi
curl --fail-with-body -X POST "${base_url%/}"'/computers/vm-a1b2c3d4e5f6/executions/exec_a1b2c3d4a1b2c3d4a1b2c3d4a1b2c3d4/retained-output' \
  -H "Authorization: Bearer $MANDALA_API_KEY" \
  -H "Content-Type: application/json" \
  --data-raw '{}'

Python — Mandala SDK 0.16.0

# Python 3.10+: pip install mandala-computer==0.16.0
import os
from mandala_computer import Client

with Client(api_key=os.environ["MANDALA_API_KEY"], base_url=os.environ.get("MANDALA_BASE_URL") or "https://app.mandala.computer/api/v1") as client:
    id = "vm-a1b2c3d4e5f6"
    executionId = "exec_a1b2c3d4a1b2c3d4a1b2c3d4a1b2c3d4"
    c = client.computers.get(id)
    result = c.retain_execution_output(executionId)
    print(result)

TypeScript — Mandala SDK 0.16.0

// Node.js 22+: npm install mandala-computer@0.16.0
import { Client } from "mandala-computer";

const apiKey = process.env.MANDALA_API_KEY;
if (!apiKey) throw new Error("Set MANDALA_API_KEY");
const client = new Client({apiKey, baseUrl: process.env.MANDALA_BASE_URL || "https://app.mandala.computer/api/v1"});
const id = "vm-a1b2c3d4e5f6";
const executionId = "exec_a1b2c3d4a1b2c3d4a1b2c3d4a1b2c3d4";
const c = await client.computers.get(id);
const result = await c.retainExecutionOutput(executionId);
console.log(JSON.stringify(result, null, 2));

201 Illustrative successful response.

HTTP 201
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Location: /api/v1/computers/vm-a1b2c3d4e5f6/results/res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6
Cache-Control: no-store

{
  "version": 1,
  "result_id": "res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6",
  "kind": "background-output",
  "state": "ready",
  "account_id": "acc-d5e6f7a8b9c0d1e2",
  "computer_id": "vm-a1b2c3d4e5f6",
  "workspace_id": null,
  "execution_id": "exec_a1b2c3d4a1b2c3d4a1b2c3d4a1b2c3d4",
  "capture_started_at": "2026-09-16T12:00:00.000Z",
  "captured_at": "2026-09-16T12:00:01.000Z",
  "expires_at": "2026-09-17T12:00:00.000Z",
  "source": "volatile_guest_files",
  "execution_observation": {
    "status": "exited",
    "observed_at": "2026-09-16T12:00:01.000Z",
    "exit_code": 0
  },
  "stdout": {
    "bytes": 20,
    "sha256": "e953dd561c40b036816a668e57812df30c911543f3fb9127ac677a3183d31dde",
    "source_offset": 0,
    "next_source_offset": 20,
    "end_reason": "observed_eof"
  },
  "stderr": {
    "bytes": 0,
    "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "source_offset": 0,
    "next_source_offset": 0,
    "end_reason": "observed_eof"
  },
  "diagnostic": {
    "bytes": 0,
    "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "source": "wrapper",
    "diagnostic_truncated": false
  }
}

401 Platform bearer credential missing.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer

{
  "error": "Authentication required",
  "reason": "missing",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential invalid.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "invalid API key",
  "reason": "invalid",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential revoked.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "API key revoked",
  "reason": "revoked",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

405 Unsupported method on this public path; HEAD returns these headers without a body.

HTTP 405
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Allow: POST, OPTIONS

{
  "error": "method not allowed",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

Path parameters

idrequiredstring

The computer id.

executionIdrequiredstring

The opaque execution_id from a backgrounded exec (exec_ followed by 32 lowercase hex characters).

Request body

max_bytes_per_streaminteger
retention_secondsinteger

Response

Published immutable metadata, never raw output. The original execution remains a separate volatile handle.

Response fields

versionalwaysinteger
result_idalwaysstring
kindalwaysstring
statealwaysstring

Bytes were published, not a statement of task success.

account_idalwaysstring
computer_idalwaysstring
workspace_idalwaysstring or null
execution_idalwaysstring
capture_started_atalwaysstring
captured_atalwaysstring
expires_atalwaysstring
sourcealwaysstring
execution_observationalwaysobject or object
stdoutalwaysRetainedPrefix
stderralwaysRetainedPrefix
diagnosticalwaysobject

Failures

404

The execution or recorded/current computer scope is unavailable.

409

The guest output cannot be read; no result is published (output_unavailable). It carries the host’s reason when it gave one: contention (its guest agent busy with another call) clears by itself.

429

Rate limit or store quota/concurrency capacity; store capacity includes Retry-After:60.

502

The source transfer or finite foundation protocol is invalid.

503

Fresh scope, exclusive store ownership or storage is unavailable.

504

Capture deadline or cancellation; incomplete transfer is not published.

GET/computers/{id}/results/{resultId}

Read retained result metadatamember+

Member-only immutable metadata with recorded scope and fresh daemon computer metadata checks. No guest output, files, execution handle, wake or Activity capture. Retained reads have a 15000 millisecond total deadline. Current host unavailability prevents access even when bytes exist. Missing, expired, deleted and outside-scope results share 404. No query parameters. Reads do not extend expiry and all responses are no-store.

Set MANDALA_API_KEY to your bearer key. MANDALA_BASE_URL, when set, is the full API base including /api/v1. Replace the illustrative resource IDs with yours. These pinned 0.16.0 SDK and direct HTTP examples do not read saved device-login credentials. SDK setup first GETs the computer. Python start/stop/suspend/restart also refresh it with another GET; TypeScript refreshes only if the action returns an acknowledgement.

curl

base_url="${MANDALA_BASE_URL:-}"
if [ -z "$base_url" ]; then base_url='https://app.mandala.computer/api/v1'; fi
curl --fail-with-body "${base_url%/}"'/computers/vm-a1b2c3d4e5f6/results/res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6' \
  -H "Authorization: Bearer $MANDALA_API_KEY"

Python — Mandala SDK 0.16.0

# Python 3.10+: pip install mandala-computer==0.16.0
import os
from mandala_computer import Client

with Client(api_key=os.environ["MANDALA_API_KEY"], base_url=os.environ.get("MANDALA_BASE_URL") or "https://app.mandala.computer/api/v1") as client:
    id = "vm-a1b2c3d4e5f6"
    resultId = "res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6"
    c = client.computers.get(id)
    result = c.result(resultId)
    print(result)

TypeScript — Mandala SDK 0.16.0

// Node.js 22+: npm install mandala-computer@0.16.0
import { Client } from "mandala-computer";

const apiKey = process.env.MANDALA_API_KEY;
if (!apiKey) throw new Error("Set MANDALA_API_KEY");
const client = new Client({apiKey, baseUrl: process.env.MANDALA_BASE_URL || "https://app.mandala.computer/api/v1"});
const id = "vm-a1b2c3d4e5f6";
const resultId = "res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6";
const c = await client.computers.get(id);
const result = await c.result(resultId);
console.log(JSON.stringify(result, null, 2));

200 Illustrative successful response.

HTTP 200
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17

{
  "version": 1,
  "result_id": "res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6",
  "kind": "background-output",
  "state": "ready",
  "account_id": "acc-d5e6f7a8b9c0d1e2",
  "computer_id": "vm-a1b2c3d4e5f6",
  "workspace_id": null,
  "execution_id": "exec_a1b2c3d4a1b2c3d4a1b2c3d4a1b2c3d4",
  "capture_started_at": "2026-09-16T12:00:00.000Z",
  "captured_at": "2026-09-16T12:00:01.000Z",
  "expires_at": "2026-09-17T12:00:00.000Z",
  "source": "volatile_guest_files",
  "execution_observation": {
    "status": "exited",
    "observed_at": "2026-09-16T12:00:01.000Z",
    "exit_code": 0
  },
  "stdout": {
    "bytes": 20,
    "sha256": "e953dd561c40b036816a668e57812df30c911543f3fb9127ac677a3183d31dde",
    "source_offset": 0,
    "next_source_offset": 20,
    "end_reason": "observed_eof"
  },
  "stderr": {
    "bytes": 0,
    "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "source_offset": 0,
    "next_source_offset": 0,
    "end_reason": "observed_eof"
  },
  "diagnostic": {
    "bytes": 0,
    "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "source": "wrapper",
    "diagnostic_truncated": false
  }
}

401 Platform bearer credential missing.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer

{
  "error": "Authentication required",
  "reason": "missing",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential invalid.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "invalid API key",
  "reason": "invalid",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential revoked.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "API key revoked",
  "reason": "revoked",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

405 Unsupported method on this public path; HEAD returns these headers without a body.

HTTP 405
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Allow: GET, HEAD, DELETE, OPTIONS

{
  "error": "method not allowed",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

Path parameters

idrequiredstring

The computer id.

resultIdrequiredstring

A result_id from a retained exec (res_ followed by 32 lowercase hex characters).

Response

Finite recorded metadata. Digest identifies the bytes hashed at capture; bounded reads validate file type and size without rehashing the entire object.

Response fields

versionalwaysinteger
result_idalwaysstring
kindalwaysstring
statealwaysstring

Bytes were published, not a statement of task success.

account_idalwaysstring
computer_idalwaysstring
workspace_idalwaysstring or null
execution_idalwaysstring
capture_started_atalwaysstring
captured_atalwaysstring
expires_atalwaysstring
sourcealwaysstring
execution_observationalwaysobject or object
stdoutalwaysRetainedPrefix
stderralwaysRetainedPrefix
diagnosticalwaysobject

Failures

429

Also result_capacity with Retry-After: 60 when 4 reads of retained results and artifacts are already in flight for this account, or 32 across the platform; a read is refused rather than queued.

503

Current scope or local backing storage cannot be verified; never an empty ready result. A read that ran out of time can be sent again. But when a stored file or its record fails its check, or the file cannot be read, the result is withdrawn as this answer is given, if storage can record that: later reads and deletes answer 404. So retry this result first, and capture a new one only if the retry answers 404.

POST/computers/{id}/artifacts

Publish a nominated immutable artifactmember+

Explicitly capture one nominated guest file into immutable private retained storage. Accepts at most 32768 bytes of application/json and a 60000 millisecond control-plane deadline. The computer must already be running: one source file GET uses no_wake=1 and may touch guest activity. No automatic capture, shell, directory scan, Range assembly or retry on another host. Exact transferred bytes must match expected_size and expected_sha256; no prefix success. A live path may change or follow symlinks; digest matching is not an atomic snapshot or proof of who created a file. Optional execution_id must currently resolve on the same computer and recorded scope; its caller_selected association does not prove creation. Retrying creates another version; no listing or idempotency key. created_at is final publication time; expiry starts at reservation and never renews on reads. All routes require member and refuse suspended accounts. Artifacts and retained output share one store quota: at most 128 MiB and 256 objects per computer, 512 MiB and 2000 objects per account, and 2 captures in progress per account. An artifact is charged at expected_size from reservation; a retained-output capture at twice max_bytes_per_stream, plus the diagnostic for background output. Deleted objects stay charged until physical cleanup. Past any limit, or when the platform store is full, the answer is 429 result_capacity with Retry-After: 60. No query parameters or caller metadata. A verified execution association may add a passive result link to its existing activity. Responses are no-store with a relative Location. Daemon guest transfer can outlive control-plane cancellation.

Set MANDALA_API_KEY to your bearer key. MANDALA_BASE_URL, when set, is the full API base including /api/v1. Replace the illustrative resource IDs with yours. These pinned 0.16.0 SDK and direct HTTP examples do not read saved device-login credentials. SDK setup first GETs the computer. Python start/stop/suspend/restart also refresh it with another GET; TypeScript refreshes only if the action returns an acknowledgement. Prerequisite: /tmp/report.bin on the guest contains exactly Hello from Mandala. followed by one LF (20 bytes). The shown size and SHA-256 are calculated from those exact bytes. For another file calculate both from its actual bytes before publication.

curl

base_url="${MANDALA_BASE_URL:-}"
if [ -z "$base_url" ]; then base_url='https://app.mandala.computer/api/v1'; fi
curl --fail-with-body -X POST "${base_url%/}"'/computers/vm-a1b2c3d4e5f6/artifacts' \
  -H "Authorization: Bearer $MANDALA_API_KEY" \
  -H "Content-Type: application/json" \
  --data-raw '{"path":"/tmp/report.bin","expected_size":20,"expected_sha256":"e953dd561c40b036816a668e57812df30c911543f3fb9127ac677a3183d31dde"}'

Python — Mandala SDK 0.16.0

# Python 3.10+: pip install mandala-computer==0.16.0
import json, os
from mandala_computer import Client

with Client(api_key=os.environ["MANDALA_API_KEY"], base_url=os.environ.get("MANDALA_BASE_URL") or "https://app.mandala.computer/api/v1") as client:
    id = "vm-a1b2c3d4e5f6"
    body = json.loads("{\"path\":\"/tmp/report.bin\",\"expected_size\":20,\"expected_sha256\":\"e953dd561c40b036816a668e57812df30c911543f3fb9127ac677a3183d31dde\"}")
    c = client.computers.get(id)
    result = c.publish_artifact(body["path"], expected_size=body["expected_size"], expected_sha256=body["expected_sha256"])
    print(result)

TypeScript — Mandala SDK 0.16.0

// Node.js 22+: npm install mandala-computer@0.16.0
import { Client } from "mandala-computer";

const apiKey = process.env.MANDALA_API_KEY;
if (!apiKey) throw new Error("Set MANDALA_API_KEY");
const client = new Client({apiKey, baseUrl: process.env.MANDALA_BASE_URL || "https://app.mandala.computer/api/v1"});
const id = "vm-a1b2c3d4e5f6";
const body = {"path":"/tmp/report.bin","expected_size":20,"expected_sha256":"e953dd561c40b036816a668e57812df30c911543f3fb9127ac677a3183d31dde"};
const c = await client.computers.get(id);
const result = await c.publishArtifact(body.path, {expectedSize: body.expected_size, expectedSha256: body.expected_sha256});
console.log(JSON.stringify(result, null, 2));

201 Illustrative successful response.

HTTP 201
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Location: /api/v1/computers/vm-a1b2c3d4e5f6/artifacts/art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5
Cache-Control: no-store

{
  "artifact_id": "art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5",
  "kind": "artifact",
  "state": "ready",
  "computer_id": "vm-a1b2c3d4e5f6",
  "workspace_id": null,
  "created_at": "2026-09-16T12:00:00.000Z",
  "expires_at": "2026-09-17T12:00:00.000Z",
  "size": 20,
  "sha256": "e953dd561c40b036816a668e57812df30c911543f3fb9127ac677a3183d31dde",
  "execution_association": null
}

401 Platform bearer credential missing.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer

{
  "error": "Authentication required",
  "reason": "missing",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential invalid.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "invalid API key",
  "reason": "invalid",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential revoked.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "API key revoked",
  "reason": "revoked",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

405 Unsupported method on this public path; HEAD returns these headers without a body.

HTTP 405
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Allow: POST, OPTIONS

{
  "error": "method not allowed",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

Path parameters

idrequiredstring

The computer id.

Request body

pathrequiredstring

Exact OS-absolute guest path, at most 4096 UTF-8 bytes, valid Unicode with no controls/DEL. Spaces and Linux backslashes are preserved.

expected_sizerequiredinteger
expected_sha256requiredstring
execution_idstring
max_bytesinteger

Expected size must not exceed this cap. Larger files require explicit opt-in above the default.

retention_secondsinteger

Response

Finite immutable artifact metadata, without source path, account attribution, command or raw content.

Response fields

artifact_idalwaysstring
kindalwaysstring
statealwaysstring
computer_idalwaysstring
workspace_idalwaysstring or null
created_atalwaysstring
expires_atalwaysstring
sizealwaysinteger
sha256alwaysstring
execution_associationalwaysnull or object

Failures

404

The source computer or the nominated guest file is unavailable (artifact_unavailable), or the execution_id does not resolve on this computer and scope (execution_unavailable).

409

The computer is not running or the source cannot be read now (artifact_source_unavailable), or the transferred size/digest differs from the nomination (artifact_mismatch). artifact_source_unavailable carries the host’s reason when it gave one: contention (its guest agent busy with another call, a suspend or move in flight) clears by itself, and unavailable means the computer is not running.

413

The body is over 32768 bytes (capture_request_too_large), or expected_size exceeds max_bytes, or the guest file is larger than the 64 MiB one guest file transfer carries (artifact_too_large). A file larger than expected_size but within that ceiling is a 409 artifact_mismatch instead.

429

Rate or shared retained quota/concurrency limit; store capacity is result_capacity, with Retry-After:60.

502

Invalid or failed source transport (capture_source_invalid).

503

Current scope (scope_unavailable) or private store (result_store_unavailable) unavailable.

504

Capture deadline or cancellation (artifact_timeout); no incomplete object is published.

GET/computers/{id}/artifacts/{artifactId}

Read immutable artifact metadatamember+

Member-only retained metadata with original credential and fresh exact computer scope checks; a 15000 millisecond total deadline. No source path, execution handle, guest agent, wake or Activity capture. Stopped computers remain readable through daemon metadata; current host outage prevents access even when retained bytes exist. Unknown, foreign, expired and deleted artifacts share 404. Corrupt/missing retained files are unavailable, never empty success or a live fallback. No query parameters; no-store; expiry never renews.

Set MANDALA_API_KEY to your bearer key. MANDALA_BASE_URL, when set, is the full API base including /api/v1. Replace the illustrative resource IDs with yours. These pinned 0.16.0 SDK and direct HTTP examples do not read saved device-login credentials. SDK setup first GETs the computer. Python start/stop/suspend/restart also refresh it with another GET; TypeScript refreshes only if the action returns an acknowledgement.

curl

base_url="${MANDALA_BASE_URL:-}"
if [ -z "$base_url" ]; then base_url='https://app.mandala.computer/api/v1'; fi
curl --fail-with-body "${base_url%/}"'/computers/vm-a1b2c3d4e5f6/artifacts/art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5' \
  -H "Authorization: Bearer $MANDALA_API_KEY"

Python — Mandala SDK 0.16.0

# Python 3.10+: pip install mandala-computer==0.16.0
import os
from mandala_computer import Client

with Client(api_key=os.environ["MANDALA_API_KEY"], base_url=os.environ.get("MANDALA_BASE_URL") or "https://app.mandala.computer/api/v1") as client:
    id = "vm-a1b2c3d4e5f6"
    artifactId = "art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5"
    c = client.computers.get(id)
    result = c.artifact(artifactId)
    print(result)

TypeScript — Mandala SDK 0.16.0

// Node.js 22+: npm install mandala-computer@0.16.0
import { Client } from "mandala-computer";

const apiKey = process.env.MANDALA_API_KEY;
if (!apiKey) throw new Error("Set MANDALA_API_KEY");
const client = new Client({apiKey, baseUrl: process.env.MANDALA_BASE_URL || "https://app.mandala.computer/api/v1"});
const id = "vm-a1b2c3d4e5f6";
const artifactId = "art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5";
const c = await client.computers.get(id);
const result = await c.artifact(artifactId);
console.log(JSON.stringify(result, null, 2));

200 Illustrative successful response.

HTTP 200
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Cache-Control: no-store

{
  "artifact_id": "art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5",
  "kind": "artifact",
  "state": "ready",
  "computer_id": "vm-a1b2c3d4e5f6",
  "workspace_id": null,
  "created_at": "2026-09-16T12:00:00.000Z",
  "expires_at": "2026-09-17T12:00:00.000Z",
  "size": 20,
  "sha256": "e953dd561c40b036816a668e57812df30c911543f3fb9127ac677a3183d31dde",
  "execution_association": null
}

401 Platform bearer credential missing.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer

{
  "error": "Authentication required",
  "reason": "missing",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential invalid.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "invalid API key",
  "reason": "invalid",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential revoked.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "API key revoked",
  "reason": "revoked",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

405 Unsupported method on this public path; HEAD returns these headers without a body.

HTTP 405
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Allow: GET, HEAD, DELETE, OPTIONS

{
  "error": "method not allowed",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

Path parameters

idrequiredstring

The computer id.

artifactIdrequiredstring

An artifact_id from POST /computers/{id}/artifacts (art_ followed by 32 lowercase hex characters).

Response

The immutable manifest. Digest identifies capture bytes; reads verify file type/layout/size without a full checksum scan.

Response fields

artifact_idalwaysstring
kindalwaysstring
statealwaysstring
computer_idalwaysstring
workspace_idalwaysstring or null
created_atalwaysstring
expires_atalwaysstring
sizealwaysinteger
sha256alwaysstring
execution_associationalwaysnull or object

Failures

429

Also result_capacity with Retry-After: 60 when 4 reads of retained results and artifacts are already in flight for this account, or 32 across the platform; a read is refused rather than queued.

503

Current scope or local backing storage cannot be verified; never an empty success. But when a stored file or its record fails its check, or the file cannot be read, the artifact is withdrawn as this answer is given, if storage can record that: later reads and deletes answer 404. So retry this artifact first, and capture a new one only if the retry answers 404.

GET/computers/{id}/artifacts/{artifactId}/download

Download immutable artifact bytesmember+

Full retained binary download, at most 67108864 bytes with a 60000 millisecond overall budget. No guest or execution calls. Shared read slots/pins remain held through stream and pending local I/O completion. Backpressure queues at most one 64-KiB payload chunk. Original authority and current row/generation/expiry are checked before enqueue; fresh exact computer scope is required after one second or one MiB, whichever first. Revocation cannot retract already delivered or queued bytes. Errors after headers terminate the stream; a chunk that fails its check or cannot be read also withdraws the artifact, if storage can record that: retry it, and capture a new one only if the retry answers 404. Content-Length is exact, Content-Disposition is a generated art_<hex>.bin attachment, with nosniff, no-store and Accept-Ranges:none. Incoming Range is ignored with a full 200 response. No query parameters.

Set MANDALA_API_KEY to your bearer key. MANDALA_BASE_URL, when set, is the full API base including /api/v1. Replace the illustrative resource IDs with yours. These pinned 0.16.0 SDK and direct HTTP examples do not read saved device-login credentials. SDK setup first GETs the computer. Python start/stop/suspend/restart also refresh it with another GET; TypeScript refreshes only if the action returns an acknowledgement.

curl

base_url="${MANDALA_BASE_URL:-}"
if [ -z "$base_url" ]; then base_url='https://app.mandala.computer/api/v1'; fi
curl --fail-with-body "${base_url%/}"'/computers/vm-a1b2c3d4e5f6/artifacts/art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5/download' \
  -H "Authorization: Bearer $MANDALA_API_KEY" \
  -o download.bin

Python — Mandala SDK 0.16.0

# Python 3.10+: pip install mandala-computer==0.16.0
import os
from pathlib import Path
from mandala_computer import Client

with Client(api_key=os.environ["MANDALA_API_KEY"], base_url=os.environ.get("MANDALA_BASE_URL") or "https://app.mandala.computer/api/v1") as client:
    id = "vm-a1b2c3d4e5f6"
    artifactId = "art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5"
    c = client.computers.get(id)
    result = c.download_artifact(artifactId, max_bytes=64 * 1024 * 1024)
    Path("download.bin").write_bytes(result)

TypeScript — Mandala SDK 0.16.0

// Node.js 22+: npm install mandala-computer@0.16.0
import { Client } from "mandala-computer";
import { writeFile } from "node:fs/promises";

const apiKey = process.env.MANDALA_API_KEY;
if (!apiKey) throw new Error("Set MANDALA_API_KEY");
const client = new Client({apiKey, baseUrl: process.env.MANDALA_BASE_URL || "https://app.mandala.computer/api/v1"});
const id = "vm-a1b2c3d4e5f6";
const artifactId = "art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5";
const c = await client.computers.get(id);
const result = await c.downloadArtifact(artifactId, {maxBytes: 64 * 1024 * 1024});
await writeFile("download.bin", result);

200 Raw retained artifact bytes, including final LF.

HTTP 200
Content-Type: application/octet-stream
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Content-Length: 20
Content-Disposition: attachment; filename="art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5.bin"
Accept-Ranges: none
Cache-Control: no-store
X-Content-Type-Options: nosniff

Raw bytes (UTF-8 shown literally; includes any final newline):
Hello from Mandala.

401 Platform bearer credential missing.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer

{
  "error": "Authentication required",
  "reason": "missing",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential invalid.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "invalid API key",
  "reason": "invalid",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential revoked.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "API key revoked",
  "reason": "revoked",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

405 Unsupported method on this public path; HEAD returns these headers without a body.

HTTP 405
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Allow: GET, HEAD, OPTIONS

{
  "error": "method not allowed",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

Path parameters

idrequiredstring

The computer id.

artifactIdrequiredstring

An artifact_id from POST /computers/{id}/artifacts (art_ followed by 32 lowercase hex characters).

Response

Raw immutable bytes, never base64 or an inline preview.

Failures

429

Also result_capacity with Retry-After: 60 when 4 reads of retained results and artifacts are already in flight for this account, or 32 across the platform; a read is refused rather than queued.

503

Current scope or local backing storage cannot be verified; never an empty success. But when a stored file or its record fails its check, or the file cannot be read, the artifact is withdrawn as this answer is given, if storage can record that: later reads and deletes answer 404. So retry this artifact first, and capture a new one only if the retry answers 404.

DELETE/computers/{id}/artifacts/{artifactId}

Delete an immutable artifactmember+

Member-only durable tombstone after original credential and fresh recorded/current computer scope checks. No guest calls, body or query. Repeated deletes and reads return 404. Physical cleanup remains charged until descriptors and files are removed. Suspended accounts are refused; no-store.

Set MANDALA_API_KEY to your bearer key. MANDALA_BASE_URL, when set, is the full API base including /api/v1. Replace the illustrative resource IDs with yours. These pinned 0.16.0 SDK and direct HTTP examples do not read saved device-login credentials. SDK setup first GETs the computer. Python start/stop/suspend/restart also refresh it with another GET; TypeScript refreshes only if the action returns an acknowledgement.

curl

base_url="${MANDALA_BASE_URL:-}"
if [ -z "$base_url" ]; then base_url='https://app.mandala.computer/api/v1'; fi
curl --fail-with-body -X DELETE "${base_url%/}"'/computers/vm-a1b2c3d4e5f6/artifacts/art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5' \
  -H "Authorization: Bearer $MANDALA_API_KEY"

Python — Mandala SDK 0.16.0

# Python 3.10+: pip install mandala-computer==0.16.0
import os
from mandala_computer import Client

with Client(api_key=os.environ["MANDALA_API_KEY"], base_url=os.environ.get("MANDALA_BASE_URL") or "https://app.mandala.computer/api/v1") as client:
    id = "vm-a1b2c3d4e5f6"
    artifactId = "art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5"
    c = client.computers.get(id)
    result = c.delete_artifact(artifactId)
    print(result)

TypeScript — Mandala SDK 0.16.0

// Node.js 22+: npm install mandala-computer@0.16.0
import { Client } from "mandala-computer";

const apiKey = process.env.MANDALA_API_KEY;
if (!apiKey) throw new Error("Set MANDALA_API_KEY");
const client = new Client({apiKey, baseUrl: process.env.MANDALA_BASE_URL || "https://app.mandala.computer/api/v1"});
const id = "vm-a1b2c3d4e5f6";
const artifactId = "art_b2c3d4e5b2c3d4e5b2c3d4e5b2c3d4e5";
const c = await client.computers.get(id);
const result = await c.deleteArtifact(artifactId);
console.log(JSON.stringify(result, null, 2));

204 204 No Content

HTTP 204 No Content
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Cache-Control: no-store

401 Platform bearer credential missing.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer

{
  "error": "Authentication required",
  "reason": "missing",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential invalid.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "invalid API key",
  "reason": "invalid",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential revoked.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "API key revoked",
  "reason": "revoked",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

405 Unsupported method on this public path; HEAD returns these headers without a body.

HTTP 405
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Allow: GET, HEAD, DELETE, OPTIONS

{
  "error": "method not allowed",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

Path parameters

idrequiredstring

The computer id.

artifactIdrequiredstring

An artifact_id from POST /computers/{id}/artifacts (art_ followed by 32 lowercase hex characters).

Response

No response body; later artifact reads are unavailable.

Failures

429

Also result_capacity with Retry-After: 60 when 4 reads of retained results and artifacts are already in flight for this account, or 32 across the platform; a read is refused rather than queued.

503

Current scope or local backing storage cannot be verified, and the artifact may be left in place: send the delete again until it answers 204 or 404. When its stored record failed its check, the artifact is withdrawn as this answer is given if storage can record that, and the resend answers 404.

GET/computers/{id}/results/{resultId}/output

Read an independent retained byte rangemember+

One bounded raw byte range from immutable control-plane storage, with fresh authorization before and after the read. No guest or execution-handle calls. Independent retries never consume a cursor or change expiry. At or beyond retained EOF the body is empty, next offset is unchanged and EOF is true. Unknown or duplicate query parameters and unsafe offset+limit are refused. Range headers are not supported. Response headers: X-Result-Offset (requested byte offset), X-Result-Next-Offset (offset plus returned bytes), X-Result-EOF (true or false for the retained stream), exact Content-Length, attachment Content-Disposition with a generated filename, nosniff and no-store.

Set MANDALA_API_KEY to your bearer key. MANDALA_BASE_URL, when set, is the full API base including /api/v1. Replace the illustrative resource IDs with yours. These pinned 0.16.0 SDK and direct HTTP examples do not read saved device-login credentials. SDK setup first GETs the computer. Python start/stop/suspend/restart also refresh it with another GET; TypeScript refreshes only if the action returns an acknowledgement.

curl

base_url="${MANDALA_BASE_URL:-}"
if [ -z "$base_url" ]; then base_url='https://app.mandala.computer/api/v1'; fi
curl --fail-with-body "${base_url%/}"'/computers/vm-a1b2c3d4e5f6/results/res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6/output?stream=stdout&offset=0' \
  -H "Authorization: Bearer $MANDALA_API_KEY" \
  -o download.bin

Python — Mandala SDK 0.16.0

# Python 3.10+: pip install mandala-computer==0.16.0
import os
from pathlib import Path
from mandala_computer import Client

with Client(api_key=os.environ["MANDALA_API_KEY"], base_url=os.environ.get("MANDALA_BASE_URL") or "https://app.mandala.computer/api/v1") as client:
    id = "vm-a1b2c3d4e5f6"
    resultId = "res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6"
    query = {"stream":"stdout","offset":"0"}
    c = client.computers.get(id)
    result = c.result_output(resultId, stream=query["stream"], offset=int(query["offset"]))
    Path("download.bin").write_bytes(result.data)

TypeScript — Mandala SDK 0.16.0

// Node.js 22+: npm install mandala-computer@0.16.0
import { Client } from "mandala-computer";
import { writeFile } from "node:fs/promises";

const apiKey = process.env.MANDALA_API_KEY;
if (!apiKey) throw new Error("Set MANDALA_API_KEY");
const client = new Client({apiKey, baseUrl: process.env.MANDALA_BASE_URL || "https://app.mandala.computer/api/v1"});
const id = "vm-a1b2c3d4e5f6";
const resultId = "res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6";
const query = {"stream":"stdout","offset":"0"};
const c = await client.computers.get(id);
const result = await c.resultOutput(resultId, {stream: "stdout", offset: Number(query.offset)});
await writeFile("download.bin", result.bytes);

200 Raw retained stdout prefix bytes for stream=stdout&offset=0.

HTTP 200
Content-Type: application/octet-stream
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
X-Result-Offset: 0
X-Result-Next-Offset: 20
X-Result-EOF: true
Content-Length: 20
Content-Disposition: attachment; filename="res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6.stdout.bin"
Cache-Control: no-store
X-Content-Type-Options: nosniff

Raw bytes (UTF-8 shown literally; includes any final newline):
Hello from Mandala.

401 Platform bearer credential missing.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer

{
  "error": "Authentication required",
  "reason": "missing",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential invalid.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "invalid API key",
  "reason": "invalid",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential revoked.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "API key revoked",
  "reason": "revoked",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

405 Unsupported method on this public path; HEAD returns these headers without a body.

HTTP 405
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Allow: GET, HEAD, OPTIONS

{
  "error": "method not allowed",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

Path parameters

idrequiredstring

The computer id.

resultIdrequiredstring

A result_id from a retained exec (res_ followed by 32 lowercase hex characters).

Query parameters

streamrequiredstring

The retained stream to read. Synchronous output has no diagnostic; requesting it returns result_stream_unavailable 409.

offsetrequiredinteger

Explicit nonnegative decimal byte offset; offset plus limit must be a safe integer.

limitinteger

Maximum response bytes.

Response

Raw bytes, never base64. EOF describes the retained prefix only.

Failures

429

Also result_capacity with Retry-After: 60 when 4 reads of retained results and artifacts are already in flight for this account, or 32 across the platform; a read is refused rather than queued.

503

Current scope or local backing storage cannot be verified; never an empty ready result. A read that ran out of time can be sent again. But when a stored file or its record fails its check, or the file cannot be read, the result is withdrawn as this answer is given, if storage can record that: later reads and deletes answer 404. So retry this result first, and capture a new one only if the retry answers 404.

DELETE/computers/{id}/results/{resultId}

Delete a retained resultmember+

Member-only logical deletion after recorded and fresh current scope checks. No body or query. Later reads and repeated deletes return 404. Physical cleanup is bounded and remains charged until confirmed removal. No guest work; host outage returns unavailable rather than guessing access. Responses are no-store.

Set MANDALA_API_KEY to your bearer key. MANDALA_BASE_URL, when set, is the full API base including /api/v1. Replace the illustrative resource IDs with yours. These pinned 0.16.0 SDK and direct HTTP examples do not read saved device-login credentials. SDK setup first GETs the computer. Python start/stop/suspend/restart also refresh it with another GET; TypeScript refreshes only if the action returns an acknowledgement.

curl

base_url="${MANDALA_BASE_URL:-}"
if [ -z "$base_url" ]; then base_url='https://app.mandala.computer/api/v1'; fi
curl --fail-with-body -X DELETE "${base_url%/}"'/computers/vm-a1b2c3d4e5f6/results/res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6' \
  -H "Authorization: Bearer $MANDALA_API_KEY"

Python — Mandala SDK 0.16.0

# Python 3.10+: pip install mandala-computer==0.16.0
import os
from mandala_computer import Client

with Client(api_key=os.environ["MANDALA_API_KEY"], base_url=os.environ.get("MANDALA_BASE_URL") or "https://app.mandala.computer/api/v1") as client:
    id = "vm-a1b2c3d4e5f6"
    resultId = "res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6"
    c = client.computers.get(id)
    result = c.delete_result(resultId)
    print(result)

TypeScript — Mandala SDK 0.16.0

// Node.js 22+: npm install mandala-computer@0.16.0
import { Client } from "mandala-computer";

const apiKey = process.env.MANDALA_API_KEY;
if (!apiKey) throw new Error("Set MANDALA_API_KEY");
const client = new Client({apiKey, baseUrl: process.env.MANDALA_BASE_URL || "https://app.mandala.computer/api/v1"});
const id = "vm-a1b2c3d4e5f6";
const resultId = "res_c3d4e5f6c3d4e5f6c3d4e5f6c3d4e5f6";
const c = await client.computers.get(id);
const result = await c.deleteResult(resultId);
console.log(JSON.stringify(result, null, 2));

204 204 No Content

HTTP 204 No Content
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Cache-Control: no-store

401 Platform bearer credential missing.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer

{
  "error": "Authentication required",
  "reason": "missing",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential invalid.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "invalid API key",
  "reason": "invalid",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

401 Platform bearer credential revoked.

HTTP 401
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
WWW-Authenticate: Bearer error="invalid_token"

{
  "error": "API key revoked",
  "reason": "revoked",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

405 Unsupported method on this public path; HEAD returns these headers without a body.

HTTP 405
Content-Type: application/json
X-Request-ID: 3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17
Allow: GET, HEAD, DELETE, OPTIONS

{
  "error": "method not allowed",
  "request_id": "3f2c9a1e-7b4d-4e8a-9c61-0d5f2b8e4a17"
}

Path parameters

idrequiredstring

The computer id.

resultIdrequiredstring

A result_id from a retained exec (res_ followed by 32 lowercase hex characters).

Response

No response body; the result is logically unavailable.

Failures

429

Also result_capacity with Retry-After: 60 when 4 reads of retained results and artifacts are already in flight for this account, or 32 across the platform; a read is refused rather than queued.

503

Current scope or local backing storage cannot be verified, and the result may be left in place: send the delete again until it answers 204 or 404. When its stored record failed its check, the result is withdrawn as this answer is given if storage can record that, and the resend answers 404.