Sandbox API

OSWorld

GenStudio DesktopEnv execute (`task.json` + desktop episode). Not Harbor `task.toml`. Prefer `/sandbox/osworld/v2`.

GenStudio DesktopEnv execute (task.json + desktop episode). Not Harbor task.toml. Prefer /sandbox/osworld/v2.

Every request needs a credential — see Authentication.

MethodPathSummary
GET/sandbox/osworld/api-versionsApi Versions
GET/sandbox/osworld/capabilitiesOSWorld execute capabilities
GET/sandbox/osworld/jobs/{job_id}Get OSWorld job status
GET/sandbox/osworld/jobs/{job_id}/artifactsList job artifacts
GET/sandbox/osworld/jobs/{job_id}/artifacts/archiveDownload job archive
POST/sandbox/osworld/jobs/{job_id}/cancelCancel OSWorld job
GET/sandbox/osworld/jobs/{job_id}/eventsSSE job events
POST/sandbox/osworld/jobs/execute-tasksEnqueue OSWorld execute job
GET/sandbox/osworld/v1/capabilitiesOSWorld execute capabilities
GET/sandbox/osworld/v1/jobs/{job_id}Get OSWorld job status
GET/sandbox/osworld/v1/jobs/{job_id}/artifactsList job artifacts
GET/sandbox/osworld/v1/jobs/{job_id}/artifacts/archiveDownload job archive
POST/sandbox/osworld/v1/jobs/{job_id}/cancelCancel OSWorld job
GET/sandbox/osworld/v1/jobs/{job_id}/eventsSSE job events
POST/sandbox/osworld/v1/jobs/execute-tasksEnqueue OSWorld execute job
GET/sandbox/osworld/v2/capabilitiesOSWorld execute capabilities
GET/sandbox/osworld/v2/jobs/{job_id}Get OSWorld job status
GET/sandbox/osworld/v2/jobs/{job_id}/artifactsList job artifacts
GET/sandbox/osworld/v2/jobs/{job_id}/artifacts/archiveDownload job archive
POST/sandbox/osworld/v2/jobs/{job_id}/cancelCancel OSWorld job
GET/sandbox/osworld/v2/jobs/{job_id}/eventsSSE job events
POST/sandbox/osworld/v2/jobs/execute-tasksEnqueue OSWorld execute job

Common headers

Accepted on every endpoint on this page.

NameInTypeRequiredDescription
x-correlation-idheaderstringnoEnd-to-end correlation id for this eval run. When set, the gateway and downstream services honor it verbatim in logs, Cloud Trace span attributes, async job payloads, and Langfuse trace.id. When omitted, the gateway generates a ULID and echoes it on the response.

Endpoints

Api Versions

GET /sandbox/osworld/api-versions

Responses

StatusDescriptionBody
200Successful Responseobject

OSWorld execute capabilities

GET /sandbox/osworld/capabilities

Responses

StatusDescriptionBody
200Successful Responseobject

Get OSWorld job status

GET /sandbox/osworld/jobs/{job_id}

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

List job artifacts

GET /sandbox/osworld/jobs/{job_id}/artifacts

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

Download job archive

GET /sandbox/osworld/jobs/{job_id}/artifacts/archive

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
presignedquerybooleanno
asquerystring | nullnoSet to "json" to receive {"url": ...} instead of a 307 redirect. Requires presigned=true.
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseany
422Validation ErrorHTTPValidationError

Cancel OSWorld job

POST /sandbox/osworld/jobs/{job_id}/cancel

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

SSE job events

GET /sandbox/osworld/jobs/{job_id}/events

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
Last-Event-IDheaderstring | nullno
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseany
422Validation ErrorHTTPValidationError

Enqueue OSWorld execute job

POST /sandbox/osworld/jobs/execute-tasks

Parameters

NameInTypeRequiredDescription
Idempotency-Keyheaderstring | nullno
X-Sandbox-Job-Idheaderstring | nullno
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Request body

application/json, required — OSWorldExecuteTasksRequest

FieldTypeRequiredDescription
task_slugstringyes
agentsOSWorldAgentBody[]yes
metadataobjectno
labelsobjectno
enginestring | nullnoIgnored — OSWorld service always runs DesktopEnv episodes
sandboxstring | nullno
image_refstring | nullno

Responses

StatusDescriptionBody
202Successful Responseobject
422Validation ErrorHTTPValidationError

OSWorld execute capabilities

GET /sandbox/osworld/v1/capabilities

Responses

StatusDescriptionBody
200Successful Responseobject

Get OSWorld job status

GET /sandbox/osworld/v1/jobs/{job_id}

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

List job artifacts

GET /sandbox/osworld/v1/jobs/{job_id}/artifacts

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

Download job archive

GET /sandbox/osworld/v1/jobs/{job_id}/artifacts/archive

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
presignedquerybooleanno
asquerystring | nullnoSet to "json" to receive {"url": ...} instead of a 307 redirect. Requires presigned=true.
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseany
422Validation ErrorHTTPValidationError

Cancel OSWorld job

POST /sandbox/osworld/v1/jobs/{job_id}/cancel

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

SSE job events

GET /sandbox/osworld/v1/jobs/{job_id}/events

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
Last-Event-IDheaderstring | nullno
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseany
422Validation ErrorHTTPValidationError

Enqueue OSWorld execute job

POST /sandbox/osworld/v1/jobs/execute-tasks

Parameters

NameInTypeRequiredDescription
Idempotency-Keyheaderstring | nullno
X-Sandbox-Job-Idheaderstring | nullno
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Request body

application/json, required — OSWorldExecuteTasksRequest

FieldTypeRequiredDescription
task_slugstringyes
agentsOSWorldAgentBody[]yes
metadataobjectno
labelsobjectno
enginestring | nullnoIgnored — OSWorld service always runs DesktopEnv episodes
sandboxstring | nullno
image_refstring | nullno

Responses

StatusDescriptionBody
202Successful Responseobject
422Validation ErrorHTTPValidationError

OSWorld execute capabilities

GET /sandbox/osworld/v2/capabilities

Responses

StatusDescriptionBody
200Successful Responseobject

Get OSWorld job status

GET /sandbox/osworld/v2/jobs/{job_id}

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

List job artifacts

GET /sandbox/osworld/v2/jobs/{job_id}/artifacts

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

Download job archive

GET /sandbox/osworld/v2/jobs/{job_id}/artifacts/archive

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
presignedquerybooleanno
asquerystring | nullnoSet to "json" to receive {"url": ...} instead of a 307 redirect. Requires presigned=true.
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseany
422Validation ErrorHTTPValidationError

Cancel OSWorld job

POST /sandbox/osworld/v2/jobs/{job_id}/cancel

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseobject
422Validation ErrorHTTPValidationError

SSE job events

GET /sandbox/osworld/v2/jobs/{job_id}/events

Parameters

NameInTypeRequiredDescription
job_idpathstringyes
Last-Event-IDheaderstring | nullno
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Responses

StatusDescriptionBody
200Successful Responseany
422Validation ErrorHTTPValidationError

Enqueue OSWorld execute job

POST /sandbox/osworld/v2/jobs/execute-tasks

Parameters

NameInTypeRequiredDescription
Idempotency-Keyheaderstring | nullno
X-Sandbox-Job-Idheaderstring | nullno
X-Sandbox-Project-Idheaderstring | nullnoProject to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted.
X-Sandbox-Tenant-Idheaderstring | nullnoTenant for this request. Must match the credential's tenant when the credential carries one.

Request body

application/json, required — OSWorldExecuteTasksRequest

FieldTypeRequiredDescription
task_slugstringyes
agentsOSWorldAgentBody[]yes
metadataobjectno
labelsobjectno
enginestring | nullnoIgnored — OSWorld service always runs DesktopEnv episodes
sandboxstring | nullno
image_refstring | nullno

Responses

StatusDescriptionBody
202Successful Responseobject
422Validation ErrorHTTPValidationError

Schemas

The object shapes referenced above.

HTTPValidationError

FieldTypeRequiredDescription
detailValidationError[]no

OSWorldAgentBody

FieldTypeRequiredDescription
namestringnoLogical agent label Default: "".
harbor_agentstringyesOSWorld agent id (GenStudio field name kept for compatibility)
modelstringyesprovider/model id (e.g. openai/gpt-4o). Required — same egress as Harbor.
pass_at_kintegernoDefault: 1.
paramsobjectno

OSWorldExecuteTasksRequest

FieldTypeRequiredDescription
task_slugstringyes
agentsOSWorldAgentBody[]yes
metadataobjectno
labelsobjectno
enginestring | nullnoIgnored — OSWorld service always runs DesktopEnv episodes
sandboxstring | nullno
image_refstring | nullno

ValidationError

FieldTypeRequiredDescription
locstring | integer[]yes
msgstringyes
typestringyes
inputanyno
ctxobjectno

Machine-readable spec: OpenAPI YAML.