systemd Manager (org.freedesktop.systemd1)

Core D-Bus API exposed by PID 1 on the system bus. The Manager object at /org/freedesktop/systemd1 enumerates and controls units (services, sockets, mounts, targets, timers, paths, slices, scopes, swaps, devices), starts and stops jobs, loads/reloads configuration, manages cgroup-backed transient units, and emits lifecycle signals (UnitNew, UnitRemoved, JobNew, JobRemoved, Reloading, StartupFinished). Per-unit interfaces (Unit, Service, Socket, Mount, Slice, Scope, Path, Swap, Timer, Target) expose state, properties, and operations on individual units.

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

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

Tagged areas include Cgroups, D-Bus, Service Manager, Systemd, and Units. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 3 Naftiko capability specs.

OpenAPI Specification

systemd1-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: systemd Manager (org.freedesktop.systemd1)
  version: '1.0'
  summary: D-Bus API of PID 1 (the systemd Manager) modeled as REST operations.
  description: |
    This OpenAPI document models the well-known systemd D-Bus interface set at bus name
    `org.freedesktop.systemd1` (system bus). It is a documentation/contract artifact: callers do not actually
    issue HTTPS requests against a server, they invoke D-Bus methods against PID 1. Paths here mirror the
    canonical object path layout (`/org/freedesktop/systemd1/...`) and the operationId names match the
    documented D-Bus method names.

    Bus name: `org.freedesktop.systemd1`. Root object path: `/org/freedesktop/systemd1`. The Manager
    interface enumerates units, manages jobs, loads/reloads configuration, and emits lifecycle signals.
    Per-unit objects implement the `Unit` interface plus a type-specific interface (`Service`, `Socket`,
    `Mount`, `Slice`, `Scope`, `Path`, `Swap`, `Timer`, `Target`).
  contact:
    name: systemd developers
    url: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
  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.systemd1
  description: System D-Bus (PID 1)
tags:
- name: Manager
  description: Top-level Manager object methods.
- name: Units
  description: Unit lifecycle and enumeration.
- name: Jobs
  description: Pending and active jobs scheduled by the Manager.
- name: Configuration
  description: Loading, reloading, and reexecuting the manager.
- name: Cgroups
  description: Transient unit creation and cgroup-backed resource control.
- name: Snapshots
  description: System state introspection.
paths:
  /units:
    get:
      tags: [Units]
      operationId: ListUnits
      summary: List All Loaded Units
      description: Returns an array of all currently loaded units. Mirrors `ListUnits()` on the Manager.
      responses:
        '200':
          description: Array of units (name, description, load state, active state, sub state, follower, object path, job id, job type, job object path).
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Unit' }
  /units/{name}:
    parameters:
    - { name: name, in: path, required: true, schema: { type: string }, description: Unit name (e.g. `nginx.service`). }
    get:
      tags: [Units]
      operationId: GetUnit
      summary: Get A Loaded Unit By Name
      description: Returns the D-Bus object path of an already-loaded unit. Mirrors `GetUnit(name)`.
      responses:
        '200': { description: Object path of the unit., content: { application/json: { schema: { $ref: '#/components/schemas/UnitPath' } } } }
        '404': { description: Unit not loaded. }
  /units/{name}/load:
    parameters:
    - { name: name, in: path, required: true, schema: { type: string } }
    post:
      tags: [Units]
      operationId: LoadUnit
      summary: Load A Unit From Disk
      description: Forces the Manager to load the named unit and returns its object path. Mirrors `LoadUnit(name)`.
      responses:
        '200': { description: Loaded unit object path., content: { application/json: { schema: { $ref: '#/components/schemas/UnitPath' } } } }
  /units/{name}/start:
    parameters:
    - { name: name, in: path, required: true, schema: { type: string } }
    post:
      tags: [Units]
      operationId: StartUnit
      summary: Start A Unit
      description: Enqueues a start job for the unit. Mirrors `StartUnit(name, mode)`. Mode is one of `replace`, `fail`, `isolate`, `ignore-dependencies`, `ignore-requirements`.
      requestBody:
        content: { application/json: { schema: { $ref: '#/components/schemas/JobModeRequest' } } }
      responses:
        '202': { description: Job enqueued; returns job object path., content: { application/json: { schema: { $ref: '#/components/schemas/JobPath' } } } }
  /units/{name}/stop:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Units]
      operationId: StopUnit
      summary: Stop A Unit
      description: Enqueues a stop job. Mirrors `StopUnit(name, mode)`.
      requestBody: { content: { application/json: { schema: { $ref: '#/components/schemas/JobModeRequest' } } } }
      responses: { '202': { description: Job enqueued., content: { application/json: { schema: { $ref: '#/components/schemas/JobPath' } } } } }
  /units/{name}/restart:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Units]
      operationId: RestartUnit
      summary: Restart A Unit
      description: Stops then starts. Mirrors `RestartUnit(name, mode)`.
      requestBody: { content: { application/json: { schema: { $ref: '#/components/schemas/JobModeRequest' } } } }
      responses: { '202': { description: Job enqueued., content: { application/json: { schema: { $ref: '#/components/schemas/JobPath' } } } } }
  /units/{name}/reload:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Units]
      operationId: ReloadUnit
      summary: Reload A Unit
      description: Asks a unit to reload its configuration (e.g. SIGHUP for services). Mirrors `ReloadUnit(name, mode)`.
      requestBody: { content: { application/json: { schema: { $ref: '#/components/schemas/JobModeRequest' } } } }
      responses: { '202': { description: Job enqueued., content: { application/json: { schema: { $ref: '#/components/schemas/JobPath' } } } } }
  /units/{name}/reload-or-restart:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Units]
      operationId: ReloadOrRestartUnit
      summary: Reload Or Restart A Unit
      description: Reloads if supported, otherwise restarts. Mirrors `ReloadOrRestartUnit(name, mode)`.
      requestBody: { content: { application/json: { schema: { $ref: '#/components/schemas/JobModeRequest' } } } }
      responses: { '202': { description: Job enqueued., content: { application/json: { schema: { $ref: '#/components/schemas/JobPath' } } } } }
  /units/{name}/kill:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Units]
      operationId: KillUnit
      summary: Send A Signal To A Unit
      description: Sends a UNIX signal to the unit's main, control, or all processes. Mirrors `KillUnit(name, who, signal)`.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required: [who, signal]
              properties:
                who: { type: string, enum: [main, control, all] }
                signal: { type: integer, description: UNIX signal number (e.g. 15 = SIGTERM, 9 = SIGKILL). }
      responses: { '204': { description: Signal sent. } }
  /units/{name}/freeze:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Units]
      operationId: FreezeUnit
      summary: Freeze A Unit's Cgroup
      description: Suspends all processes in the unit's cgroup using the cgroup v2 freezer. Mirrors `FreezeUnit(name)`.
      responses: { '204': { description: Frozen. } }
  /units/{name}/thaw:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    post:
      tags: [Units]
      operationId: ThawUnit
      summary: Thaw A Unit's Cgroup
      description: Resumes a frozen cgroup. Mirrors `ThawUnit(name)`.
      responses: { '204': { description: Thawed. } }
  /units/{name}/properties:
    parameters: [{ name: name, in: path, required: true, schema: { type: string } }]
    get:
      tags: [Units]
      operationId: GetAllUnitProperties
      summary: Get All Properties Of A Unit
      description: Returns the full property bag for a unit. Equivalent to `org.freedesktop.DBus.Properties.GetAll`.
      responses: { '200': { description: Unit property map., content: { application/json: { schema: { type: object, additionalProperties: true } } } } }
    patch:
      tags: [Units]
      operationId: SetUnitProperties
      summary: Set Runtime Properties On A Unit
      description: Sets one or more properties at runtime. Mirrors `SetUnitProperties(name, runtime, properties)`. Used for live cgroup resource changes (CPUWeight, MemoryMax, etc.).
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                runtime: { type: boolean, description: If true, changes apply only until reboot. }
                properties: { type: object, additionalProperties: true }
      responses: { '204': { description: Properties updated. } }
  /units/transient:
    post:
      tags: [Cgroups, Units]
      operationId: StartTransientUnit
      summary: Start A Transient Unit
      description: Creates and starts a new transient unit (typically a scope or service) with the supplied properties. Mirrors `StartTransientUnit(name, mode, properties, aux)`.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required: [name, mode]
              properties:
                name: { type: string }
                mode: { type: string, enum: [replace, fail, isolate, ignore-dependencies, ignore-requirements] }
                properties: { type: object, additionalProperties: true }
                aux: { type: array, items: { type: object } }
      responses: { '202': { description: Job enqueued., content: { application/json: { schema: { $ref: '#/components/schemas/JobPath' } } } } }
  /jobs:
    get:
      tags: [Jobs]
      operationId: ListJobs
      summary: List Pending And Running Jobs
      description: Mirrors `ListJobs()`.
      responses: { '200': { description: Array of jobs., content: { application/json: { schema: { type: array, items: { $ref: '#/components/schemas/Job' } } } } } }
  /jobs/{id}/cancel:
    parameters: [{ name: id, in: path, required: true, schema: { type: integer } }]
    post:
      tags: [Jobs]
      operationId: CancelJob
      summary: Cancel A Pending Job
      description: Mirrors `CancelJob(id)`.
      responses: { '204': { description: Job cancelled. } }
  /manager/reload:
    post:
      tags: [Configuration, Manager]
      operationId: Reload
      summary: Reload Manager Configuration
      description: Reloads all unit files from disk without restarting services. Mirrors `Reload()`.
      responses: { '204': { description: Reloaded. } }
  /manager/reexecute:
    post:
      tags: [Configuration, Manager]
      operationId: Reexecute
      summary: Reexecute The Manager
      description: Re-executes the systemd binary in-place, preserving state. Mirrors `Reexecute()`.
      responses: { '204': { description: Reexecuted. } }
  /manager/enable:
    post:
      tags: [Configuration, Manager]
      operationId: EnableUnitFiles
      summary: Enable Unit Files
      description: Creates the symlinks that make units start at boot. Mirrors `EnableUnitFiles(files, runtime, force)`.
      requestBody: { content: { application/json: { schema: { type: object, properties: { files: { type: array, items: { type: string } }, runtime: { type: boolean }, force: { type: boolean } } } } } }
      responses: { '200': { description: Carries-install info and change set., content: { application/json: { schema: { type: object, additionalProperties: true } } } } }
  /manager/disable:
    post:
      tags: [Configuration, Manager]
      operationId: DisableUnitFiles
      summary: Disable Unit Files
      description: Removes the symlinks that make units start at boot. Mirrors `DisableUnitFiles(files, runtime)`.
      requestBody: { content: { application/json: { schema: { type: object, properties: { files: { type: array, items: { type: string } }, runtime: { type: boolean } } } } } }
      responses: { '200': { description: Change set., content: { application/json: { schema: { type: object, additionalProperties: true } } } } }
  /manager/mask:
    post:
      tags: [Configuration, Manager]
      operationId: MaskUnitFiles
      summary: Mask Unit Files
      description: Symlinks units to /dev/null so they cannot be started. Mirrors `MaskUnitFiles(files, runtime, force)`.
      requestBody: { content: { application/json: { schema: { type: object, properties: { files: { type: array, items: { type: string } }, runtime: { type: boolean }, force: { type: boolean } } } } } }
      responses: { '200': { description: Change set., content: { application/json: { schema: { type: object, additionalProperties: true } } } } }
  /manager/unmask:
    post:
      tags: [Configuration, Manager]
      operationId: UnmaskUnitFiles
      summary: Unmask Unit Files
      description: Reverses MaskUnitFiles. Mirrors `UnmaskUnitFiles(files, runtime)`.
      responses: { '200': { description: Change set., content: { application/json: { schema: { type: object, additionalProperties: true } } } } }
  /manager/set-default-target:
    post:
      tags: [Configuration, Manager]
      operationId: SetDefaultTarget
      summary: Set The Default Boot Target
      description: Mirrors `SetDefaultTarget(target, force)`.
      requestBody: { content: { application/json: { schema: { type: object, properties: { target: { type: string }, force: { type: boolean } } } } } }
      responses: { '200': { description: Change set., content: { application/json: { schema: { type: object, additionalProperties: true } } } } }
  /manager/default-target:
    get:
      tags: [Configuration, Manager]
      operationId: GetDefaultTarget
      summary: Get The Default Boot Target
      description: Mirrors `GetDefaultTarget()`.
      responses: { '200': { description: Target unit name., content: { application/json: { schema: { type: object, properties: { target: { type: string } } } } } } }
  /manager/snapshot:
    get:
      tags: [Snapshots, Manager]
      operationId: GetManagerProperties
      summary: Get Manager Properties
      description: Returns the full property map of the Manager (Version, Features, Virtualization, Architecture, Tainted, FirmwareTimestamp, etc.).
      responses: { '200': { description: Property map., content: { application/json: { schema: { type: object, additionalProperties: true } } } } }
components:
  schemas:
    UnitPath:
      type: object
      properties: { path: { type: string, description: D-Bus object path. } }
    JobPath:
      type: object
      properties: { path: { type: string, description: D-Bus object path of the job. } }
    JobModeRequest:
      type: object
      properties:
        mode: { type: string, enum: [replace, fail, isolate, ignore-dependencies, ignore-requirements], default: replace }
    Unit:
      type: object
      properties:
        name: { type: string }
        description: { type: string }
        load_state: { type: string, enum: [stub, loaded, not-found, bad-setting, error, merged, masked] }
        active_state: { type: string, enum: [active, reloading, inactive, failed, activating, deactivating] }
        sub_state: { type: string }
        follower: { type: string, nullable: true }
        object_path: { type: string }
        job_id: { type: integer }
        job_type: { type: string }
        job_object_path: { type: string }
    Job:
      type: object
      properties:
        id: { type: integer }
        unit: { type: string }
        type: { type: string, enum: [start, verify-active, stop, reload, restart, try-restart, reload-or-start] }
        state: { type: string, enum: [waiting, running] }
        object_path: { type: string }
        unit_object_path: { type: string }