systemd-machined (org.freedesktop.machine1)

D-Bus API of systemd-machined for tracking and managing local containers and virtual machines, enumerating their associated images, opening shells/login sessions inside them, copying files in/out, and binding mounts across container boundaries.

systemd-machined (org.freedesktop.machine1) is one of 16 APIs that systemd publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Containers, D-Bus, Machined, and VMs. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

machine1-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: systemd-machined (org.freedesktop.machine1)
  version: '1.0'
  summary: D-Bus API of systemd-machined modeled as REST operations.
  description: |
    Documentation/contract artifact for the `org.freedesktop.machine1` D-Bus interface set on the
    system bus, exposed by systemd-machined. Tracks local containers and virtual machines
    registered with the system, lists/inspects/imports machine images, opens shells inside
    containers, and copies files in/out across container boundaries.
  license: { name: LGPL-2.1-or-later, url: https://github.com/systemd/systemd/blob/main/LICENSES/LGPL-2.1-or-later.txt }
servers: [{ url: 'dbus://system/org.freedesktop.machine1' }]
tags:
- name: Machines
- name: Images
paths:
  /machines:
    get:
      tags: [Machines]
      operationId: ListMachines
      summary: List All Registered Machines
      description: Mirrors `ListMachines()`. Returns (name, class, service, object path) tuples.
      responses: { '200': { description: Array of machines., content: { application/json: { schema: { type: array, items: { $ref: '#/components/schemas/Machine' } } } } } }
  /machines/{name}:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    get:
      tags: [Machines]
      operationId: GetMachine
      summary: Get A Machine By Name
      description: Mirrors `GetMachine(name)`.
      responses: { '200': { description: Machine object path. } }
  /machines/{name}/terminate:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Machines]
      operationId: TerminateMachine
      summary: Terminate A Machine
      description: Mirrors `TerminateMachine(name)`.
      responses: { '204': { description: Terminated. } }
  /machines/{name}/kill:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Machines]
      operationId: KillMachine
      summary: Send A Signal To A Machine
      description: Mirrors `KillMachine(name, who, signal)`.
      requestBody: { content: { application/json: { schema: { type: object, properties: { who: { type: string, enum: [all, leader] }, signal: { type: integer } } } } } }
      responses: { '204': { description: Signal sent. } }
  /machines/{name}/open-shell:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Machines]
      operationId: OpenMachineShell
      summary: Open A Shell Inside A Machine
      description: Mirrors `OpenMachineShell(name, user, path, args, env)`. Returns a PTY FD.
      responses: { '200': { description: PTY FD info. } }
  /machines/{name}/copy-from:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Machines]
      operationId: CopyFromMachine
      summary: Copy A File Out Of A Machine
      description: Mirrors `CopyFromMachine(name, src, dest)`.
      responses: { '204': { description: Copied. } }
  /machines/{name}/copy-to:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Machines]
      operationId: CopyToMachine
      summary: Copy A File Into A Machine
      description: Mirrors `CopyToMachine(name, src, dest)`.
      responses: { '204': { description: Copied. } }
  /images:
    get:
      tags: [Images]
      operationId: ListImages
      summary: List All Machine Images
      description: Mirrors `ListImages()` on the Manager.
      responses: { '200': { description: Array of images., content: { application/json: { schema: { type: array, items: { $ref: '#/components/schemas/Image' } } } } } }
  /images/{name}:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    delete:
      tags: [Images]
      operationId: RemoveImage
      summary: Remove A Machine Image
      description: Mirrors `RemoveImage(name)`.
      responses: { '204': { description: Removed. } }
  /images/{name}/clone:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Images]
      operationId: CloneImage
      summary: Clone A Machine Image
      description: Mirrors `CloneImage(src, dest, read_only)`.
      requestBody: { content: { application/json: { schema: { type: object, properties: { dest: { type: string }, read_only: { type: boolean } } } } } }
      responses: { '204': { description: Cloned. } }
  /images/{name}/rename:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Images]
      operationId: RenameImage
      summary: Rename A Machine Image
      description: Mirrors `RenameImage(src, dest)`.
      responses: { '204': { description: Renamed. } }
components:
  schemas:
    Machine:
      type: object
      properties:
        name: { type: string }
        class: { type: string, enum: [vm, container] }
        service: { type: string, description: 'Service that registered the machine (e.g. systemd-nspawn, libvirt).' }
        object_path: { type: string }
    Image:
      type: object
      properties:
        name: { type: string }
        type: { type: string, enum: [directory, subvolume, raw, block] }
        read_only: { type: boolean }
        ctime: { type: integer }
        mtime: { type: integer }
        usage: { type: integer }
        object_path: { type: string }