Dedalus Labs Machine Lifecycle API

The Machine Lifecycle API from Dedalus Labs — 18 operation(s) for machine lifecycle.

Operations 30

GET /v1/machines List machines #
POST /v1/machines Create machine #
DELETE /v1/machines/{machine_id} Destroy machine #
GET /v1/machines/{machine_id} Get machine #
PATCH /v1/machines/{machine_id} Update machine #
GET /v1/machines/{machine_id}/artifacts List artifacts #
DELETE /v1/machines/{machine_id}/artifacts/{artifact_id} Delete artifact #
GET /v1/machines/{machine_id}/artifacts/{artifact_id} Get artifact #
GET /v1/machines/{machine_id}/executions List executions #
POST /v1/machines/{machine_id}/executions Create execution #
DELETE /v1/machines/{machine_id}/executions/{execution_id} Delete execution #
GET /v1/machines/{machine_id}/executions/{execution_id} Get execution #
GET /v1/machines/{machine_id}/executions/{execution_id}/events List execution events #
GET /v1/machines/{machine_id}/executions/{execution_id}/output Get execution output #
GET /v1/machines/{machine_id}/previews List previews #
POST /v1/machines/{machine_id}/previews Create preview #
DELETE /v1/machines/{machine_id}/previews/{preview_id} Delete preview #
GET /v1/machines/{machine_id}/previews/{preview_id} Get preview #
POST /v1/machines/{machine_id}/sleep Sleep a running machine #
GET /v1/machines/{machine_id}/ssh List SSH sessions #
POST /v1/machines/{machine_id}/ssh Create SSH session #
DELETE /v1/machines/{machine_id}/ssh/{session_id} Delete SSH session #
GET /v1/machines/{machine_id}/ssh/{session_id} Get SSH session #
GET /v1/machines/{machine_id}/status/stream Watch machine lifecycle status #
GET /v1/machines/{machine_id}/terminals List terminals #
POST /v1/machines/{machine_id}/terminals Create terminal #
DELETE /v1/machines/{machine_id}/terminals/{terminal_id} Delete terminal #
GET /v1/machines/{machine_id}/terminals/{terminal_id} Get terminal #
GET /v1/machines/{machine_id}/terminals/{terminal_id}/stream Connect to terminal WebSocket stream #
POST /v1/machines/{machine_id}/wake Wake a sleeping machine #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dedaluslabs-machine-lifecycle-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

dedaluslabs-machine-lifecycle-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: Controlplane API for Dedalus Cloud Services (DCS).
  title: Dedalus Cloud Services Machine Lifecycle API
  version: v1
servers:
- description: Official DCS API
  url: https://dcs.dedaluslabs.ai
security:
- ApiKeyAuth: []
- BearerAuth: []
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: destroyed
                      expected_observed_state: running
                      target_desired_state: running
                sleep_hold_window_active:
                  value:
                    error_code: SLEEP_HOLD_WINDOW_ACTIVE
                    message: sleep hold window is active
                    retryable: true
                    retry_after_ms: 50000
       

# --- 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