Read one Artifact manifest
const url = 'https://example.com/v1/sessions/9f2b7c14-59d3-4f7a-b8e1-2a6c05d4e731/artifacts/9f2b7c14-59d3-4f7a-b8e1-2a6c05d4e731';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/v1/sessions/9f2b7c14-59d3-4f7a-b8e1-2a6c05d4e731/artifacts/9f2b7c14-59d3-4f7a-b8e1-2a6c05d4e731 \ --header 'Authorization: Bearer <token>'Requires wamp.cloud.sessions:read. Reading the manifest is how you decide whether to download: state must be available, and sha256 lets you skip a transfer you already hold, since the bytes for a given id can never change. runId attributes the Artifact to the Run that produced it, and publicationId appears instead on artifacts produced by publishing. An Artifact belonging to another Session is 404 even when the id is valid — authorization is always resolved through the owning Session.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”A UUID identifying one Cloud resource; Session, Turn, Publication and Merge ids are minted by the caller so an ambiguous retry addresses the same durable command instead of creating a second one.
Example
9f2b7c14-59d3-4f7a-b8e1-2a6c05d4e731A UUID you mint and own; it is the idempotency key for creation and the address of every Turn, artifact and publication underneath
A UUID identifying one Cloud resource; Session, Turn, Publication and Merge ids are minted by the caller so an ambiguous retry addresses the same durable command instead of creating a second one.
Example
9f2b7c14-59d3-4f7a-b8e1-2a6c05d4e731The Artifact id assigned by the server and announced in wamp.artifact.created
Responses
Section titled “Responses”Artifact
object
The immutable manifest of one retained Session output. Bytes are never inlined here — fetch them from the artifact content endpoint, which authorizes through the owning Session on every request.
object
Artifact id, also the after cursor value when paging artifacts
Session that owns the artifact and through which access is authorized
Run that produced it; absent on artifacts produced by a Publication rather than a Run
Publication that produced it; set only on github.pull_request artifacts
What this output is: result.summary for a Run’s markdown summary, presented.file for a file the agent chose to present, github.pull_request for the JSON record of a Publication
Always output on this API; internal conversation and workspace checkpoints carry a different role and are filtered from every public path
Media type the content endpoint will serve these bytes with
Exact byte length of the content, matching the Content-Length of the download
Digest of the content, also served as the strong ETag, so unchanged bytes never need to be downloaded twice
available while the bytes are retained; pruned once retention removed them, after which the content endpoint answers 410
Presentation hints only — truncated when the producer had to bound the content, plus fileName, label and description for presented files
object
When the artifact was durably recorded; artifact pages are ordered by this value ascending
Example
{ "artifact": { "id": "b6e0d857-4a19-4f52-9c83-1d7e64a05b2f", "sessionId": "9f2b7c14-59d3-4f7a-b8e1-2a6c05d4e731", "runId": "c47a1e08-3d6b-4a92-9f15-8b70d2e5c6a4", "kind": "result.summary", "role": "output", "contentType": "text/markdown; charset=utf-8", "size": 1843, "sha256": "76100793e5ca92df907f7b13f4d9ff43cc39482e072b800eacaf5fc393ad0269", "state": "available", "metadata": { "truncated": false }, "createdAt": "2026-08-12T09:43:58Z" }}The resource is missing or inaccessible
Failure body returned with every non-2xx JSON response; branch on the machine code, never on prose or on the HTTP status alone.
object
Stable machine code
The installation capability the presented credential lacks, returned with insufficient_scope so an integrator knows exactly which capability to request
Advisory seconds to wait before retrying; returned on rate-limit denials, where the Retry-After header carries the same value
Example
{ "error": "cloud_session_not_found"}