Labs
Lab documents, versions, notes, jobs, artifacts, and the workers that run jobs.
| Operation | Request |
|---|---|
| Get agent lab documents | GET /v1/labs/agent/documents |
| Post agent lab documents | POST /v1/labs/agent/documents |
| Get agent lab documents id | GET /v1/labs/agent/documents/{id} |
| Put agent lab documents id | PUT /v1/labs/agent/documents/{id} |
| Delete agent lab documents id | DELETE /v1/labs/agent/documents/{id} |
| Post agent lab documents id jobs | POST /v1/labs/agent/documents/{id}/jobs |
| Post agent lab documents id promote | POST /v1/labs/agent/documents/{id}/promote |
| Get agent lab hosts | GET /v1/labs/agent/hosts |
| Post agent lab hosts | POST /v1/labs/agent/hosts |
| Get agent lab jobs | GET /v1/labs/agent/jobs |
| Get agent lab jobs id | GET /v1/labs/agent/jobs/{id} |
| Post agent lab jobs id actions | POST /v1/labs/agent/jobs/{id}/actions |
| Post agent lab jobs id host | POST /v1/labs/agent/jobs/{id}/host |
| Get agent lab kinds | GET /v1/labs/agent/kinds |
| Get lab artifact | GET /v1/labs/artifacts/{id} |
| Read lab artifact | GET /v1/labs/artifacts/{id}/content |
| List lab documents | GET /v1/labs/documents |
| Create lab document | POST /v1/labs/documents |
| Get lab document | GET /v1/labs/documents/{id} |
| Delete lab document | DELETE /v1/labs/documents/{id} |
| Read lab events | GET /v1/labs/documents/{id}/events |
| List lab notes | GET /v1/labs/documents/{id}/notes |
| Add lab note | POST /v1/labs/documents/{id}/notes |
| List lab versions | GET /v1/labs/documents/{id}/versions |
| Create lab version | POST /v1/labs/documents/{id}/versions |
| Get lab version | GET /v1/labs/documents/{id}/versions/{n} |
| Get lab card | GET /v1/labs/documents/{id}/versions/{n}/card |
| List lab jobs | GET /v1/labs/jobs |
| Create lab job | POST /v1/labs/jobs |
| Get lab job | GET /v1/labs/jobs/{id} |
| Cancel lab job | DELETE /v1/labs/jobs/{id} |
| Get lab job usage | GET /v1/labs/jobs/{id}/usage |
| List lab kinds | GET /v1/labs/kinds |
| List lab tools | GET /v1/labs/kinds/{kind}/tools |
| Call lab tool | POST /v1/labs/kinds/{kind}/tools/{name} |
| Upload lab source | POST /v1/labs/uploads |
| Enroll lab worker | POST /v1/labs/workers |
| Finish lab worker job | POST /v1/labs/workers/finish |
| Heartbeat lab worker job | POST /v1/labs/workers/heartbeat |
| List lab worker inputs | POST /v1/labs/workers/inputs |
| Read lab worker input | POST /v1/labs/workers/inputs/file |
| Poll lab worker | POST /v1/labs/workers/poll |
| Start lab worker job | POST /v1/labs/workers/start |
| Revoke lab worker | DELETE /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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
after | query | string | No | |
host | query | string | No |
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
Content type: application/json
Type: object
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
Content type: application/json
Type: object
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
Content type: application/json
Type: object
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
Content type: application/json
Type: object
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Status | Meaning | Body |
|---|---|---|
| 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
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
after | query | string | No | |
host | query | string | No |
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
Content type: application/json
Type: object
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
Content type: application/json
Type: object
Response
200 — Account-owned result; Cache-Control: no-store, private.
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabArtifactLink
| Field | Type | Required | Description |
|---|---|---|---|
artifact | object | Yes | A file made from (or attached to) a version. |
artifact.id | string | Yes | |
artifact.version | object | Yes | 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.document | string | Yes | |
artifact.version.version | integer (uint64) | Yes | |
artifact.role | one of "render", "poster", "frame", "strip", "export", "build", "replay", "source" | Yes | |
artifact.media_type | string | Yes | |
artifact.sha256 | string | Yes | |
artifact.size | integer (uint64) | Yes | |
artifact.class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
artifact.no_training | boolean | Yes | Inherited by everything made from a marked input. |
url | string | Yes | |
expires_seconds | integer (uint32) or null | No |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No | |
Range | header | string | No |
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
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
space | query | string | No | |
limit | query | integer | No | |
after | query | integer | No | |
kind | query | string | No |
Response
200 — Private, no-store result.
Type: LabDocuments
| Field | Type | Required | Description |
|---|---|---|---|
data | array of object | Yes | |
data[].id | string | Yes | |
data[].kind | string | Yes | A registered kind ( |
data[].schema | string | Yes | One of that kind's document schemas ( |
data[].title | string | Yes | |
data[].created_unix_ms | integer (uint64) | Yes | |
data[].latest | integer (uint64) | Yes | The latest version number (0 before the first). |
next | integer (uint64) or null | No |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Field | Type | Required | Description |
|---|---|---|---|
space | string | No | Default: |
id | string | Yes | |
kind | string | Yes | |
schema | string | Yes | |
title | string | Yes | |
content | any | Yes | |
summary | string | Yes |
Response
201 — Private, no-store result.
Type: LabVersion
| Field | Type | Required | Description |
|---|---|---|---|
document | string | Yes | |
number | integer (uint64) | Yes | |
parent | integer (uint64) or null | No | |
author | string | Yes | A person, or a chat turn ( |
summary | string | Yes | |
created_unix_ms | integer (uint64) | Yes | |
schema | string | Yes | |
content | any | Yes | |
content_sha256 | string | Yes | [ |
report | object | No | The kind's check report for this content. Default: |
report.warnings | array of string | No | Default: |
report.facts | any | No | Kind-specific facts (mass, duration, sketch freedom, ...). Default: |
assets | array of object | No | Every file the content uses. Default: |
assets[].location | string | Yes | A path on the host or an object in the space's storage. |
assets[].sha256 | string | Yes | |
assets[].class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabDocumentMeta
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | |
kind | string | Yes | A registered kind ( |
schema | string | Yes | One of that kind's document schemas ( |
title | string | Yes | |
created_unix_ms | integer (uint64) | Yes | |
latest | integer (uint64) | Yes | The latest version number (0 before the first). |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabDeleted
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | |
deleted | boolean | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No | |
limit | query | integer | No | |
after | query | integer | No | |
since | query | integer | No | |
Last-Event-ID | header | string | No |
Response
200 — Private, no-store result.
Type: LabEvents
| Field | Type | Required | Description |
|---|---|---|---|
data | array of object | Yes | |
data[].cursor | integer (uint64) | Yes | |
data[].document | string | Yes | |
data[].at_unix_ms | integer (uint64) | Yes | |
data[].change | any | Yes | |
next | integer (uint64) or null | No |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No | |
limit | query | integer | No | |
after | query | integer | No |
Response
200 — Private, no-store result.
Type: LabNotes
| Field | Type | Required | Description |
|---|---|---|---|
data | array of object | Yes | |
data[].subject | object | Yes | 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.document | string | Yes | |
data[].subject.version | integer (uint64) | Yes | |
data[].locator | object | Yes | Where in a version a note points. |
data[].author | string | Yes | |
data[].text | string | Yes | |
data[].created_unix_ms | integer (uint64) | Yes | |
next | integer (uint64) or null | No |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
Content type: application/json
Type: LabAddNote
| Field | Type | Required | Description |
|---|---|---|---|
space | string | No | Default: |
version | integer (uint64) | Yes | |
locator | object | Yes | Where in a version a note points. |
text | string | Yes |
Response
201 — Private, no-store result.
Type: LabSaved
| Field | Type | Required | Description |
|---|---|---|---|
saved | boolean | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No | |
limit | query | integer | No | |
after | query | integer | No |
Response
200 — Private, no-store result.
Type: LabVersions
| Field | Type | Required | Description |
|---|---|---|---|
data | array of object | Yes | |
data[].document | string | Yes | |
data[].number | integer (uint64) | Yes | |
data[].parent | integer (uint64) or null | No | |
data[].author | string | Yes | A person, or a chat turn ( |
data[].summary | string | Yes | |
data[].created_unix_ms | integer (uint64) | Yes | |
data[].schema | string | Yes | |
data[].content | any | Yes | |
data[].content_sha256 | string | Yes | [ |
data[].report | object | No | The kind's check report for this content. Default: |
data[].report.warnings | array of string | No | Default: |
data[].report.facts | any | No | Kind-specific facts (mass, duration, sketch freedom, ...). Default: |
data[].assets | array of object | No | Every file the content uses. Default: |
data[].assets[].location | string | Yes | A path on the host or an object in the space's storage. |
data[].assets[].sha256 | string | Yes | |
data[].assets[].class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
next | integer (uint64) or null | No |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Request body
Content type: application/json
Type: LabEditDocument
| Field | Type | Required | Description |
|---|---|---|---|
space | string | No | Default: |
base | integer (uint64) | Yes | |
change | object | Yes | |
summary | string | Yes |
Response
201 — Private, no-store result.
Type: LabVersion
| Field | Type | Required | Description |
|---|---|---|---|
document | string | Yes | |
number | integer (uint64) | Yes | |
parent | integer (uint64) or null | No | |
author | string | Yes | A person, or a chat turn ( |
summary | string | Yes | |
created_unix_ms | integer (uint64) | Yes | |
schema | string | Yes | |
content | any | Yes | |
content_sha256 | string | Yes | [ |
report | object | No | The kind's check report for this content. Default: |
report.warnings | array of string | No | Default: |
report.facts | any | No | Kind-specific facts (mass, duration, sketch freedom, ...). Default: |
assets | array of object | No | Every file the content uses. Default: |
assets[].location | string | Yes | A path on the host or an object in the space's storage. |
assets[].sha256 | string | Yes | |
assets[].class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
n | path | integer | Yes | |
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabVersion
| Field | Type | Required | Description |
|---|---|---|---|
document | string | Yes | |
number | integer (uint64) | Yes | |
parent | integer (uint64) or null | No | |
author | string | Yes | A person, or a chat turn ( |
summary | string | Yes | |
created_unix_ms | integer (uint64) | Yes | |
schema | string | Yes | |
content | any | Yes | |
content_sha256 | string | Yes | [ |
report | object | No | The kind's check report for this content. Default: |
report.warnings | array of string | No | Default: |
report.facts | any | No | Kind-specific facts (mass, duration, sketch freedom, ...). Default: |
assets | array of object | No | Every file the content uses. Default: |
assets[].location | string | Yes | A path on the host or an object in the space's storage. |
assets[].sha256 | string | Yes | |
assets[].class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
n | path | integer | Yes | |
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabCard
| Field | Type | Required | Description |
|---|---|---|---|
schema | string | No | Default: |
kind | string | Yes | |
document | string | Yes | |
version | integer (uint64) | Yes | |
title | string | Yes | |
summary | string | No | Default: |
state | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" or null | No | The job the card waits on, if any. Default: |
state_text | string or null | No | Plain words about the state ("Rendering the preview, about 3 min"). Default: |
refusal | object or null | No | A change a kind won't accept, with the sentence every surface shows. Default: |
refusal.code | string | Yes | A stable code clients can branch on ( |
refusal.message | string | Yes | Plain words, shown as is. |
view | one of "video", "image", "compare", "model3d", "playable", "report", "none" or always "unknown" | Yes | |
primary | string or null | No | Artifact ids; clients fetch them through the API with their own access. Default: |
poster | string or null | No | Default: |
strip | array of string | No | Default: |
compare | object or null | No | Default: |
compare.a | object | Yes | 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.document | string | Yes | |
compare.a.version | integer (uint64) | Yes | |
compare.b | object | Yes | 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.document | string | Yes | |
compare.b.version | integer (uint64) | Yes | |
compare.at | object | No | Where in a version a note points. Default: |
compare.a_primary | string or null | No | Default: |
compare.b_primary | string or null | No | Default: |
notes | array of object | No | Default: |
notes[].locator | object | Yes | Where in a version a note points. |
notes[].author | string | Yes | |
notes[].text | string | Yes | |
page | string or null | No | The kind's deeper page (player, viewport, game). Default: |
private_local | boolean | No | Set when an input must stay on its host; shown on the card. Default: |
detail | any | No | Kind-specific; clients that don't know it ignore it. Default: |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
space | query | string | No | |
limit | query | integer | No | |
after | query | integer | No | |
document | query | string | Yes |
Response
200 — Private, no-store result.
Type: LabJobs
| Field | Type | Required | Description |
|---|---|---|---|
data | array of object | Yes | |
data[].id | string | Yes | |
data[].spec | object | Yes | 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.kind | string | Yes | |
data[].spec.type | string | Yes | Kind-defined: |
data[].spec.version | object | Yes | 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.document | string | Yes | |
data[].spec.version.version | integer (uint64) | Yes | |
data[].spec.params | any | No | Default: |
data[].spec.requirements | object | No | What a placement must offer to take a job. Default: |
data[].spec.requirements.cpu_millis | integer (uint64) | No | Minimum CPU capacity, in thousandths of one core (0 uses the runner default). |
data[].spec.requirements.memory_bytes | integer (uint64) | No | Minimum available memory (0 uses the runner default). |
data[].spec.requirements.gpu | boolean | No | Default: |
data[].spec.requirements.tools | array of string | No | Programs the job runs ( |
data[].spec.requirements.max_seconds | integer (uint64) | No | Default: |
data[].spec.requirements.private_local | boolean | No | Set when an input is [ |
data[].spec.requirements.asset_classes | array 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_use | one of "training", "evaluation", "trace", null | No | Explicit use of inputs by a model; absent for ordinary rendering. |
data[].status | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
data[].message | string or null | No | Plain words for a failure or a wait ("No computer that has these
files is online"). Default: |
data[].estimate_seconds | number (double) or null | No | Seconds the job is expected to take, when known. Default: |
data[].artifacts | array of string | No | Default: |
next | integer (uint64) or null | No |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
Idempotency-Key | header | string | Yes |
Request body
Content type: application/json
Type: LabCreateJob
| Field | Type | Required | Description |
|---|---|---|---|
space | string | No | Default: |
version | object | Yes | 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.document | string | Yes | |
version.version | integer (uint64) | Yes | |
want | object | Yes | What a caller wants made from a version. |
Response
201 — Private, no-store result.
Type: LabJobState
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | |
spec | object | Yes | 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.kind | string | Yes | |
spec.type | string | Yes | Kind-defined: |
spec.version | object | Yes | 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.document | string | Yes | |
spec.version.version | integer (uint64) | Yes | |
spec.params | any | No | Default: |
spec.requirements | object | No | What a placement must offer to take a job. Default: |
spec.requirements.cpu_millis | integer (uint64) | No | Minimum CPU capacity, in thousandths of one core (0 uses the runner default). |
spec.requirements.memory_bytes | integer (uint64) | No | Minimum available memory (0 uses the runner default). |
spec.requirements.gpu | boolean | No | Default: |
spec.requirements.tools | array of string | No | Programs the job runs ( |
spec.requirements.max_seconds | integer (uint64) | No | Default: |
spec.requirements.private_local | boolean | No | Set when an input is [ |
spec.requirements.asset_classes | array 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_use | one of "training", "evaluation", "trace", null | No | Explicit use of inputs by a model; absent for ordinary rendering. |
status | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
message | string or null | No | Plain words for a failure or a wait ("No computer that has these
files is online"). Default: |
estimate_seconds | number (double) or null | No | Seconds the job is expected to take, when known. Default: |
artifacts | array of string | No | Default: |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabJobState
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | |
spec | object | Yes | 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.kind | string | Yes | |
spec.type | string | Yes | Kind-defined: |
spec.version | object | Yes | 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.document | string | Yes | |
spec.version.version | integer (uint64) | Yes | |
spec.params | any | No | Default: |
spec.requirements | object | No | What a placement must offer to take a job. Default: |
spec.requirements.cpu_millis | integer (uint64) | No | Minimum CPU capacity, in thousandths of one core (0 uses the runner default). |
spec.requirements.memory_bytes | integer (uint64) | No | Minimum available memory (0 uses the runner default). |
spec.requirements.gpu | boolean | No | Default: |
spec.requirements.tools | array of string | No | Programs the job runs ( |
spec.requirements.max_seconds | integer (uint64) | No | Default: |
spec.requirements.private_local | boolean | No | Set when an input is [ |
spec.requirements.asset_classes | array 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_use | one of "training", "evaluation", "trace", null | No | Explicit use of inputs by a model; absent for ordinary rendering. |
status | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
message | string or null | No | Plain words for a failure or a wait ("No computer that has these
files is online"). Default: |
estimate_seconds | number (double) or null | No | Seconds the job is expected to take, when known. Default: |
artifacts | array of string | No | Default: |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabJobState
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | |
spec | object | Yes | 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.kind | string | Yes | |
spec.type | string | Yes | Kind-defined: |
spec.version | object | Yes | 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.document | string | Yes | |
spec.version.version | integer (uint64) | Yes | |
spec.params | any | No | Default: |
spec.requirements | object | No | What a placement must offer to take a job. Default: |
spec.requirements.cpu_millis | integer (uint64) | No | Minimum CPU capacity, in thousandths of one core (0 uses the runner default). |
spec.requirements.memory_bytes | integer (uint64) | No | Minimum available memory (0 uses the runner default). |
spec.requirements.gpu | boolean | No | Default: |
spec.requirements.tools | array of string | No | Programs the job runs ( |
spec.requirements.max_seconds | integer (uint64) | No | Default: |
spec.requirements.private_local | boolean | No | Set when an input is [ |
spec.requirements.asset_classes | array 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_use | one of "training", "evaluation", "trace", null | No | Explicit use of inputs by a model; absent for ordinary rendering. |
status | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
message | string or null | No | Plain words for a failure or a wait ("No computer that has these
files is online"). Default: |
estimate_seconds | number (double) or null | No | Seconds the job is expected to take, when known. Default: |
artifacts | array of string | No | Default: |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | |
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabWorkerUsage (array of object)
| Field | Type | Required | Description |
|---|---|---|---|
[].job | string | Yes | |
[].attempt | integer (uint64) | Yes | |
[].worker | string | Yes | |
[].account | string | Yes | |
[].space | object | Yes | 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. |
[].placement | one of "server", "cloud", "enrolled" | Yes | The service binds this value to a worker's enrollment, never a poll argument. |
[].started_unix_ms | integer (uint64) or null | No | |
[].observed_until_unix_ms | integer (uint64) | Yes | |
[].observed_wall_ms | integer (uint64) or null | No | Time between service observations, not CPU usage or provider billable time. |
[].outcome | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
[].charge | integer (uint64) or null | No |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabKinds
| Field | Type | Required | Description |
|---|---|---|---|
data | array of object | Yes | |
data[].kind | string | Yes | Stable id ( |
data[].name | string | Yes | |
data[].schemas | array of string | Yes | |
data[].tool_prefix | string | Yes | Every tool name starts with this ( |
data[].doc_arg | string | Yes | The argument a tool names its document by ( |
data[].tools | array of object | Yes | |
data[].tools[].name | string | Yes | |
data[].tools[].description | string | Yes | |
data[].tools[].parameters | any | Yes | |
data[].job_types | array of string | Yes | |
data[].job_requirements | object | No | Minimum resources and maximum run time for each supported job type. |
data[].views | array of one of "video", "image", "compare", "model3d", "playable", "report", "none" or always "unknown" | Yes | |
data[].limits | object | Yes | |
data[].limits.max_doc_bytes | integer (uint64) | Yes | |
data[].limits.max_docs_per_space | integer (uint64) | Yes | |
data[].limits.max_versions_per_doc | integer (uint64) | Yes | |
data[].limits.max_args_bytes | integer (uint64) | Yes | |
data[].limits.runs_per_hour | integer (uint64) | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
kind | path | string | Yes | |
space | query | string | No |
Response
200 — Private, no-store result.
Type: LabTools
| Field | Type | Required | Description |
|---|---|---|---|
data | array of object | Yes | |
data[].name | string | Yes | |
data[].description | string | Yes | |
data[].parameters | any | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
kind | path | string | Yes | |
name | path | string | Yes | |
Idempotency-Key | header | string | No |
Request body
Content type: application/json
Type: LabToolCall
| Field | Type | Required | Description |
|---|---|---|---|
space | string | No | Default: |
chat | string or null | No | |
base | integer (uint64) or null | No | |
arguments | any | Yes |
Response
200 — Private, no-store result.
Type: LabToolResult
| Field | Type | Required | Description |
|---|---|---|---|
result | any | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Field | Type | Required | Description |
|---|---|---|---|
space | string | No | Default: |
version | object | Yes | 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.document | string | Yes | |
version.version | integer (uint64) | Yes | |
media_type | string | Yes | |
class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
no_training | boolean | No | Default: |
content_base64 | string | Yes |
Response
201 — Private, no-store result.
Type: LabArtifact
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | |
version | object | Yes | 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.document | string | Yes | |
version.version | integer (uint64) | Yes | |
role | one of "render", "poster", "frame", "strip", "export", "build", "replay", "source" | Yes | |
media_type | string | Yes | |
sha256 | string | Yes | |
size | integer (uint64) | Yes | |
class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
no_training | boolean | Yes | Inherited by everything made from a marked input. |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Field | Type | Required | Description |
|---|---|---|---|
space | string | No | Default: |
capabilities | object | Yes | |
capabilities.worker | string | Yes | |
capabilities.placement | one of "server", "cloud", "enrolled" | Yes | The service binds this value to a worker's enrollment, never a poll argument. |
capabilities.cpu_millis | integer (uint64) | Yes | |
capabilities.memory_bytes | integer (uint64) | Yes | |
capabilities.gpu | boolean | Yes | |
capabilities.tools | array of string | Yes | |
capabilities.jobs | array of string | Yes | Supported pairs, for example |
capabilities.local_assets | array of string | Yes | Private input checksums already present on this enrolled host. |
capabilities.max_seconds | integer (uint64) | Yes | |
lifetime_ms | integer (uint64) | No | Default: |
Response
200 — Private, no-store result.
Type: LabWorkerEnrolled
| Field | Type | Required | Description |
|---|---|---|---|
worker | object | Yes | |
worker.id | string | Yes | |
worker.account | string | Yes | |
worker.space | object | Yes | 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.capabilities | object | Yes | |
worker.capabilities.worker | string | Yes | |
worker.capabilities.placement | one of "server", "cloud", "enrolled" | Yes | The service binds this value to a worker's enrollment, never a poll argument. |
worker.capabilities.cpu_millis | integer (uint64) | Yes | |
worker.capabilities.memory_bytes | integer (uint64) | Yes | |
worker.capabilities.gpu | boolean | Yes | |
worker.capabilities.tools | array of string | Yes | |
worker.capabilities.jobs | array of string | Yes | Supported pairs, for example |
worker.capabilities.local_assets | array of string | Yes | Private input checksums already present on this enrolled host. |
worker.capabilities.max_seconds | integer (uint64) | Yes | |
worker.expires_unix_ms | integer (uint64) | Yes | |
worker.revoked | boolean | Yes | |
worker.issuer_session | string or null | No | The issuing app/login-key session reference, never its bearer token. |
token | string | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Field | Type | Required | Description |
|---|---|---|---|
job | string | Yes | |
attempt | integer (uint64) | Yes | |
status | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
outputs | array of object | No | Default: |
outputs[].role | one of "render", "poster", "frame", "strip", "export", "build", "replay", "source" | Yes | |
outputs[].media_type | string | Yes | |
outputs[].content_base64 | string | Yes |
Response
200 — Private, no-store result.
Type: LabJobState
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | |
spec | object | Yes | 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.kind | string | Yes | |
spec.type | string | Yes | Kind-defined: |
spec.version | object | Yes | 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.document | string | Yes | |
spec.version.version | integer (uint64) | Yes | |
spec.params | any | No | Default: |
spec.requirements | object | No | What a placement must offer to take a job. Default: |
spec.requirements.cpu_millis | integer (uint64) | No | Minimum CPU capacity, in thousandths of one core (0 uses the runner default). |
spec.requirements.memory_bytes | integer (uint64) | No | Minimum available memory (0 uses the runner default). |
spec.requirements.gpu | boolean | No | Default: |
spec.requirements.tools | array of string | No | Programs the job runs ( |
spec.requirements.max_seconds | integer (uint64) | No | Default: |
spec.requirements.private_local | boolean | No | Set when an input is [ |
spec.requirements.asset_classes | array 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_use | one of "training", "evaluation", "trace", null | No | Explicit use of inputs by a model; absent for ordinary rendering. |
status | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
message | string or null | No | Plain words for a failure or a wait ("No computer that has these
files is online"). Default: |
estimate_seconds | number (double) or null | No | Seconds the job is expected to take, when known. Default: |
artifacts | array of string | No | Default: |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Field | Type | Required | Description |
|---|---|---|---|
job | string | Yes | |
attempt | integer (uint64) | Yes |
Response
200 — Private, no-store result.
Type: LabWorkerWork
| Field | Type | Required | Description |
|---|---|---|---|
assignment | object | Yes | |
assignment.lease | object | Yes | |
assignment.lease.job | object | Yes | |
assignment.lease.job.id | string | Yes | |
assignment.lease.job.spec | object | Yes | 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.kind | string | Yes | |
assignment.lease.job.spec.type | string | Yes | Kind-defined: |
assignment.lease.job.spec.version | object | Yes | 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.document | string | Yes | |
assignment.lease.job.spec.version.version | integer (uint64) | Yes | |
assignment.lease.job.spec.params | any | No | Default: |
assignment.lease.job.spec.requirements | object | No | What a placement must offer to take a job. Default: |
assignment.lease.job.spec.requirements.cpu_millis | integer (uint64) | No | Minimum CPU capacity, in thousandths of one core (0 uses the runner default). |
assignment.lease.job.spec.requirements.memory_bytes | integer (uint64) | No | Minimum available memory (0 uses the runner default). |
assignment.lease.job.spec.requirements.gpu | boolean | No | Default: |
assignment.lease.job.spec.requirements.tools | array of string | No | Programs the job runs ( |
assignment.lease.job.spec.requirements.max_seconds | integer (uint64) | No | Default: |
assignment.lease.job.spec.requirements.private_local | boolean | No | Set when an input is [ |
assignment.lease.job.spec.requirements.asset_classes | array 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_use | one of "training", "evaluation", "trace", null | No | Explicit use of inputs by a model; absent for ordinary rendering. |
assignment.lease.job.status | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
assignment.lease.job.message | string or null | No | Plain words for a failure or a wait ("No computer that has these
files is online"). Default: |
assignment.lease.job.estimate_seconds | number (double) or null | No | Seconds the job is expected to take, when known. Default: |
assignment.lease.job.artifacts | array of string | No | Default: |
assignment.lease.worker | string | Yes | |
assignment.lease.attempt | integer (uint64) | Yes | |
assignment.lease.expires_unix_ms | integer (uint64) | Yes | |
assignment.lease.started | boolean | Yes | |
assignment.started_unix_ms | integer (uint64) or null | No | The service records this before returning permission to execute. |
version | object | Yes | One immutable version. Made only by a kind's |
version.document | string | Yes | |
version.number | integer (uint64) | Yes | |
version.parent | integer (uint64) or null | No | |
version.author | string | Yes | A person, or a chat turn ( |
version.summary | string | Yes | |
version.created_unix_ms | integer (uint64) | Yes | |
version.schema | string | Yes | |
version.content | any | Yes | |
version.content_sha256 | string | Yes | [ |
version.report | object | No | The kind's check report for this content. Default: |
version.report.warnings | array of string | No | Default: |
version.report.facts | any | No | Kind-specific facts (mass, duration, sketch freedom, ...). Default: |
version.assets | array of object | No | Every file the content uses. Default: |
version.assets[].location | string | Yes | A path on the host or an object in the space's storage. |
version.assets[].sha256 | string | Yes | |
version.assets[].class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
requirements | object | Yes | |
requirements.cpu_millis | integer (uint64) | Yes | |
requirements.memory_bytes | integer (uint64) | Yes | |
requirements.gpu | boolean | Yes | |
requirements.tools | array of string | Yes | |
requirements.max_seconds | integer (uint64) | Yes | |
requirements.private_local | boolean | Yes | |
requirements.local_assets | array of string | Yes | |
requirements.no_training | boolean | Yes | |
requirements.job | string | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Field | Type | Required | Description |
|---|---|---|---|
job | string | Yes | |
attempt | integer (uint64) | Yes |
Response
200 — Private, no-store result.
Type: LabWorkerInputs
| Field | Type | Required | Description |
|---|---|---|---|
versions | array of object | Yes | The job's version first, then each referenced version once. |
versions[].document | string | Yes | |
versions[].number | integer (uint64) | Yes | |
versions[].parent | integer (uint64) or null | No | |
versions[].author | string | Yes | A person, or a chat turn ( |
versions[].summary | string | Yes | |
versions[].created_unix_ms | integer (uint64) | Yes | |
versions[].schema | string | Yes | |
versions[].content | any | Yes | |
versions[].content_sha256 | string | Yes | [ |
versions[].report | object | No | The kind's check report for this content. Default: |
versions[].report.warnings | array of string | No | Default: |
versions[].report.facts | any | No | Kind-specific facts (mass, duration, sketch freedom, ...). Default: |
versions[].assets | array of object | No | Every file the content uses. Default: |
versions[].assets[].location | string | Yes | A path on the host or an object in the space's storage. |
versions[].assets[].sha256 | string | Yes | |
versions[].assets[].class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
files | array of object | Yes | |
files[].id | string | Yes | |
files[].version | object | Yes | 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.document | string | Yes | |
files[].version.version | integer (uint64) | Yes | |
files[].role | one of "render", "poster", "frame", "strip", "export", "build", "replay", "source" | Yes | |
files[].media_type | string | Yes | |
files[].sha256 | string | Yes | |
files[].size | integer (uint64) | Yes | |
files[].class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
files[].no_training | boolean | Yes | Inherited by everything made from a marked input. |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Field | Type | Required | Description |
|---|---|---|---|
job | string | Yes | |
attempt | integer (uint64) | Yes | |
artifact | string | Yes |
Response
200 — Private, no-store result.
Content type: application/octet-stream
Type: LabBytes (string (binary))
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Field | Type | Required | Description |
|---|---|---|---|
wait_seconds | integer (uint64) | No | Default: |
Response
200 — Private, no-store result.
Type: LabWorkerAvailable
| Field | Type | Required | Description |
|---|---|---|---|
work | object or null | No | |
work.assignment | object | Yes | |
work.assignment.lease | object | Yes | |
work.assignment.lease.job | object | Yes | |
work.assignment.lease.job.id | string | Yes | |
work.assignment.lease.job.spec | object | Yes | 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.kind | string | Yes | |
work.assignment.lease.job.spec.type | string | Yes | Kind-defined: |
work.assignment.lease.job.spec.version | object | Yes | 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.params | any | No | Default: |
work.assignment.lease.job.spec.requirements | object | No | What a placement must offer to take a job. Default: |
work.assignment.lease.job.status | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
work.assignment.lease.job.message | string or null | No | Plain words for a failure or a wait ("No computer that has these
files is online"). Default: |
work.assignment.lease.job.estimate_seconds | number (double) or null | No | Seconds the job is expected to take, when known. Default: |
work.assignment.lease.job.artifacts | array of string | No | Default: |
work.assignment.lease.worker | string | Yes | |
work.assignment.lease.attempt | integer (uint64) | Yes | |
work.assignment.lease.expires_unix_ms | integer (uint64) | Yes | |
work.assignment.lease.started | boolean | Yes | |
work.assignment.started_unix_ms | integer (uint64) or null | No | The service records this before returning permission to execute. |
work.version | object | Yes | One immutable version. Made only by a kind's |
work.version.document | string | Yes | |
work.version.number | integer (uint64) | Yes | |
work.version.parent | integer (uint64) or null | No | |
work.version.author | string | Yes | A person, or a chat turn ( |
work.version.summary | string | Yes | |
work.version.created_unix_ms | integer (uint64) | Yes | |
work.version.schema | string | Yes | |
work.version.content | any | Yes | |
work.version.content_sha256 | string | Yes | [ |
work.version.report | object | No | The kind's check report for this content. Default: |
work.version.report.warnings | array of string | No | Default: |
work.version.report.facts | any | No | Kind-specific facts (mass, duration, sketch freedom, ...). Default: |
work.version.assets | array of object | No | Every file the content uses. Default: |
work.version.assets[].location | string | Yes | A path on the host or an object in the space's storage. |
work.version.assets[].sha256 | string | Yes | |
work.version.assets[].class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
work.requirements | object | Yes | |
work.requirements.cpu_millis | integer (uint64) | Yes | |
work.requirements.memory_bytes | integer (uint64) | Yes | |
work.requirements.gpu | boolean | Yes | |
work.requirements.tools | array of string | Yes | |
work.requirements.max_seconds | integer (uint64) | Yes | |
work.requirements.private_local | boolean | Yes | |
work.requirements.local_assets | array of string | Yes | |
work.requirements.no_training | boolean | Yes | |
work.requirements.job | string | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Field | Type | Required | Description |
|---|---|---|---|
job | string | Yes | |
attempt | integer (uint64) | Yes |
Response
200 — Private, no-store result.
Type: LabWorkerWork
| Field | Type | Required | Description |
|---|---|---|---|
assignment | object | Yes | |
assignment.lease | object | Yes | |
assignment.lease.job | object | Yes | |
assignment.lease.job.id | string | Yes | |
assignment.lease.job.spec | object | Yes | 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.kind | string | Yes | |
assignment.lease.job.spec.type | string | Yes | Kind-defined: |
assignment.lease.job.spec.version | object | Yes | 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.document | string | Yes | |
assignment.lease.job.spec.version.version | integer (uint64) | Yes | |
assignment.lease.job.spec.params | any | No | Default: |
assignment.lease.job.spec.requirements | object | No | What a placement must offer to take a job. Default: |
assignment.lease.job.spec.requirements.cpu_millis | integer (uint64) | No | Minimum CPU capacity, in thousandths of one core (0 uses the runner default). |
assignment.lease.job.spec.requirements.memory_bytes | integer (uint64) | No | Minimum available memory (0 uses the runner default). |
assignment.lease.job.spec.requirements.gpu | boolean | No | Default: |
assignment.lease.job.spec.requirements.tools | array of string | No | Programs the job runs ( |
assignment.lease.job.spec.requirements.max_seconds | integer (uint64) | No | Default: |
assignment.lease.job.spec.requirements.private_local | boolean | No | Set when an input is [ |
assignment.lease.job.spec.requirements.asset_classes | array 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_use | one of "training", "evaluation", "trace", null | No | Explicit use of inputs by a model; absent for ordinary rendering. |
assignment.lease.job.status | one of "queued", "running", "done", "failed", "cancelled" or always "uncertain" | Yes | |
assignment.lease.job.message | string or null | No | Plain words for a failure or a wait ("No computer that has these
files is online"). Default: |
assignment.lease.job.estimate_seconds | number (double) or null | No | Seconds the job is expected to take, when known. Default: |
assignment.lease.job.artifacts | array of string | No | Default: |
assignment.lease.worker | string | Yes | |
assignment.lease.attempt | integer (uint64) | Yes | |
assignment.lease.expires_unix_ms | integer (uint64) | Yes | |
assignment.lease.started | boolean | Yes | |
assignment.started_unix_ms | integer (uint64) or null | No | The service records this before returning permission to execute. |
version | object | Yes | One immutable version. Made only by a kind's |
version.document | string | Yes | |
version.number | integer (uint64) | Yes | |
version.parent | integer (uint64) or null | No | |
version.author | string | Yes | A person, or a chat turn ( |
version.summary | string | Yes | |
version.created_unix_ms | integer (uint64) | Yes | |
version.schema | string | Yes | |
version.content | any | Yes | |
version.content_sha256 | string | Yes | [ |
version.report | object | No | The kind's check report for this content. Default: |
version.report.warnings | array of string | No | Default: |
version.report.facts | any | No | Kind-specific facts (mass, duration, sketch freedom, ...). Default: |
version.assets | array of object | No | Every file the content uses. Default: |
version.assets[].location | string | Yes | A path on the host or an object in the space's storage. |
version.assets[].sha256 | string | Yes | |
version.assets[].class | always "public" or always "private_local" or always "no_training" | Yes | How a file may travel. |
requirements | object | Yes | |
requirements.cpu_millis | integer (uint64) | Yes | |
requirements.memory_bytes | integer (uint64) | Yes | |
requirements.gpu | boolean | Yes | |
requirements.tools | array of string | Yes | |
requirements.max_seconds | integer (uint64) | Yes | |
requirements.private_local | boolean | Yes | |
requirements.local_assets | array of string | Yes | |
requirements.no_training | boolean | Yes | |
requirements.job | string | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Response
200 — Private, no-store result.
Type: LabWorkerRevoked
| Field | Type | Required | Description |
|---|---|---|---|
revoked | always true | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 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"