Dedalus Labs Machine Terminals API
The Machine Terminals API from Dedalus Labs — 3 operation(s) for machine terminals.
The Machine Terminals API from Dedalus Labs — 3 operation(s) for machine terminals.
openapi: 3.1.0
info:
title: Dedalus Audio Machine Terminals API
description: 'MCP gateway for AI agents. Mix-and-match any model with any tool from our marketplace.
## Authentication
Use Bearer token or X-API-Key header authentication:
```
Authorization: Bearer your-api-key-here
```
```
x-api-key: your-api-key-here
```
## Available Endpoints
- **GET /v1/models**: list available models
- **POST /v1/chat/completions**: Chat completions with MCP tools
- **GET /health**: Service health check'
version: 0.0.1
servers:
- url: https://api.dedaluslabs.ai
description: Official Dedalus API
tags:
- name: Machine Terminals
paths:
/v1/machines/{machine_id}/terminals:
get:
operationId: listMachineTerminals
parameters:
- in: header
name: X-Dedalus-Org-Id
schema:
type: string
- in: path
name: machine_id
required: true
schema:
type: string
- explode: false
in: query
name: limit
schema:
format: int64
type: integer
- explode: false
in: query
name: cursor
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TerminalListResponse'
description: OK
'401':
content:
application/json:
examples:
invalid_key:
value:
error_code: AUTH_INVALID
message: invalid Dedalus API key
retryable: false
missing_key:
value:
error_code: AUTH_REQUIRED
message: missing Dedalus API key
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Authentication required
'403':
content:
application/json:
examples:
org_mismatch:
value:
error_code: AUTH_ORG_MISMATCH
message: org scope does not match API key ownership
retryable: false
scope_forbidden:
value:
error_code: AUTH_SCOPE_FORBIDDEN
message: internal service authorization is required
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Forbidden
'429':
content:
application/json:
examples:
idempotency_in_flight:
value:
error_code: RATE_LIMITED
message: idempotency key is already in-flight
retryable: true
retry_after_ms: 250
mutation_rate_limited:
value:
error_code: RATE_LIMITED
message: mutation rate limit exceeded
retryable: true
retry_after_ms: 84
details:
rate_limit_scope: read_lifecycle_routes
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Rate limited
'503':
content:
application/json:
examples:
mutation_limiter_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
message: mutation rate limiter unavailable
retryable: true
details:
rate_limit_backend: redis
rate_limit_scope: read_lifecycle_routes
runtime_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
message: runtime unavailable
retryable: true
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Dependency unavailable
default:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ErrorModel'
description: Error
summary: List terminals
tags:
- Machine Terminals
post:
operationId: createMachineTerminal
parameters:
- in: header
name: X-Dedalus-Org-Id
schema:
type: string
- in: path
name: machine_id
required: true
schema:
type: string
- in: header
name: Idempotency-Key
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTerminalRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TerminalResponse'
description: OK
'401':
content:
application/json:
examples:
invalid_key:
value:
error_code: AUTH_INVALID
message: invalid Dedalus API key
retryable: false
missing_key:
value:
error_code: AUTH_REQUIRED
message: missing Dedalus API key
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Authentication required
'403':
content:
application/json:
examples:
org_mismatch:
value:
error_code: AUTH_ORG_MISMATCH
message: org scope does not match API key ownership
retryable: false
scope_forbidden:
value:
error_code: AUTH_SCOPE_FORBIDDEN
message: internal service authorization is required
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Forbidden
'409':
content:
application/json:
examples:
idempotency_key_reused:
value:
error_code: IDEMPOTENCY_KEY_REUSED
message: idempotency key reused with different request parameters
retryable: false
details:
expected_request_hash: 9ad5f2ad
provided_request_hash: a2b7e8d4
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Create conflict
'429':
content:
application/json:
examples:
idempotency_in_flight:
value:
error_code: RATE_LIMITED
message: idempotency key is already in-flight
retryable: true
retry_after_ms: 250
mutation_rate_limited:
value:
error_code: RATE_LIMITED
message: mutation rate limit exceeded
retryable: true
retry_after_ms: 84
details:
rate_limit_scope: mutating_lifecycle_routes
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Rate limited
'503':
content:
application/json:
examples:
mutation_limiter_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
message: mutation rate limiter unavailable
retryable: true
details:
rate_limit_backend: redis
rate_limit_scope: mutating_lifecycle_routes
runtime_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
message: runtime unavailable
retryable: true
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Dependency unavailable
default:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ErrorModel'
description: Error
summary: Create terminal
tags:
- Machine Terminals
/v1/machines/{machine_id}/terminals/{terminal_id}:
delete:
operationId: deleteMachineTerminal
parameters:
- in: header
name: X-Dedalus-Org-Id
schema:
type: string
- in: path
name: machine_id
required: true
schema:
type: string
- in: path
name: terminal_id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TerminalResponse'
description: OK
'401':
content:
application/json:
examples:
invalid_key:
value:
error_code: AUTH_INVALID
message: invalid Dedalus API key
retryable: false
missing_key:
value:
error_code: AUTH_REQUIRED
message: missing Dedalus API key
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Authentication required
'403':
content:
application/json:
examples:
org_mismatch:
value:
error_code: AUTH_ORG_MISMATCH
message: org scope does not match API key ownership
retryable: false
scope_forbidden:
value:
error_code: AUTH_SCOPE_FORBIDDEN
message: internal service authorization is required
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Forbidden
'429':
content:
application/json:
examples:
idempotency_in_flight:
value:
error_code: RATE_LIMITED
message: idempotency key is already in-flight
retryable: true
retry_after_ms: 250
mutation_rate_limited:
value:
error_code: RATE_LIMITED
message: mutation rate limit exceeded
retryable: true
retry_after_ms: 84
details:
rate_limit_scope: mutating_lifecycle_routes
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Rate limited
'503':
content:
application/json:
examples:
mutation_limiter_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
message: mutation rate limiter unavailable
retryable: true
details:
rate_limit_backend: redis
rate_limit_scope: mutating_lifecycle_routes
runtime_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
message: runtime unavailable
retryable: true
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Dependency unavailable
default:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ErrorModel'
description: Error
summary: Delete terminal
tags:
- Machine Terminals
get:
operationId: getMachineTerminal
parameters:
- in: header
name: X-Dedalus-Org-Id
schema:
type: string
- in: path
name: machine_id
required: true
schema:
type: string
- in: path
name: terminal_id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TerminalResponse'
description: OK
'401':
content:
application/json:
examples:
invalid_key:
value:
error_code: AUTH_INVALID
message: invalid Dedalus API key
retryable: false
missing_key:
value:
error_code: AUTH_REQUIRED
message: missing Dedalus API key
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Authentication required
'403':
content:
application/json:
examples:
org_mismatch:
value:
error_code: AUTH_ORG_MISMATCH
message: org scope does not match API key ownership
retryable: false
scope_forbidden:
value:
error_code: AUTH_SCOPE_FORBIDDEN
message: internal service authorization is required
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Forbidden
'429':
content:
application/json:
examples:
idempotency_in_flight:
value:
error_code: RATE_LIMITED
message: idempotency key is already in-flight
retryable: true
retry_after_ms: 250
mutation_rate_limited:
value:
error_code: RATE_LIMITED
message: mutation rate limit exceeded
retryable: true
retry_after_ms: 84
details:
rate_limit_scope: read_lifecycle_routes
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Rate limited
'503':
content:
application/json:
examples:
mutation_limiter_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
message: mutation rate limiter unavailable
retryable: true
details:
rate_limit_backend: redis
rate_limit_scope: read_lifecycle_routes
runtime_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
message: runtime unavailable
retryable: true
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Dependency unavailable
default:
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ErrorModel'
description: Error
summary: Get terminal
tags:
- Machine Terminals
/v1/machines/{machine_id}/terminals/{terminal_id}/stream:
get:
description: Upgrades to a WebSocket connection for interactive terminal I/O. Clients send JSON `TerminalClientEvent` messages and receive JSON `TerminalServerEvent` messages. Terminal byte streams are base64-encoded inside `input` and `output` events; `resize` events use integer `width` and `height` fields.
operationId: connectMachineTerminal
parameters:
- description: Organization ID header applied to all DCS requests.
in: header
name: X-Dedalus-Org-Id
schema:
format: uuid
type: string
- description: Machine identifier.
in: path
name: machine_id
required: true
schema:
type: string
- description: Terminal identifier.
in: path
name: terminal_id
required: true
schema:
type: string
responses:
'101':
description: Switching Protocols to WebSocket
'401':
content:
application/json:
examples:
invalid_key:
value:
error_code: AUTH_INVALID
message: invalid Dedalus API key
retryable: false
missing_key:
value:
error_code: AUTH_REQUIRED
message: missing Dedalus API key
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Authentication required
'403':
content:
application/json:
examples:
org_mismatch:
value:
error_code: AUTH_ORG_MISMATCH
message: org scope does not match API key ownership
retryable: false
scope_forbidden:
value:
error_code: AUTH_SCOPE_FORBIDDEN
message: internal service authorization is required
retryable: false
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Forbidden
'409':
content:
application/json:
examples:
terminal_closed:
value:
error_code: INVALID_STATE
message: terminal is not ready for streaming
retryable: false
details:
current_status: closed
expected_status: ready
terminal_not_ready:
value:
error_code: INVALID_STATE
message: terminal is not ready for streaming
retryable: true
retry_after_ms: 1000
details:
current_status: wake_in_progress
expected_status: ready
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Terminal is not ready for streaming
'429':
content:
application/json:
examples:
idempotency_in_flight:
value:
error_code: RATE_LIMITED
message: idempotency key is already in-flight
retryable: true
retry_after_ms: 250
mutation_rate_limited:
value:
error_code: RATE_LIMITED
message: mutation rate limit exceeded
retryable: true
retry_after_ms: 84
details:
rate_limit_scope: read_lifecycle_routes
schema:
additionalProperties: false
properties:
details:
additionalProperties:
type: string
type: object
error_code:
type: string
message:
type: string
retry_after_ms:
format: int64
type: integer
retryable:
type: boolean
required:
- error_code
- message
- retryable
type: object
description: Rate limited
'503':
content:
application/json:
examples:
mutation_limiter_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
message: mutation rate limiter unavailable
retryable: true
details:
rate_limit_backend: redis
rate_limit_scope: read_lifecycle_routes
runtime_unavailable:
value:
error_code: DEPENDENCY_UNAVAILABLE
# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dedaluslabs/refs/heads/main/openapi/dedaluslabs-machine-terminals-api-openapi.yml