Sandbox API

Project memory

Durable per-task turn history (meta, summary, artifacts) and a project digest, scoped to tenant/project. Retained 30 days by default.

Durable per-task turn history (meta, summary, artifacts) and a project digest, scoped to tenant/project. Retained 30 days by default.

Every request needs a credential — see Authentication.

MethodPathSummary
GET/sandbox/memory/v1/project.mdProject digest: one section per task with its latest summary
GET/sandbox/memory/v1/tasksList tasks in project memory (most recently updated first)
DELETE/sandbox/memory/v1/tasks/{task_id}Delete a task's memory (owner, or project_admin and above)
GET/sandbox/memory/v1/tasks/{task_id}Task index: turns, meta, artifact names
GET/sandbox/memory/v1/tasks/{task_id}/turns/{turn}One turn: meta, summary, artifact list
PUT/sandbox/memory/v1/tasks/{task_id}/turns/{turn}Upsert one turn's meta + summary; refreshes the task index and project.md
GET/sandbox/memory/v1/tasks/{task_id}/turns/{turn}/artifacts/{name}Download a turn artifact (stored Content-Type)
PUT/sandbox/memory/v1/tasks/{task_id}/turns/{turn}/artifacts/{name}Store a turn artifact (raw body, Content-Type kept, max 50 MiB)

Common headers

Accepted on every endpoint on this page.

NameInTypeRequiredDescription
x-correlation-idheaderstringnoEnd-to-end correlation id for this eval run. When set, the gateway and downstream services honor it verbatim in logs, Cloud Trace span attributes, async job payloads, and Langfuse trace.id. When omitted, the gateway generates a ULID and echoes it on the response.
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Endpoints

Project digest: one section per task with its latest summary

GET /sandbox/memory/v1/project.md

Responses

StatusDescriptionBody
200Successful Responsestring
422Validation ErrorHTTPValidationError

List tasks in project memory (most recently updated first)

GET /sandbox/memory/v1/tasks

Parameters

NameInTypeRequiredDescription
limitqueryintegerno
cursorquerystring | nullno

Responses

StatusDescriptionBody
200Successful ResponseTaskList
422Validation ErrorHTTPValidationError

Delete a task's memory (owner, or project_admin and above)

DELETE /sandbox/memory/v1/tasks/{task_id}

Parameters

NameInTypeRequiredDescription
task_idpathstringyesTask id: [A-Za-z0-9][A-Za-z0-9._-]{0,127}

Responses

StatusDescriptionBody
204Successful Response—
422Validation ErrorHTTPValidationError

Task index: turns, meta, artifact names

GET /sandbox/memory/v1/tasks/{task_id}

Parameters

NameInTypeRequiredDescription
task_idpathstringyesTask id: [A-Za-z0-9][A-Za-z0-9._-]{0,127}

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

One turn: meta, summary, artifact list

GET /sandbox/memory/v1/tasks/{task_id}/turns/{turn}

Parameters

NameInTypeRequiredDescription
task_idpathstringyesTask id: [A-Za-z0-9][A-Za-z0-9._-]{0,127}
turnpathintegeryesTurn number (stored zero-padded, 0000-9999)

Responses

StatusDescriptionBody
200Successful ResponseTurnRecord
422Validation ErrorHTTPValidationError

Upsert one turn's meta + summary; refreshes the task index and project.md

PUT /sandbox/memory/v1/tasks/{task_id}/turns/{turn}

Parameters

NameInTypeRequiredDescription
task_idpathstringyesTask id: [A-Za-z0-9][A-Za-z0-9._-]{0,127}
turnpathintegeryesTurn number (stored zero-padded, 0000-9999)

Request body

application/json, required — PutTurnRequest

FieldTypeRequiredDescription
metaTurnMetanoRun metadata for one turn. Every field is optional; unknown keys are kept.
summary_mdstringnoMarkdown summary of the turn (max 1 MiB). Default: "".

Responses

StatusDescriptionBody
200Successful ResponseTurnRecord
422Validation ErrorHTTPValidationError

Download a turn artifact (stored Content-Type)

GET /sandbox/memory/v1/tasks/{task_id}/turns/{turn}/artifacts/{name}

Parameters

NameInTypeRequiredDescription
task_idpathstringyesTask id: [A-Za-z0-9][A-Za-z0-9._-]{0,127}
turnpathintegeryesTurn number (stored zero-padded, 0000-9999)
namepathstringyesArtifact name: [A-Za-z0-9._-]{1,128}

Responses

StatusDescriptionBody
200Successful Response—
422Validation ErrorHTTPValidationError

Store a turn artifact (raw body, Content-Type kept, max 50 MiB)

PUT /sandbox/memory/v1/tasks/{task_id}/turns/{turn}/artifacts/{name}

Parameters

NameInTypeRequiredDescription
task_idpathstringyesTask id: [A-Za-z0-9][A-Za-z0-9._-]{0,127}
turnpathintegeryesTurn number (stored zero-padded, 0000-9999)
namepathstringyesArtifact name: [A-Za-z0-9._-]{1,128}

Request body

application/octet-stream, required

Responses

StatusDescriptionBody
200Successful ResponseArtifactRecord
422Validation ErrorHTTPValidationError

Schemas

The object shapes referenced above.

ArtifactRecord

FieldTypeRequiredDescription
namestringyes
content_typestringyes
sizeintegeryes
updated_atstring | nullno
task_idstringyes
turnintegeryes

HTTPValidationError

FieldTypeRequiredDescription
detailValidationError[]no

MemoryArtifact

FieldTypeRequiredDescription
namestringyes
content_typestringyes
sizeintegeryes
updated_atstring | nullno

PutTurnRequest

FieldTypeRequiredDescription
metaTurnMetanoRun metadata for one turn. Every field is optional; unknown keys are kept.
summary_mdstringnoMarkdown summary of the turn (max 1 MiB). Default: "".

TaskList

FieldTypeRequiredDescription
tasksTaskSummary[]yes
totalintegeryes
next_cursorstring | nullnoPass back as ?cursor= for the next page; null at the end.

TaskSummary

FieldTypeRequiredDescription
task_idstringyes
latest_turninteger | nullno
turn_countinteger | nullno
updated_atstring | nullno
retain_untilstring | nullno

TurnMeta

Run metadata for one turn. Every field is optional; unknown keys are kept.

FieldTypeRequiredDescription
agent_idstring | nullno
modelstring | nullno
job_idstring | nullno
sandbox_idstring | nullno
commitstring | nullno
exit_codeinteger | nullno
started_atstring | number | nullnoISO 8601 or epoch
ended_atstring | number | nullnoISO 8601 or epoch
tokensinteger | object | nullno
costnumber | object | nullno
claude_session_idstring | nullno

TurnRecord

FieldTypeRequiredDescription
task_idstringyes
turnintegeryes
metaobjectyes
summary_mdstringyes
artifactsMemoryArtifact[]yes
created_atstring | nullno
updated_atstring | nullno
retain_untilstring | nullno

ValidationError

FieldTypeRequiredDescription
locstring | integer[]yes
msgstringyes
typestringyes
inputanyno
ctxobjectno

Machine-readable spec: OpenAPI YAML.