Skip to content

Read one Artifact manifest

GET
/v1/sessions/{sessionId}/artifacts/{artifactId}
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.

sessionId
required

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.

string format: uuid
Example
9f2b7c14-59d3-4f7a-b8e1-2a6c05d4e731

A UUID you mint and own; it is the idempotency key for creation and the address of every Turn, artifact and publication underneath

artifactId
required

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.

string format: uuid
Example
9f2b7c14-59d3-4f7a-b8e1-2a6c05d4e731

The Artifact id assigned by the server and announced in wamp.artifact.created

Artifact

Media typeapplication/json
object
artifact
required

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
id
required

Artifact id, also the after cursor value when paging artifacts

string format: uuid
sessionId
required

Session that owns the artifact and through which access is authorized

string format: uuid
runId

Run that produced it; absent on artifacts produced by a Publication rather than a Run

string format: uuid
publicationId

Publication that produced it; set only on github.pull_request artifacts

string format: uuid
kind
required

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

string
role
required

Always output on this API; internal conversation and workspace checkpoints carry a different role and are filtered from every public path

string
contentType
required

Media type the content endpoint will serve these bytes with

string
size
required

Exact byte length of the content, matching the Content-Length of the download

integer
sha256
required

Digest of the content, also served as the strong ETag, so unchanged bytes never need to be downloaded twice

string
/^[a-f0-9]{64}$/
state
required

available while the bytes are retained; pruned once retention removed them, after which the content endpoint answers 410

string
Allowed values: available pruned
metadata

Presentation hints only — truncated when the producer had to bound the content, plus fileName, label and description for presented files

object
truncated
boolean
fileName
string
label
string
description
string
createdAt
required

When the artifact was durably recorded; artifact pages are ordered by this value ascending

string format: date-time
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

Media typeapplication/json

Failure body returned with every non-2xx JSON response; branch on the machine code, never on prose or on the HTTP status alone.

object
error
required

Stable machine code

string
requiredScope

The installation capability the presented credential lacks, returned with insufficient_scope so an integrator knows exactly which capability to request

string
retryAfterSeconds

Advisory seconds to wait before retrying; returned on rate-limit denials, where the Retry-After header carries the same value

integer
>= 1
key
additional properties
any
Example
{
"error": "cloud_session_not_found"
}