Skip to content

Labs

Lab documents, versions, notes, jobs, artifacts, and the workers that run jobs.

OperationRequest
Get agent lab documentsGET /v1/labs/agent/documents
Post agent lab documentsPOST /v1/labs/agent/documents
Get agent lab documents idGET /v1/labs/agent/documents/{id}
Put agent lab documents idPUT /v1/labs/agent/documents/{id}
Delete agent lab documents idDELETE /v1/labs/agent/documents/{id}
Post agent lab documents id jobsPOST /v1/labs/agent/documents/{id}/jobs
Post agent lab documents id promotePOST /v1/labs/agent/documents/{id}/promote
Get agent lab hostsGET /v1/labs/agent/hosts
Post agent lab hostsPOST /v1/labs/agent/hosts
Get agent lab jobsGET /v1/labs/agent/jobs
Get agent lab jobs idGET /v1/labs/agent/jobs/{id}
Post agent lab jobs id actionsPOST /v1/labs/agent/jobs/{id}/actions
Post agent lab jobs id hostPOST /v1/labs/agent/jobs/{id}/host
Get agent lab kindsGET /v1/labs/agent/kinds
Get lab artifactGET /v1/labs/artifacts/{id}
Read lab artifactGET /v1/labs/artifacts/{id}/content
List lab documentsGET /v1/labs/documents
Create lab documentPOST /v1/labs/documents
Get lab documentGET /v1/labs/documents/{id}
Delete lab documentDELETE /v1/labs/documents/{id}
Read lab eventsGET /v1/labs/documents/{id}/events
List lab notesGET /v1/labs/documents/{id}/notes
Add lab notePOST /v1/labs/documents/{id}/notes
List lab versionsGET /v1/labs/documents/{id}/versions
Create lab versionPOST /v1/labs/documents/{id}/versions
Get lab versionGET /v1/labs/documents/{id}/versions/{n}
Get lab cardGET /v1/labs/documents/{id}/versions/{n}/card
List lab jobsGET /v1/labs/jobs
Create lab jobPOST /v1/labs/jobs
Get lab jobGET /v1/labs/jobs/{id}
Cancel lab jobDELETE /v1/labs/jobs/{id}
Get lab job usageGET /v1/labs/jobs/{id}/usage
List lab kindsGET /v1/labs/kinds
List lab toolsGET /v1/labs/kinds/{kind}/tools
Call lab toolPOST /v1/labs/kinds/{kind}/tools/{name}
Upload lab sourcePOST /v1/labs/uploads
Enroll lab workerPOST /v1/labs/workers
Finish lab worker jobPOST /v1/labs/workers/finish
Heartbeat lab worker jobPOST /v1/labs/workers/heartbeat
List lab worker inputsPOST /v1/labs/workers/inputs
Read lab worker inputPOST /v1/labs/workers/inputs/file
Poll lab workerPOST /v1/labs/workers/poll
Start lab worker jobPOST /v1/labs/workers/start
Revoke lab workerDELETE /v1/labs/workers/{id}

Get agent lab documents

GET /v1/labs/agent/documents · getAgentLabDocuments

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
afterquerystringNo
hostquerystringNo

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl 'https://api.openagents.com/v1/labs/agent/documents' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Post agent lab documents

POST /v1/labs/agent/documents · postAgentLabDocuments

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Request body

Content type: application/json

Type: object

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl -X POST 'https://api.openagents.com/v1/labs/agent/documents' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

Get agent lab documents id

GET /v1/labs/agent/documents/{id} · getAgentLabDocumentsId

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl 'https://api.openagents.com/v1/labs/agent/documents/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Put agent lab documents id

PUT /v1/labs/agent/documents/{id} · putAgentLabDocumentsId

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

Content type: application/json

Type: object

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl -X PUT 'https://api.openagents.com/v1/labs/agent/documents/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

Delete agent lab documents id

DELETE /v1/labs/agent/documents/{id} · deleteAgentLabDocumentsId

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

Content type: application/json

Type: object

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl -X DELETE 'https://api.openagents.com/v1/labs/agent/documents/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

In the Rust SDK

Post agent lab documents id jobs

POST /v1/labs/agent/documents/{id}/jobs · postAgentLabDocumentsIdJobs

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

Content type: application/json

Type: object

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl -X POST 'https://api.openagents.com/v1/labs/agent/documents/{id}/jobs' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

In the Rust SDK

Post agent lab documents id promote

POST /v1/labs/agent/documents/{id}/promote · postAgentLabDocumentsIdPromote

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

Content type: application/json

Type: object

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl -X POST 'https://api.openagents.com/v1/labs/agent/documents/{id}/promote' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

In the Rust SDK

Get agent lab hosts

GET /v1/labs/agent/hosts · getAgentLabHosts

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl 'https://api.openagents.com/v1/labs/agent/hosts' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Post agent lab hosts

POST /v1/labs/agent/hosts · postAgentLabHosts

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Request body

Content type: application/json

Type: object

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl -X POST 'https://api.openagents.com/v1/labs/agent/hosts' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

In the Rust SDK

Get agent lab jobs

GET /v1/labs/agent/jobs · getAgentLabJobs

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
afterquerystringNo
hostquerystringNo

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl 'https://api.openagents.com/v1/labs/agent/jobs' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Get agent lab jobs id

GET /v1/labs/agent/jobs/{id} · getAgentLabJobsId

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl 'https://api.openagents.com/v1/labs/agent/jobs/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Post agent lab jobs id actions

POST /v1/labs/agent/jobs/{id}/actions · postAgentLabJobsIdActions

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

Content type: application/json

Type: object

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl -X POST 'https://api.openagents.com/v1/labs/agent/jobs/{id}/actions' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

In the Rust SDK

Post agent lab jobs id host

POST /v1/labs/agent/jobs/{id}/host · postAgentLabJobsIdHost

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

Content type: application/json

Type: object

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl -X POST 'https://api.openagents.com/v1/labs/agent/jobs/{id}/host' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

In the Rust SDK

Get agent lab kinds

GET /v1/labs/agent/kinds · getAgentLabKinds

Account-private Agent Lab documents, finite test plans and reports. See docs/agent-lab/README.md and the Rust SDK labs module for typed bodies. No execution on reads, document save, card rendering or promotion. A supporting host prepares isolated inputs before using the normal agent assignment service. Mutations retain request_id receipts; changed retries conflict. Updates require expected_revision. Maximum request 192 KiB; per-account storage 16 MiB, 64 documents, 64 versions each, 128 runs, 8 active jobs and 8192 receipts. Trials are bounded to 32 and 30 minutes. Cost may be unknown. What a host reports is the account's claim, not proof we checked.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Response

200 — Account-owned result; Cache-Control: no-store, private.

Errors

StatusMeaningBody
400

Invalid fields or bounds.

401

Sign in required.

403

Access refused.

404

Unknown account-owned reference.

409

Version or request conflict.

413

Body too large.

429

Storage full.

503

Service unavailable.

Example

curl 'https://api.openagents.com/v1/labs/agent/kinds' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

Get lab artifact

GET /v1/labs/artifacts/{id} · getLabArtifact

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabArtifactLink

FieldTypeRequiredDescription
artifactobjectYes

A file made from (or attached to) a version.

artifact.idstringYes
artifact.versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

artifact.version.documentstringYes
artifact.version.versioninteger (uint64)Yes
artifact.roleone of "render", "poster", "frame", "strip", "export", "build", "replay", "source"Yes
artifact.media_typestringYes
artifact.sha256stringYes
artifact.sizeinteger (uint64)Yes
artifact.classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

artifact.no_trainingbooleanYes

Inherited by everything made from a marked input.

urlstringYes
expires_secondsinteger (uint32) or nullNo

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/artifacts/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

Read lab artifact

GET /v1/labs/artifacts/{id}/content · readLabArtifact

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo
RangeheaderstringNo

Response

200 — Private, no-store result.

Content type: application/octet-stream

Type: LabBytes (string (binary))

206 — Private, no-store result.

Content type: application/octet-stream

Type: LabBytes (string (binary))

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 416, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/artifacts/{id}/content' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

List lab documents

GET /v1/labs/documents · listLabDocuments

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
spacequerystringNo
limitqueryintegerNo
afterqueryintegerNo
kindquerystringNo

Response

200 — Private, no-store result.

Type: LabDocuments

FieldTypeRequiredDescription
dataarray of objectYes
data[].idstringYes
data[].kindstringYes

A registered kind (video, cad, ...).

data[].schemastringYes

One of that kind's document schemas (cut.v1, part.v1, ...).

data[].titlestringYes
data[].created_unix_msinteger (uint64)Yes
data[].latestinteger (uint64)Yes

The latest version number (0 before the first).

nextinteger (uint64) or nullNo

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/documents' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Create lab document

POST /v1/labs/documents · createLabDocument

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Request body

Content type: application/json

Type: LabCreateDocument

FieldTypeRequiredDescription
spacestringNo

Default: "me".

idstringYes
kindstringYes
schemastringYes
titlestringYes
contentanyYes
summarystringYes

Response

201 — Private, no-store result.

Type: LabVersion

FieldTypeRequiredDescription
documentstringYes
numberinteger (uint64)Yes
parentinteger (uint64) or nullNo
authorstringYes

A person, or a chat turn (chat:<id>).

summarystringYes
created_unix_msinteger (uint64)Yes
schemastringYes
contentanyYes
content_sha256stringYes

[crate::digest] of content.

reportobjectNo

The kind's check report for this content. Default: {"warnings":[],"facts":null}.

report.warningsarray of stringNo

Default: [].

report.factsanyNo

Kind-specific facts (mass, duration, sketch freedom, ...). Default: null.

assetsarray of objectNo

Every file the content uses. Default: [].

assets[].locationstringYes

A path on the host or an object in the space's storage.

assets[].sha256stringYes
assets[].classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/documents' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "id": "string",
  "kind": "string",
  "schema": "string",
  "title": "string",
  "content": {},
  "summary": "string"
}'

In the Rust SDK

Get lab document

GET /v1/labs/documents/{id} · getLabDocument

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabDocumentMeta

FieldTypeRequiredDescription
idstringYes
kindstringYes

A registered kind (video, cad, ...).

schemastringYes

One of that kind's document schemas (cut.v1, part.v1, ...).

titlestringYes
created_unix_msinteger (uint64)Yes
latestinteger (uint64)Yes

The latest version number (0 before the first).

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/documents/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Delete lab document

DELETE /v1/labs/documents/{id} · deleteLabDocument

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabDeleted

FieldTypeRequiredDescription
idstringYes
deletedbooleanYes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X DELETE 'https://api.openagents.com/v1/labs/documents/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Read lab events

GET /v1/labs/documents/{id}/events · readLabEvents

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo
limitqueryintegerNo
afterqueryintegerNo
sincequeryintegerNo
Last-Event-IDheaderstringNo

Response

200 — Private, no-store result.

Type: LabEvents

FieldTypeRequiredDescription
dataarray of objectYes
data[].cursorinteger (uint64)Yes
data[].documentstringYes
data[].at_unix_msinteger (uint64)Yes
data[].changeanyYes
nextinteger (uint64) or nullNo

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/documents/{id}/events' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

List lab notes

GET /v1/labs/documents/{id}/notes · listLabNotes

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo
limitqueryintegerNo
afterqueryintegerNo

Response

200 — Private, no-store result.

Type: LabNotes

FieldTypeRequiredDescription
dataarray of objectYes
data[].subjectobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

data[].subject.documentstringYes
data[].subject.versioninteger (uint64)Yes
data[].locatorobjectYes

Where in a version a note points.

data[].authorstringYes
data[].textstringYes
data[].created_unix_msinteger (uint64)Yes
nextinteger (uint64) or nullNo

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/documents/{id}/notes' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Add lab note

POST /v1/labs/documents/{id}/notes · addLabNote

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

Content type: application/json

Type: LabAddNote

FieldTypeRequiredDescription
spacestringNo

Default: "me".

versioninteger (uint64)Yes
locatorobjectYes

Where in a version a note points.

textstringYes

Response

201 — Private, no-store result.

Type: LabSaved

FieldTypeRequiredDescription
savedbooleanYes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/documents/{id}/notes' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "version": 0,
  "locator": {
    "at": "none"
  },
  "text": "string"
}'

In the Rust SDK

List lab versions

GET /v1/labs/documents/{id}/versions · listLabVersions

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo
limitqueryintegerNo
afterqueryintegerNo

Response

200 — Private, no-store result.

Type: LabVersions

FieldTypeRequiredDescription
dataarray of objectYes
data[].documentstringYes
data[].numberinteger (uint64)Yes
data[].parentinteger (uint64) or nullNo
data[].authorstringYes

A person, or a chat turn (chat:<id>).

data[].summarystringYes
data[].created_unix_msinteger (uint64)Yes
data[].schemastringYes
data[].contentanyYes
data[].content_sha256stringYes

[crate::digest] of content.

data[].reportobjectNo

The kind's check report for this content. Default: {"warnings":[],"facts":null}.

data[].report.warningsarray of stringNo

Default: [].

data[].report.factsanyNo

Kind-specific facts (mass, duration, sketch freedom, ...). Default: null.

data[].assetsarray of objectNo

Every file the content uses. Default: [].

data[].assets[].locationstringYes

A path on the host or an object in the space's storage.

data[].assets[].sha256stringYes
data[].assets[].classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

nextinteger (uint64) or nullNo

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/documents/{id}/versions' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Create lab version

POST /v1/labs/documents/{id}/versions · createLabVersion

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

Content type: application/json

Type: LabEditDocument

FieldTypeRequiredDescription
spacestringNo

Default: "me".

baseinteger (uint64)Yes
changeobjectYes
summarystringYes

Response

201 — Private, no-store result.

Type: LabVersion

FieldTypeRequiredDescription
documentstringYes
numberinteger (uint64)Yes
parentinteger (uint64) or nullNo
authorstringYes

A person, or a chat turn (chat:<id>).

summarystringYes
created_unix_msinteger (uint64)Yes
schemastringYes
contentanyYes
content_sha256stringYes

[crate::digest] of content.

reportobjectNo

The kind's check report for this content. Default: {"warnings":[],"facts":null}.

report.warningsarray of stringNo

Default: [].

report.factsanyNo

Kind-specific facts (mass, duration, sketch freedom, ...). Default: null.

assetsarray of objectNo

Every file the content uses. Default: [].

assets[].locationstringYes

A path on the host or an object in the space's storage.

assets[].sha256stringYes
assets[].classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/documents/{id}/versions' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "base": 0,
  "change": {
    "ops": [
      {
        "path": "string",
        "value": {},
        "op": "add"
      }
    ],
    "type": "patch"
  },
  "summary": "string"
}'

In the Rust SDK

Get lab version

GET /v1/labs/documents/{id}/versions/{n} · getLabVersion

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
npathintegerYes
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabVersion

FieldTypeRequiredDescription
documentstringYes
numberinteger (uint64)Yes
parentinteger (uint64) or nullNo
authorstringYes

A person, or a chat turn (chat:<id>).

summarystringYes
created_unix_msinteger (uint64)Yes
schemastringYes
contentanyYes
content_sha256stringYes

[crate::digest] of content.

reportobjectNo

The kind's check report for this content. Default: {"warnings":[],"facts":null}.

report.warningsarray of stringNo

Default: [].

report.factsanyNo

Kind-specific facts (mass, duration, sketch freedom, ...). Default: null.

assetsarray of objectNo

Every file the content uses. Default: [].

assets[].locationstringYes

A path on the host or an object in the space's storage.

assets[].sha256stringYes
assets[].classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/documents/{id}/versions/{n}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Get lab card

GET /v1/labs/documents/{id}/versions/{n}/card · getLabCard

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
npathintegerYes
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabCard

FieldTypeRequiredDescription
schemastringNo

Default: "lab.card.v1".

kindstringYes
documentstringYes
versioninteger (uint64)Yes
titlestringYes
summarystringNo

Default: "".

stateone of "queued", "running", "done", "failed", "cancelled" or always "uncertain" or nullNo

The job the card waits on, if any. Default: null.

state_textstring or nullNo

Plain words about the state ("Rendering the preview, about 3 min"). Default: null.

refusalobject or nullNo

A change a kind won't accept, with the sentence every surface shows. Default: null.

refusal.codestringYes

A stable code clients can branch on (beat_grid, stale_base, ...).

refusal.messagestringYes

Plain words, shown as is.

viewone of "video", "image", "compare", "model3d", "playable", "report", "none" or always "unknown"Yes
primarystring or nullNo

Artifact ids; clients fetch them through the API with their own access. Default: null.

posterstring or nullNo

Default: null.

striparray of stringNo

Default: [].

compareobject or nullNo

Default: null.

compare.aobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

compare.a.documentstringYes
compare.a.versioninteger (uint64)Yes
compare.bobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

compare.b.documentstringYes
compare.b.versioninteger (uint64)Yes
compare.atobjectNo

Where in a version a note points. Default: {"at":"none"}.

compare.a_primarystring or nullNo

Default: null.

compare.b_primarystring or nullNo

Default: null.

notesarray of objectNo

Default: [].

notes[].locatorobjectYes

Where in a version a note points.

notes[].authorstringYes
notes[].textstringYes
pagestring or nullNo

The kind's deeper page (player, viewport, game). Default: null.

private_localbooleanNo

Set when an input must stay on its host; shown on the card. Default: false.

detailanyNo

Kind-specific; clients that don't know it ignore it. Default: null.

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/documents/{id}/versions/{n}/card' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

List lab jobs

GET /v1/labs/jobs · listLabJobs

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
spacequerystringNo
limitqueryintegerNo
afterqueryintegerNo
documentquerystringYes

Response

200 — Private, no-store result.

Type: LabJobs

FieldTypeRequiredDescription
dataarray of objectYes
data[].idstringYes
data[].specobjectYes

Work that makes artifacts. Its idempotency key is the version's digest, the type and the parameters, so asking twice never runs it twice.

data[].spec.kindstringYes
data[].spec.typestringYes

Kind-defined: render, rebuild, playtest, simulate, ...

data[].spec.versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

data[].spec.version.documentstringYes
data[].spec.version.versioninteger (uint64)Yes
data[].spec.paramsanyNo

Default: null.

data[].spec.requirementsobjectNo

What a placement must offer to take a job. Default: {"gpu":false,"tools":[],"max_seconds":0,"private_local":false}.

data[].spec.requirements.cpu_millisinteger (uint64)No

Minimum CPU capacity, in thousandths of one core (0 uses the runner default).

data[].spec.requirements.memory_bytesinteger (uint64)No

Minimum available memory (0 uses the runner default).

data[].spec.requirements.gpubooleanNo

Default: false.

data[].spec.requirements.toolsarray of stringNo

Programs the job runs (ffmpeg, blender, ...). Default: [].

data[].spec.requirements.max_secondsinteger (uint64)No

Default: 0.

data[].spec.requirements.private_localbooleanNo

Set when an input is [AssetClass::PrivateLocal]. Default: false.

data[].spec.requirements.asset_classesarray of always "public" or always "private_local" or always "no_training"No

Input classes required by this job, in addition to the version's assets.

data[].spec.requirements.model_useone of "training", "evaluation", "trace", nullNo

Explicit use of inputs by a model; absent for ordinary rendering.

data[].statusone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
data[].messagestring or nullNo

Plain words for a failure or a wait ("No computer that has these files is online"). Default: null.

data[].estimate_secondsnumber (double) or nullNo

Seconds the job is expected to take, when known. Default: null.

data[].artifactsarray of stringNo

Default: [].

nextinteger (uint64) or nullNo

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/jobs?document=...' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Create lab job

POST /v1/labs/jobs · createLabJob

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
Idempotency-KeyheaderstringYes

Request body

Content type: application/json

Type: LabCreateJob

FieldTypeRequiredDescription
spacestringNo

Default: "me".

versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

version.documentstringYes
version.versioninteger (uint64)Yes
wantobjectYes

What a caller wants made from a version.

Response

201 — Private, no-store result.

Type: LabJobState

FieldTypeRequiredDescription
idstringYes
specobjectYes

Work that makes artifacts. Its idempotency key is the version's digest, the type and the parameters, so asking twice never runs it twice.

spec.kindstringYes
spec.typestringYes

Kind-defined: render, rebuild, playtest, simulate, ...

spec.versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

spec.version.documentstringYes
spec.version.versioninteger (uint64)Yes
spec.paramsanyNo

Default: null.

spec.requirementsobjectNo

What a placement must offer to take a job. Default: {"gpu":false,"tools":[],"max_seconds":0,"private_local":false}.

spec.requirements.cpu_millisinteger (uint64)No

Minimum CPU capacity, in thousandths of one core (0 uses the runner default).

spec.requirements.memory_bytesinteger (uint64)No

Minimum available memory (0 uses the runner default).

spec.requirements.gpubooleanNo

Default: false.

spec.requirements.toolsarray of stringNo

Programs the job runs (ffmpeg, blender, ...). Default: [].

spec.requirements.max_secondsinteger (uint64)No

Default: 0.

spec.requirements.private_localbooleanNo

Set when an input is [AssetClass::PrivateLocal]. Default: false.

spec.requirements.asset_classesarray of always "public" or always "private_local" or always "no_training"No

Input classes required by this job, in addition to the version's assets.

spec.requirements.model_useone of "training", "evaluation", "trace", nullNo

Explicit use of inputs by a model; absent for ordinary rendering.

statusone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
messagestring or nullNo

Plain words for a failure or a wait ("No computer that has these files is online"). Default: null.

estimate_secondsnumber (double) or nullNo

Seconds the job is expected to take, when known. Default: null.

artifactsarray of stringNo

Default: [].

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/jobs' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Idempotency-Key: ...' \
  -H 'Content-Type: application/json' \
  -d '{
  "version": {
    "document": "string",
    "version": 0
  },
  "want": {
    "want": "card"
  }
}'

In the Rust SDK

Get lab job

GET /v1/labs/jobs/{id} · getLabJob

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabJobState

FieldTypeRequiredDescription
idstringYes
specobjectYes

Work that makes artifacts. Its idempotency key is the version's digest, the type and the parameters, so asking twice never runs it twice.

spec.kindstringYes
spec.typestringYes

Kind-defined: render, rebuild, playtest, simulate, ...

spec.versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

spec.version.documentstringYes
spec.version.versioninteger (uint64)Yes
spec.paramsanyNo

Default: null.

spec.requirementsobjectNo

What a placement must offer to take a job. Default: {"gpu":false,"tools":[],"max_seconds":0,"private_local":false}.

spec.requirements.cpu_millisinteger (uint64)No

Minimum CPU capacity, in thousandths of one core (0 uses the runner default).

spec.requirements.memory_bytesinteger (uint64)No

Minimum available memory (0 uses the runner default).

spec.requirements.gpubooleanNo

Default: false.

spec.requirements.toolsarray of stringNo

Programs the job runs (ffmpeg, blender, ...). Default: [].

spec.requirements.max_secondsinteger (uint64)No

Default: 0.

spec.requirements.private_localbooleanNo

Set when an input is [AssetClass::PrivateLocal]. Default: false.

spec.requirements.asset_classesarray of always "public" or always "private_local" or always "no_training"No

Input classes required by this job, in addition to the version's assets.

spec.requirements.model_useone of "training", "evaluation", "trace", nullNo

Explicit use of inputs by a model; absent for ordinary rendering.

statusone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
messagestring or nullNo

Plain words for a failure or a wait ("No computer that has these files is online"). Default: null.

estimate_secondsnumber (double) or nullNo

Seconds the job is expected to take, when known. Default: null.

artifactsarray of stringNo

Default: [].

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/jobs/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

Cancel lab job

DELETE /v1/labs/jobs/{id} · cancelLabJob

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabJobState

FieldTypeRequiredDescription
idstringYes
specobjectYes

Work that makes artifacts. Its idempotency key is the version's digest, the type and the parameters, so asking twice never runs it twice.

spec.kindstringYes
spec.typestringYes

Kind-defined: render, rebuild, playtest, simulate, ...

spec.versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

spec.version.documentstringYes
spec.version.versioninteger (uint64)Yes
spec.paramsanyNo

Default: null.

spec.requirementsobjectNo

What a placement must offer to take a job. Default: {"gpu":false,"tools":[],"max_seconds":0,"private_local":false}.

spec.requirements.cpu_millisinteger (uint64)No

Minimum CPU capacity, in thousandths of one core (0 uses the runner default).

spec.requirements.memory_bytesinteger (uint64)No

Minimum available memory (0 uses the runner default).

spec.requirements.gpubooleanNo

Default: false.

spec.requirements.toolsarray of stringNo

Programs the job runs (ffmpeg, blender, ...). Default: [].

spec.requirements.max_secondsinteger (uint64)No

Default: 0.

spec.requirements.private_localbooleanNo

Set when an input is [AssetClass::PrivateLocal]. Default: false.

spec.requirements.asset_classesarray of always "public" or always "private_local" or always "no_training"No

Input classes required by this job, in addition to the version's assets.

spec.requirements.model_useone of "training", "evaluation", "trace", nullNo

Explicit use of inputs by a model; absent for ordinary rendering.

statusone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
messagestring or nullNo

Plain words for a failure or a wait ("No computer that has these files is online"). Default: null.

estimate_secondsnumber (double) or nullNo

Seconds the job is expected to take, when known. Default: null.

artifactsarray of stringNo

Default: [].

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X DELETE 'https://api.openagents.com/v1/labs/jobs/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

Get lab job usage

GET /v1/labs/jobs/{id}/usage · getLabJobUsage

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabWorkerUsage (array of object)

FieldTypeRequiredDescription
[].jobstringYes
[].attemptinteger (uint64)Yes
[].workerstringYes
[].accountstringYes
[].spaceobjectYes

Where Labs live: a person's own space or a project. Access follows project membership; the store and API decide it, never this value alone.

[].placementone of "server", "cloud", "enrolled"Yes

The service binds this value to a worker's enrollment, never a poll argument.

[].started_unix_msinteger (uint64) or nullNo
[].observed_until_unix_msinteger (uint64)Yes
[].observed_wall_msinteger (uint64) or nullNo

Time between service observations, not CPU usage or provider billable time.

[].outcomeone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
[].chargeinteger (uint64) or nullNo

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/jobs/{id}/usage' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

List lab kinds

GET /v1/labs/kinds · listLabKinds

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabKinds

FieldTypeRequiredDescription
dataarray of objectYes
data[].kindstringYes

Stable id (video, cad, ...). Display names may change; this doesn't.

data[].namestringYes
data[].schemasarray of stringYes
data[].tool_prefixstringYes

Every tool name starts with this (lab_, cad_, ...), so prompts and older clients keep working.

data[].doc_argstringYes

The argument a tool names its document by (document, doc, game).

data[].toolsarray of objectYes
data[].tools[].namestringYes
data[].tools[].descriptionstringYes
data[].tools[].parametersanyYes
data[].job_typesarray of stringYes
data[].job_requirementsobjectNo

Minimum resources and maximum run time for each supported job type.

data[].viewsarray of one of "video", "image", "compare", "model3d", "playable", "report", "none" or always "unknown"Yes
data[].limitsobjectYes
data[].limits.max_doc_bytesinteger (uint64)Yes
data[].limits.max_docs_per_spaceinteger (uint64)Yes
data[].limits.max_versions_per_docinteger (uint64)Yes
data[].limits.max_args_bytesinteger (uint64)Yes
data[].limits.runs_per_hourinteger (uint64)Yes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/kinds' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

List lab tools

GET /v1/labs/kinds/{kind}/tools · listLabTools

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
kindpathstringYes
spacequerystringNo

Response

200 — Private, no-store result.

Type: LabTools

FieldTypeRequiredDescription
dataarray of objectYes
data[].namestringYes
data[].descriptionstringYes
data[].parametersanyYes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl 'https://api.openagents.com/v1/labs/kinds/{kind}/tools' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"

In the Rust SDK

Call lab tool

POST /v1/labs/kinds/{kind}/tools/{name} · callLabTool

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
kindpathstringYes
namepathstringYes
Idempotency-KeyheaderstringNo

Request body

Content type: application/json

Type: LabToolCall

FieldTypeRequiredDescription
spacestringNo

Default: "me".

chatstring or nullNo
baseinteger (uint64) or nullNo
argumentsanyYes

Response

200 — Private, no-store result.

Type: LabToolResult

FieldTypeRequiredDescription
resultanyYes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/kinds/{kind}/tools/{name}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "arguments": {}
}'

In the Rust SDK

Upload lab source

POST /v1/labs/uploads · uploadLabSource

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Request body

Content type: application/json

Type: LabUpload

FieldTypeRequiredDescription
spacestringNo

Default: "me".

versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

version.documentstringYes
version.versioninteger (uint64)Yes
media_typestringYes
classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

no_trainingbooleanNo

Default: false.

content_base64stringYes

Response

201 — Private, no-store result.

Type: LabArtifact

FieldTypeRequiredDescription
idstringYes
versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

version.documentstringYes
version.versioninteger (uint64)Yes
roleone of "render", "poster", "frame", "strip", "export", "build", "replay", "source"Yes
media_typestringYes
sha256stringYes
sizeinteger (uint64)Yes
classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

no_trainingbooleanYes

Inherited by everything made from a marked input.

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/uploads' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "version": {
    "document": "string",
    "version": 0
  },
  "media_type": "string",
  "class": "public",
  "content_base64": "string"
}'

In the Rust SDK

Enroll lab worker

POST /v1/labs/workers · enrollLabWorker

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Request body

Content type: application/json

Type: LabWorkerEnroll

FieldTypeRequiredDescription
spacestringNo

Default: "me".

capabilitiesobjectYes
capabilities.workerstringYes
capabilities.placementone of "server", "cloud", "enrolled"Yes

The service binds this value to a worker's enrollment, never a poll argument.

capabilities.cpu_millisinteger (uint64)Yes
capabilities.memory_bytesinteger (uint64)Yes
capabilities.gpubooleanYes
capabilities.toolsarray of stringYes
capabilities.jobsarray of stringYes

Supported pairs, for example video/render.

capabilities.local_assetsarray of stringYes

Private input checksums already present on this enrolled host.

capabilities.max_secondsinteger (uint64)Yes
lifetime_msinteger (uint64)No

Default: 3600000.

Response

200 — Private, no-store result.

Type: LabWorkerEnrolled

FieldTypeRequiredDescription
workerobjectYes
worker.idstringYes
worker.accountstringYes
worker.spaceobjectYes

Where Labs live: a person's own space or a project. Access follows project membership; the store and API decide it, never this value alone.

worker.capabilitiesobjectYes
worker.capabilities.workerstringYes
worker.capabilities.placementone of "server", "cloud", "enrolled"Yes

The service binds this value to a worker's enrollment, never a poll argument.

worker.capabilities.cpu_millisinteger (uint64)Yes
worker.capabilities.memory_bytesinteger (uint64)Yes
worker.capabilities.gpubooleanYes
worker.capabilities.toolsarray of stringYes
worker.capabilities.jobsarray of stringYes

Supported pairs, for example video/render.

worker.capabilities.local_assetsarray of stringYes

Private input checksums already present on this enrolled host.

worker.capabilities.max_secondsinteger (uint64)Yes
worker.expires_unix_msinteger (uint64)Yes
worker.revokedbooleanYes
worker.issuer_sessionstring or nullNo

The issuing app/login-key session reference, never its bearer token.

tokenstringYes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/workers' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "capabilities": {
    "worker": "string",
    "placement": "server",
    "cpu_millis": 0,
    "memory_bytes": 0,
    "gpu": false,
    "tools": [
      "string"
    ],
    "jobs": [
      "string"
    ],
    "local_assets": [
      "string"
    ],
    "max_seconds": 0
  }
}'

In the Rust SDK

Finish lab worker job

POST /v1/labs/workers/finish · finishLabWorkerJob

Outbound job-worker operation. Checks current sign-in, account, project membership, kind access and lease before each operation. Requests cannot select another space or executable.

Sign-in: a bearer credential in the Authorization header.

labWorkerBearer: A revocable job-only labw_ key for one named space. Account sign-in keys are not accepted.

Request body

Content type: application/json

Type: LabWorkerFinish

FieldTypeRequiredDescription
jobstringYes
attemptinteger (uint64)Yes
statusone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
outputsarray of objectNo

Default: [].

outputs[].roleone of "render", "poster", "frame", "strip", "export", "build", "replay", "source"Yes
outputs[].media_typestringYes
outputs[].content_base64stringYes

Response

200 — Private, no-store result.

Type: LabJobState

FieldTypeRequiredDescription
idstringYes
specobjectYes

Work that makes artifacts. Its idempotency key is the version's digest, the type and the parameters, so asking twice never runs it twice.

spec.kindstringYes
spec.typestringYes

Kind-defined: render, rebuild, playtest, simulate, ...

spec.versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

spec.version.documentstringYes
spec.version.versioninteger (uint64)Yes
spec.paramsanyNo

Default: null.

spec.requirementsobjectNo

What a placement must offer to take a job. Default: {"gpu":false,"tools":[],"max_seconds":0,"private_local":false}.

spec.requirements.cpu_millisinteger (uint64)No

Minimum CPU capacity, in thousandths of one core (0 uses the runner default).

spec.requirements.memory_bytesinteger (uint64)No

Minimum available memory (0 uses the runner default).

spec.requirements.gpubooleanNo

Default: false.

spec.requirements.toolsarray of stringNo

Programs the job runs (ffmpeg, blender, ...). Default: [].

spec.requirements.max_secondsinteger (uint64)No

Default: 0.

spec.requirements.private_localbooleanNo

Set when an input is [AssetClass::PrivateLocal]. Default: false.

spec.requirements.asset_classesarray of always "public" or always "private_local" or always "no_training"No

Input classes required by this job, in addition to the version's assets.

spec.requirements.model_useone of "training", "evaluation", "trace", nullNo

Explicit use of inputs by a model; absent for ordinary rendering.

statusone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
messagestring or nullNo

Plain words for a failure or a wait ("No computer that has these files is online"). Default: null.

estimate_secondsnumber (double) or nullNo

Seconds the job is expected to take, when known. Default: null.

artifactsarray of stringNo

Default: [].

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/workers/finish' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "job": "string",
  "attempt": 0,
  "status": "queued"
}'

Heartbeat lab worker job

POST /v1/labs/workers/heartbeat · heartbeatLabWorkerJob

Outbound job-worker operation. Checks current sign-in, account, project membership, kind access and lease before each operation. Requests cannot select another space or executable.

Sign-in: a bearer credential in the Authorization header.

labWorkerBearer: A revocable job-only labw_ key for one named space. Account sign-in keys are not accepted.

Request body

Content type: application/json

Type: LabWorkerAttempt

FieldTypeRequiredDescription
jobstringYes
attemptinteger (uint64)Yes

Response

200 — Private, no-store result.

Type: LabWorkerWork

FieldTypeRequiredDescription
assignmentobjectYes
assignment.leaseobjectYes
assignment.lease.jobobjectYes
assignment.lease.job.idstringYes
assignment.lease.job.specobjectYes

Work that makes artifacts. Its idempotency key is the version's digest, the type and the parameters, so asking twice never runs it twice.

assignment.lease.job.spec.kindstringYes
assignment.lease.job.spec.typestringYes

Kind-defined: render, rebuild, playtest, simulate, ...

assignment.lease.job.spec.versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

assignment.lease.job.spec.version.documentstringYes
assignment.lease.job.spec.version.versioninteger (uint64)Yes
assignment.lease.job.spec.paramsanyNo

Default: null.

assignment.lease.job.spec.requirementsobjectNo

What a placement must offer to take a job. Default: {"gpu":false,"tools":[],"max_seconds":0,"private_local":false}.

assignment.lease.job.spec.requirements.cpu_millisinteger (uint64)No

Minimum CPU capacity, in thousandths of one core (0 uses the runner default).

assignment.lease.job.spec.requirements.memory_bytesinteger (uint64)No

Minimum available memory (0 uses the runner default).

assignment.lease.job.spec.requirements.gpubooleanNo

Default: false.

assignment.lease.job.spec.requirements.toolsarray of stringNo

Programs the job runs (ffmpeg, blender, ...). Default: [].

assignment.lease.job.spec.requirements.max_secondsinteger (uint64)No

Default: 0.

assignment.lease.job.spec.requirements.private_localbooleanNo

Set when an input is [AssetClass::PrivateLocal]. Default: false.

assignment.lease.job.spec.requirements.asset_classesarray of always "public" or always "private_local" or always "no_training"No

Input classes required by this job, in addition to the version's assets.

assignment.lease.job.spec.requirements.model_useone of "training", "evaluation", "trace", nullNo

Explicit use of inputs by a model; absent for ordinary rendering.

assignment.lease.job.statusone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
assignment.lease.job.messagestring or nullNo

Plain words for a failure or a wait ("No computer that has these files is online"). Default: null.

assignment.lease.job.estimate_secondsnumber (double) or nullNo

Seconds the job is expected to take, when known. Default: null.

assignment.lease.job.artifactsarray of stringNo

Default: [].

assignment.lease.workerstringYes
assignment.lease.attemptinteger (uint64)Yes
assignment.lease.expires_unix_msinteger (uint64)Yes
assignment.lease.startedbooleanYes
assignment.started_unix_msinteger (uint64) or nullNo

The service records this before returning permission to execute.

versionobjectYes

One immutable version. Made only by a kind's apply (through the store), never written directly.

version.documentstringYes
version.numberinteger (uint64)Yes
version.parentinteger (uint64) or nullNo
version.authorstringYes

A person, or a chat turn (chat:<id>).

version.summarystringYes
version.created_unix_msinteger (uint64)Yes
version.schemastringYes
version.contentanyYes
version.content_sha256stringYes

[crate::digest] of content.

version.reportobjectNo

The kind's check report for this content. Default: {"warnings":[],"facts":null}.

version.report.warningsarray of stringNo

Default: [].

version.report.factsanyNo

Kind-specific facts (mass, duration, sketch freedom, ...). Default: null.

version.assetsarray of objectNo

Every file the content uses. Default: [].

version.assets[].locationstringYes

A path on the host or an object in the space's storage.

version.assets[].sha256stringYes
version.assets[].classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

requirementsobjectYes
requirements.cpu_millisinteger (uint64)Yes
requirements.memory_bytesinteger (uint64)Yes
requirements.gpubooleanYes
requirements.toolsarray of stringYes
requirements.max_secondsinteger (uint64)Yes
requirements.private_localbooleanYes
requirements.local_assetsarray of stringYes
requirements.no_trainingbooleanYes
requirements.jobstringYes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/workers/heartbeat' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "job": "string",
  "attempt": 0
}'

List lab worker inputs

POST /v1/labs/workers/inputs · listLabWorkerInputs

Outbound job-worker operation. Checks current sign-in, account, project membership, kind access and lease before each operation. Requests cannot select another space or executable.

Sign-in: a bearer credential in the Authorization header.

labWorkerBearer: A revocable job-only labw_ key for one named space. Account sign-in keys are not accepted.

Request body

Content type: application/json

Type: LabWorkerAttempt

FieldTypeRequiredDescription
jobstringYes
attemptinteger (uint64)Yes

Response

200 — Private, no-store result.

Type: LabWorkerInputs

FieldTypeRequiredDescription
versionsarray of objectYes

The job's version first, then each referenced version once.

versions[].documentstringYes
versions[].numberinteger (uint64)Yes
versions[].parentinteger (uint64) or nullNo
versions[].authorstringYes

A person, or a chat turn (chat:<id>).

versions[].summarystringYes
versions[].created_unix_msinteger (uint64)Yes
versions[].schemastringYes
versions[].contentanyYes
versions[].content_sha256stringYes

[crate::digest] of content.

versions[].reportobjectNo

The kind's check report for this content. Default: {"warnings":[],"facts":null}.

versions[].report.warningsarray of stringNo

Default: [].

versions[].report.factsanyNo

Kind-specific facts (mass, duration, sketch freedom, ...). Default: null.

versions[].assetsarray of objectNo

Every file the content uses. Default: [].

versions[].assets[].locationstringYes

A path on the host or an object in the space's storage.

versions[].assets[].sha256stringYes
versions[].assets[].classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

filesarray of objectYes
files[].idstringYes
files[].versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

files[].version.documentstringYes
files[].version.versioninteger (uint64)Yes
files[].roleone of "render", "poster", "frame", "strip", "export", "build", "replay", "source"Yes
files[].media_typestringYes
files[].sha256stringYes
files[].sizeinteger (uint64)Yes
files[].classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

files[].no_trainingbooleanYes

Inherited by everything made from a marked input.

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/workers/inputs' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "job": "string",
  "attempt": 0
}'

Read lab worker input

POST /v1/labs/workers/inputs/file · readLabWorkerInput

Outbound job-worker operation. Checks current sign-in, account, project membership, kind access and lease before each operation. Requests cannot select another space or executable.

Sign-in: a bearer credential in the Authorization header.

labWorkerBearer: A revocable job-only labw_ key for one named space. Account sign-in keys are not accepted.

Request body

Content type: application/json

Type: LabWorkerInputFile

FieldTypeRequiredDescription
jobstringYes
attemptinteger (uint64)Yes
artifactstringYes

Response

200 — Private, no-store result.

Content type: application/octet-stream

Type: LabBytes (string (binary))

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/workers/inputs/file' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "job": "string",
  "attempt": 0,
  "artifact": "string"
}'

Poll lab worker

POST /v1/labs/workers/poll · pollLabWorker

Outbound job-worker operation. Checks current sign-in, account, project membership, kind access and lease before each operation. Requests cannot select another space or executable.

Sign-in: a bearer credential in the Authorization header.

labWorkerBearer: A revocable job-only labw_ key for one named space. Account sign-in keys are not accepted.

Request body

Content type: application/json

Type: LabWorkerPoll

FieldTypeRequiredDescription
wait_secondsinteger (uint64)No

Default: 0.

Response

200 — Private, no-store result.

Type: LabWorkerAvailable

FieldTypeRequiredDescription
workobject or nullNo
work.assignmentobjectYes
work.assignment.leaseobjectYes
work.assignment.lease.jobobjectYes
work.assignment.lease.job.idstringYes
work.assignment.lease.job.specobjectYes

Work that makes artifacts. Its idempotency key is the version's digest, the type and the parameters, so asking twice never runs it twice.

work.assignment.lease.job.spec.kindstringYes
work.assignment.lease.job.spec.typestringYes

Kind-defined: render, rebuild, playtest, simulate, ...

work.assignment.lease.job.spec.versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

work.assignment.lease.job.spec.paramsanyNo

Default: null.

work.assignment.lease.job.spec.requirementsobjectNo

What a placement must offer to take a job. Default: {"gpu":false,"tools":[],"max_seconds":0,"private_local":false}.

work.assignment.lease.job.statusone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
work.assignment.lease.job.messagestring or nullNo

Plain words for a failure or a wait ("No computer that has these files is online"). Default: null.

work.assignment.lease.job.estimate_secondsnumber (double) or nullNo

Seconds the job is expected to take, when known. Default: null.

work.assignment.lease.job.artifactsarray of stringNo

Default: [].

work.assignment.lease.workerstringYes
work.assignment.lease.attemptinteger (uint64)Yes
work.assignment.lease.expires_unix_msinteger (uint64)Yes
work.assignment.lease.startedbooleanYes
work.assignment.started_unix_msinteger (uint64) or nullNo

The service records this before returning permission to execute.

work.versionobjectYes

One immutable version. Made only by a kind's apply (through the store), never written directly.

work.version.documentstringYes
work.version.numberinteger (uint64)Yes
work.version.parentinteger (uint64) or nullNo
work.version.authorstringYes

A person, or a chat turn (chat:<id>).

work.version.summarystringYes
work.version.created_unix_msinteger (uint64)Yes
work.version.schemastringYes
work.version.contentanyYes
work.version.content_sha256stringYes

[crate::digest] of content.

work.version.reportobjectNo

The kind's check report for this content. Default: {"warnings":[],"facts":null}.

work.version.report.warningsarray of stringNo

Default: [].

work.version.report.factsanyNo

Kind-specific facts (mass, duration, sketch freedom, ...). Default: null.

work.version.assetsarray of objectNo

Every file the content uses. Default: [].

work.version.assets[].locationstringYes

A path on the host or an object in the space's storage.

work.version.assets[].sha256stringYes
work.version.assets[].classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

work.requirementsobjectYes
work.requirements.cpu_millisinteger (uint64)Yes
work.requirements.memory_bytesinteger (uint64)Yes
work.requirements.gpubooleanYes
work.requirements.toolsarray of stringYes
work.requirements.max_secondsinteger (uint64)Yes
work.requirements.private_localbooleanYes
work.requirements.local_assetsarray of stringYes
work.requirements.no_trainingbooleanYes
work.requirements.jobstringYes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/workers/poll' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "wait_seconds": 0
}'

Start lab worker job

POST /v1/labs/workers/start · startLabWorkerJob

Outbound job-worker operation. Checks current sign-in, account, project membership, kind access and lease before each operation. Requests cannot select another space or executable.

Sign-in: a bearer credential in the Authorization header.

labWorkerBearer: A revocable job-only labw_ key for one named space. Account sign-in keys are not accepted.

Request body

Content type: application/json

Type: LabWorkerAttempt

FieldTypeRequiredDescription
jobstringYes
attemptinteger (uint64)Yes

Response

200 — Private, no-store result.

Type: LabWorkerWork

FieldTypeRequiredDescription
assignmentobjectYes
assignment.leaseobjectYes
assignment.lease.jobobjectYes
assignment.lease.job.idstringYes
assignment.lease.job.specobjectYes

Work that makes artifacts. Its idempotency key is the version's digest, the type and the parameters, so asking twice never runs it twice.

assignment.lease.job.spec.kindstringYes
assignment.lease.job.spec.typestringYes

Kind-defined: render, rebuild, playtest, simulate, ...

assignment.lease.job.spec.versionobjectYes

An immutable version, possibly of another kind's document (a CAD part placed in a Robot Lab scene). Reading through it checks access to both.

assignment.lease.job.spec.version.documentstringYes
assignment.lease.job.spec.version.versioninteger (uint64)Yes
assignment.lease.job.spec.paramsanyNo

Default: null.

assignment.lease.job.spec.requirementsobjectNo

What a placement must offer to take a job. Default: {"gpu":false,"tools":[],"max_seconds":0,"private_local":false}.

assignment.lease.job.spec.requirements.cpu_millisinteger (uint64)No

Minimum CPU capacity, in thousandths of one core (0 uses the runner default).

assignment.lease.job.spec.requirements.memory_bytesinteger (uint64)No

Minimum available memory (0 uses the runner default).

assignment.lease.job.spec.requirements.gpubooleanNo

Default: false.

assignment.lease.job.spec.requirements.toolsarray of stringNo

Programs the job runs (ffmpeg, blender, ...). Default: [].

assignment.lease.job.spec.requirements.max_secondsinteger (uint64)No

Default: 0.

assignment.lease.job.spec.requirements.private_localbooleanNo

Set when an input is [AssetClass::PrivateLocal]. Default: false.

assignment.lease.job.spec.requirements.asset_classesarray of always "public" or always "private_local" or always "no_training"No

Input classes required by this job, in addition to the version's assets.

assignment.lease.job.spec.requirements.model_useone of "training", "evaluation", "trace", nullNo

Explicit use of inputs by a model; absent for ordinary rendering.

assignment.lease.job.statusone of "queued", "running", "done", "failed", "cancelled" or always "uncertain"Yes
assignment.lease.job.messagestring or nullNo

Plain words for a failure or a wait ("No computer that has these files is online"). Default: null.

assignment.lease.job.estimate_secondsnumber (double) or nullNo

Seconds the job is expected to take, when known. Default: null.

assignment.lease.job.artifactsarray of stringNo

Default: [].

assignment.lease.workerstringYes
assignment.lease.attemptinteger (uint64)Yes
assignment.lease.expires_unix_msinteger (uint64)Yes
assignment.lease.startedbooleanYes
assignment.started_unix_msinteger (uint64) or nullNo

The service records this before returning permission to execute.

versionobjectYes

One immutable version. Made only by a kind's apply (through the store), never written directly.

version.documentstringYes
version.numberinteger (uint64)Yes
version.parentinteger (uint64) or nullNo
version.authorstringYes

A person, or a chat turn (chat:<id>).

version.summarystringYes
version.created_unix_msinteger (uint64)Yes
version.schemastringYes
version.contentanyYes
version.content_sha256stringYes

[crate::digest] of content.

version.reportobjectNo

The kind's check report for this content. Default: {"warnings":[],"facts":null}.

version.report.warningsarray of stringNo

Default: [].

version.report.factsanyNo

Kind-specific facts (mass, duration, sketch freedom, ...). Default: null.

version.assetsarray of objectNo

Every file the content uses. Default: [].

version.assets[].locationstringYes

A path on the host or an object in the space's storage.

version.assets[].sha256stringYes
version.assets[].classalways "public" or always "private_local" or always "no_training"Yes

How a file may travel.

requirementsobjectYes
requirements.cpu_millisinteger (uint64)Yes
requirements.memory_bytesinteger (uint64)Yes
requirements.gpubooleanYes
requirements.toolsarray of stringYes
requirements.max_secondsinteger (uint64)Yes
requirements.private_localbooleanYes
requirements.local_assetsarray of stringYes
requirements.no_trainingbooleanYes
requirements.jobstringYes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X POST 'https://api.openagents.com/v1/labs/workers/start' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "job": "string",
  "attempt": 0
}'

Revoke lab worker

DELETE /v1/labs/workers/{id} · revokeLabWorker

Authorizes the caller and space on every request. Experimental kinds use the Computers account gate. Reads never start jobs. Pages and payloads are bounded. Source uploads are capped at 512 KiB until resumable uploads are integrated.

Sign-in: a bearer credential in the Authorization header.

appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Response

200 — Private, no-store result.

Type: LabWorkerRevoked

FieldTypeRequiredDescription
revokedalways trueYes

Errors

StatusMeaningBody
400, 401, 402, 403, 404, 409, 413, 422, 429, 503

Stable error code and plain-language message.

LabError

Example

curl -X DELETE 'https://api.openagents.com/v1/labs/workers/{id}' \
  -H "Authorization: Bearer $OPENAGENTS_TOKEN"