Dedalus Labs Machine Lifecycle API
The Machine Lifecycle API from Dedalus Labs — 18 operation(s) for machine lifecycle.
The Machine Lifecycle API from Dedalus Labs — 18 operation(s) for machine lifecycle.
openapi: 3.1.0
info:
title: Dedalus Audio Machine Lifecycle 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 Lifecycle
paths:
/v1/machines:
get:
operationId: listMachines
parameters:
- in: header
name: X-Dedalus-Org-Id
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/MachineListResponse'
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 machines
tags:
- Machine Lifecycle
post:
operationId: createMachine
parameters:
- in: header
name: X-Dedalus-Org-Id
schema:
type: string
- in: header
name: Idempotency-Key
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMachineRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LifecycleResponse'
description: OK
headers:
ETag:
schema:
type: string
X-Dedalus-Storage-Operation-Id:
schema:
type:
- string
- 'null'
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/LifecycleResponse'
description: Create accepted and pending convergence
headers:
ETag:
schema:
type: string
X-Dedalus-Storage-Operation-Id:
schema:
type:
- string
- 'null'
'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 machine
tags:
- Machine Lifecycle
/v1/machines/{machine_id}:
delete:
operationId: deleteMachine
parameters:
- in: header
name: X-Dedalus-Org-Id
schema:
type: string
- in: path
name: machine_id
required: true
schema:
type: string
- in: header
name: If-Match
required: true
schema:
type: string
- in: header
name: Idempotency-Key
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LifecycleResponse'
description: OK
headers:
ETag:
schema:
type: string
X-Dedalus-Storage-Operation-Id:
schema:
type:
- string
- 'null'
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/LifecycleResponse'
description: Mutation accepted or in-progress
headers:
ETag:
schema:
type: string
X-Dedalus-Storage-Operation-Id:
schema:
type:
- string
- 'null'
'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:
conflict:
value:
error_code: REVISION_MISMATCH
message: revision mismatch
retryable: true
details:
expected_revision: '43'
provided_revision: '42'
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: Revision 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: Destroy machine
tags:
- Machine Lifecycle
get:
operationId: getMachine
parameters:
- in: header
name: X-Dedalus-Org-Id
schema:
type: string
- in: path
name: machine_id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LifecycleResponse'
description: OK
headers:
ETag:
schema:
type: string
'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 machine
tags:
- Machine Lifecycle
patch:
operationId: patchMachine
parameters:
- in: header
name: X-Dedalus-Org-Id
schema:
type: string
- in: path
name: machine_id
required: true
schema:
type: string
- in: header
name: If-Match
required: true
schema:
type: string
- in: header
name: Idempotency-Key
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMachineRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LifecycleResponse'
description: OK
headers:
ETag:
schema:
type: string
X-Dedalus-Storage-Operation-Id:
schema:
type:
- string
- 'null'
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/LifecycleResponse'
description: Mutation accepted or in-progress
headers:
ETag:
schema:
type: string
X-Dedalus-Storage-Operation-Id:
schema:
type:
- string
- 'null'
'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:
fence_conflict:
value:
error_code: REVISION_MISMATCH
message: revision mismatch
retryable: true
details:
expected_revision: '43'
provided_revision: '42'
invalid_state:
value:
error_code: INVALID_STATE
message: requested lifecycle transition is invalid for current machine state
retryable: false
details:
current_desired_state: destroyed
current_observed_state: d
# --- truncated at 32 KB (208 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dedaluslabs/refs/heads/main/openapi/dedaluslabs-machine-lifecycle-api-openapi.yml