Eric Callahan 9c550a8f9a docs: complete API documentation rework
Moonraker's external API documentation has been significantly
overhauled in an effort to improve clarity and readability.
All parameters and responses are documented with specifications.
Tables and other elements are used to make documentation more
visible and less verbose.

Spelling and other corrections have also been added.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2025-02-06 19:15:38 -05:00

668 lines
21 KiB
Markdown

# Printer Administration
These endpoints provide access to printer state and printer control.
Klippy must be connected to Moonraker to receive a successful response,
and in many cases Klippy must be in the `ready` state.
Most of these endpoints are registered with Moonraker by Klipper.
Requests pass from the frontend through Moonraker directly to Klipper.
Moonraker does not intervene.
## Get Klippy host information
```{.http .apirequest title="HTTP Request"}
GET /printer/info
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.info",
"id": 5445
}
```
//// collapse-code
```{.json .apiresponse title="Example Response"}
{
"state": "ready",
"state_message": "Printer is ready",
"hostname": "pi-debugger",
"klipper_path": "/home/pi/klipper",
"python_path": "/home/pi/klipper/venv/bin/python",
"process_id": 275124,
"user_id": 1000,
"group_id": 1000,
"log_file": "/home/pi/printer_data/logs/klippy.log",
"config_file": "/home/pi/printer_data/config/printer.cfg",
"software_version": "v0.12.0-85-gd785b396",
"cpu_info": "4 core ?"
}
```
////
/// api-response-spec
open: True
| Field | Type | Description |
| ------------------ | :----: | ----------------------------------------------------- |
| `state` | string | Klippy's current [state](#klippy-state-desc). |
| `state_message` | string | A message describing Klippy's current state. |
| `hostname` | string | Hostname of the machine running Klippy. |
| `klipper_path` | string | Path on disk to the Klipper application. |
| `python_path` | string | Path on disk to the Python executable running Klippy. |
| `process_id` | int | The PID of the current Klippy process. |
| `user_id` | int | The UID of the user the Klippy process belongs to. |
| `group_id` | int | The GID of the group the Klippy process belongs to. |
| `log_file` | string | Path on disk to Klipper's log file. |
| `configfile` | string | Path on disk to Klipper's configuration file. |
| `software_version` | string | Version of the currently running instance of Klipper. |
| `cpu_info` | string | A brief description of the host machine's CPU. |
| State | Description |
| ---------- | ------------------------------------------------------- |
| `ready` | Klippy has initialized and is ready for commands. |
| `startup` | Klippy is currently in its startup phase. |
| `error` | Klippy encountered an error during startup. |
| `shutdown` | Klippy is in the shutdown state. This can be initiated |
| | by the user via an emergency stop, or by the software |^
| | if it encounters a critical error during operation. |^
{ #klippy-state-desc } Klippy State
///
## Emergency Stop
```{.http .apirequest title="HTTP Request"}
POST /printer/emergency_stop
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.emergency_stop",
"id": 4564
}
```
/// Note
This endpoint will immediately halt the printer and put it in a "shutdown"
state. It should be used to implement an "emergency stop" button and
also used if a user enters `M112`(emergency stop) via a console.
///
```{.text .apiresponse title="Response"}
"ok"
```
## Host Restart
Requests a Klipper "soft" restart. This will reload the Klippy application
and configuration. Connected MCUs will not be reset.
```{.http .apirequest title="HTTP Request"}
POST /printer/restart
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.restart",
"id": 4894
}
```
```{.text .apiresponse title="Response"}
"ok"
```
## Firmware Restart
Requests a complete Klipper restart. Both the Klippy Application and connected
MCUs will be reset.
```{.http .apirequest title="HTTP Request"}
POST /printer/firmware_restart
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.firmware_restart",
"id": 8463
}
```
```{.text .apiresponse title="Response"}
"ok"
```
## Printer Status Requests
### List loaded printer objects
Returns a list of Klipper `printer objects` that are currently loaded.
This can be used to determine if a specific object is available for query
and/or subscription.
```{.http .apirequest title="HTTP Request"}
GET /printer/objects/list
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.objects.list",
"id": 1454
}
```
//// collapse-code
```{.json .apiresponse title="Example Response"}
{
"objects": [
"gcode",
"webhooks",
"configfile",
"mcu",
"mcu linux",
"heaters",
"bme280 chamber",
"temperature_sensor chamber",
"filament_switch_sensor extruder_sensor",
"output_pin sensor_toggle",
"gcode_move",
"bed_mesh",
"exclude_object",
"temperature_host RPi",
"temperature_sensor RPi",
"gcode_macro TURN_OFF_MOTORS",
"gcode_macro SET_HOMING_CURRENT",
"temperature_sensor ambient",
"gcode_macro query_bme280",
"pause_resume",
"print_stats",
"virtual_sdcard",
"probe",
"stepper_enable",
"tmc2130 stepper_x",
"tmc2130 stepper_y",
"tmc2130 stepper_z",
"tmc2130 extruder",
"heater_bed",
"heater_fan nozzle_cooling_fan",
"fan",
"menu",
"display_status",
"output_pin BEEPER_pin",
"idle_timeout",
"motion_report",
"query_endstops",
"system_stats",
"manual_probe",
"toolhead",
"extruder"
]
}
```
////
/// api-response-spec
open: True
| Field | Type | Description |
| --------- | :------: | ------------------------------------------------ |
| `objects` | [string] | A list Klipper printer objects currently loaded. |
///
### Query printer object status
Requests the status of a provided set of printer objects.
/// Tip
See the [Printer Objects](../printer_objects.md) document
for details on the objects available for query.
///
```{.http .apirequest title="HTTP Request"}
POST /printer/objects/query
Content-Type: application/json
{
"objects": {
"gcode_move": null,
"toolhead": ["position", "status"]
}
}
```
/// details | Using the Query String
The HTTP Request may also be performed using the query string. It is
recommended to send the request in the body unless otherwise not possible.
```{.http .apirequest title="HTTP Request"}
GET /printer/objects/query?gcode_move&toolhead&extruder=target,temperature
```
The above will request a status update for all `gcode_move` and `toolhead`
attributes. Only the `temperature` and `target` attributes are requested
for the `extruder`.
///
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.objects.query",
"params": {
"objects": {
"gcode_move": null,
"toolhead": ["position", "status"]
}
},
"id": 4654
}
```
/// api-parameters
open: True
| Name | Type | Default | Description |
| --------- | :----: | ------------ | ------------------------------------------------------ |
| `objects` | object | **REQUIRED** | An object whose key, value pairs represent one or |
| | | | more [Printer Object Requests](#printer-obj-req-desc). |^
| Key Description | Value Description |
| ------------------------------- | ----------------------------------------------------------- |
| The `key`should be an available | The `value` specifies the attributes of the object that |
| Klipper printer object. | should be returned. If the value is `null` all attributes |^
| { width=40% } | will be returned. Alternatively a list of strings |^
| | specifying the desired attributes can be provided. |^
{ #printer-obj-req-desc } Printer Object Request
//// Note
If a requested printer object or attribute does not exist then the result
will be omitted from the response. No error is returned.
////
///
//// collapse-code
```{.json .apiresponse title="Example Response"}
{
"eventtime": 578243.57824499,
"status": {
"gcode_move": {
"absolute_coordinates": true,
"absolute_extrude": true,
"extrude_factor": 1,
"gcode_position": [0, 0, 0, 0],
"homing_origin": [0, 0, 0, 0],
"position": [0, 0, 0, 0],
"speed": 1500,
"speed_factor": 1
},
"toolhead": {
"position": [0, 0, 0, 0],
"status": "Ready"
}
}
}
```
////
/// api-response-spec
open: True
| Field | Type | Description |
| ----------- | :----: | -------------------------------------------------------------- |
| `eventtime` | float | The time at which the status was received, according Klipper's |
| | | monotonic clock. |^
| `status` | object | An object containing the current state of the requested |
| | | printer objects. |^
{ #object-query-response-spec }
///
### Subscribe to printer object status updates
Requests status updates for a set of printer objects. A persistent
connection (Websocket or Unix Socket) is required to fulfill this
request.
Status updates for subscribed objects are sent asynchronously over the
connection. See the
[notify_status_update](./jsonrpc_notifications.md#subscription-updates)
notification for details.
/// Tip
See the [Printer Objects](../printer_objects.md) document
for details on the objects available for subscription.
///
```{.text .apirequest title="HTTP Request"}
Not available
```
```{.json .apirequest title="JSON-RPC Request (Websocket and Unix Socket Only)"}
{
"jsonrpc": "2.0",
"method": "printer.objects.subscribe",
"params": {
"objects": {
"gcode_move": null,
"toolhead": ["position", "status"]
}
},
"id": 5434
}
```
/// api-parameters
open: True
Parameters are identical to the [query](#query-printer-object-status)
status parameters. A new request will override a previous request.
If `objects` is set to an empty object then the subscription will be
cancelled.
///
//// collapse-code
```{.json .apiresponse title="Example Response"}
{
"eventtime": 578243.57824499,
"status": {
"gcode_move": {
"absolute_coordinates": true,
"absolute_extrude": true,
"extrude_factor": 1,
"gcode_position": [0, 0, 0, 0],
"homing_origin": [0, 0, 0, 0],
"position": [0, 0, 0, 0],
"speed": 1500,
"speed_factor": 1,
},
"toolhead": {
"position": [0, 0, 0, 0],
"status": "Ready"
}
}
}
```
////
/// api-response-spec
open: True
The response spec is identical to the [query response specification](#object-query-response-spec)
The response may be used to initialize local state without performing a
separate query.
///
### Query Endstops
```{.http .apirequest title="HTTP Request"}
GET /printer/query_endstops/status
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.query_endstops.status",
"id": 3456
}
```
//// collapse-code
```{.json .apiresponse title="Example Response"}
{
"x": "TRIGGERED",
"y": "open",
"z": "open"
}
```
////
/// api-response-spec
open: True
| Field | Type | Description |
| ---------- | :----: | ----------------------------------------------------------- |
| *variable* | string | The field is the name of the registered endstop. The value |
| | | will be `open` or `TRIGGERED`. |^
///
## GCode APIs
### Run a gcode command
Executes a gcode command. Multiple commands may be executed by separating
them with a newline (`\n`). The request returns when the command or series
of commands have completed, or when the command results in an error.
/// warning
When `M112`(emergency stop) is requested via this endpoint it will not
immediately stop the printer. `M112` will be placed on the gcode queue and
executed after all previous gcodes are complete. If a frontend detects
`M112` via user input (such as a console) it should request the
`/printer/emergency_stop` endpoint to immediately halt the printer. This
may be done in addition to sending the `M112` gcode if desired.
///
```{.http .apirequest title="HTTP Request"}
POST /printer/gcode/script
Content-Type: application/json
{
"script": "G28"
}
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.gcode.script",
"params": {
"script": "G28"
},
"id": 7466}
```
/// api-parameters
open: True
| Name | Type | Default | Description |
| -------- | :----: | ------------ | ------------------------------------------------- |
| `script` | string | **REQUIRED** | A GCode Command to run. Multiple commands may be |
| | | | specified, separated by a newline (`\n`). |^
///
```{.text .apiresponse title="Response"}
"ok"
```
### Get GCode Help
Retrieves a list of registered GCode Command Descriptions. Not all registered
GCode commands have a description, so this list should not be treated as an
exhaustive list of all supported commands.
```{.http .apirequest title="HTTP Request"}
GET /printer/gcode/help
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.gcode.help",
"id": 4645
}
```
//// collapse-code
```{.json .apiresponse title="Example Response"}
{
"RESTART": "Reload config file and restart host software",
"FIRMWARE_RESTART": "Restart firmware, host, and reload config",
"STATUS": "Report the printer status",
"HELP": "Report the list of available extended G-Code commands",
"SAVE_CONFIG": "Overwrite config file and restart",
"SHUTDOWN_MACHINE": "G-Code macro",
"SET_GCODE_VARIABLE": "Set the value of a G-Code macro variable",
"REBOOT_MACHINE": "G-Code macro",
"UPDATE_DELAYED_GCODE": "Update the duration of a delayed_gcode",
"TURN_OFF_HEATERS": "Turn off all heaters",
"TEMPERATURE_WAIT": "Wait for a temperature on a sensor",
"QUERY_ADC": "Report the last value of an analog pin",
"QUERY_FILAMENT_SENSOR": "Query the status of the Filament Sensor",
"SET_FILAMENT_SENSOR": "Sets the filament sensor on/off",
"SET_PIN": "Set the value of an output pin",
"BED_MESH_CALIBRATE": "Perform Mesh Bed Leveling",
"BED_MESH_PROFILE": "Bed Mesh Persistent Storage management",
"BED_MESH_OUTPUT": "Retrieve interpolated grid of probed z-points",
"BED_MESH_MAP": "Serialize mesh and output to terminal",
"BED_MESH_CLEAR": "Clear the Mesh so no z-adjustment is made",
"BED_MESH_OFFSET": "Add X/Y offsets to the mesh lookup",
"SET_GCODE_OFFSET": "Set a virtual offset to g-code positions",
"SAVE_GCODE_STATE": "Save G-Code coordinate state",
"RESTORE_GCODE_STATE": "Restore a previously saved G-Code state",
"GET_POSITION": "Return information on the current location of the toolhead",
"EXCLUDE_OBJECT_START": "Marks the beginning the current object as labeled",
"EXCLUDE_OBJECT_END": "Marks the end the current object",
"EXCLUDE_OBJECT": "Cancel moves inside a specified objects",
"EXCLUDE_OBJECT_DEFINE": "Provides a summary of an object",
"TURN_OFF_MOTORS": "G-Code macro",
"CLEAR_PAUSE": "Clears the current paused state without resuming the print",
"SET_PRINT_STATS_INFO": "Pass slicer info like layer act and total to klipper",
"SDCARD_RESET_FILE": "Clears a loaded SD File. Stops the print if necessary",
"SDCARD_PRINT_FILE": "Loads a SD file and starts the print. May include files in subdirectories.",
"RESPOND": "Echo the message prepended with a prefix",
"PROBE": "Probe Z-height at current XY position",
"QUERY_PROBE": "Return the status of the z-probe",
"PROBE_CALIBRATE": "Calibrate the probe's z_offset",
"PROBE_ACCURACY": "Probe Z-height accuracy at current XY position",
"Z_OFFSET_APPLY_PROBE": "Adjust the probe's z_offset",
"GET_CURRENT_SKEW": "Report current printer skew",
"CALC_MEASURED_SKEW": "Calculate skew from measured print",
"SET_SKEW": "Set skew based on lengths of measured object",
"SKEW_PROFILE": "Profile management for skew_correction",
"SET_STEPPER_ENABLE": "Enable/disable individual stepper by name",
"SET_TMC_FIELD": "Set a register field of a TMC driver",
"INIT_TMC": "Initialize TMC stepper driver registers",
"SET_TMC_CURRENT": "Set the current of a TMC driver",
"DUMP_TMC": "Read and display TMC stepper driver registers",
"PID_CALIBRATE": "Run PID calibration test",
"SET_HEATER_TEMPERATURE": "Sets a heater temperature",
"SET_DISPLAY_TEXT": "Set or clear the display message",
"SET_DISPLAY_GROUP": "Set the active display group",
"STEPPER_BUZZ": "Oscillate a given stepper to help id it",
"FORCE_MOVE": "Manually move a stepper; invalidates kinematics",
"SET_KINEMATIC_POSITION": "Force a low-level kinematic position",
"SET_IDLE_TIMEOUT": "Set the idle timeout in seconds",
"QUERY_ENDSTOPS": "Report on the status of each endstop",
"SET_VELOCITY_LIMIT": "Set printer velocity limits",
"MANUAL_PROBE": "Start manual probe helper script",
"TUNING_TOWER": "Tool to adjust a parameter at each Z height",
"SET_PRESSURE_ADVANCE": "Set pressure advance parameters",
"SET_EXTRUDER_ROTATION_DISTANCE": "Set extruder rotation distance",
"SYNC_EXTRUDER_MOTION": "Set extruder stepper motion queue",
"SET_EXTRUDER_STEP_DISTANCE": "Set extruder step distance",
"SYNC_STEPPER_TO_EXTRUDER": "Set extruder stepper",
"ACTIVATE_EXTRUDER": "Change the active extruder",
"BASE_PAUSE": "Renamed builtin of 'PAUSE'",
"BASE_RESUME": "Renamed builtin of 'RESUME'",
"BASE_CANCEL_PRINT": "Renamed builtin of 'CANCEL_PRINT'",
"ACCEPT": "Accept the current Z position",
"ABORT": "Abort manual Z probing tool",
"TESTZ": "Move to new Z height"
}
```
////
/// api-response-spec
open: True
| Field | Type | Description |
| ---------- | :----: | ----------------------------------------------------------------- |
| *variable* | string | The field is the name of the registered gcode command. The value |
| | | is a string containing the associated help descriptions. |^
//// Note
As mentioned previously, this list is not exhaustive. Help strings are not
available for default gcode handlers such as G1, G28, etc, nor are they
available for extended handlers that failed to register a description in
Klipper's python source.
////
///
## Print Job Management
### Start a print job
```{.http .apirequest title="HTTP Request"}
POST /printer/print/start?filename=test_print.gcode
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.print.start",
"params": {
"filename": "test_print.gcode"
},
"id": 4654
}
```
/// api-parameters
open: true
| Name | Type | Default | Description |
| ---------- | :----: | ------------ | --------------------------------------------------- |
| `filename` | string | **REQUIRED** | The name of the gcode file to print. May be a path |
| | | | relative to the gcode folder. |^
///
```{.text .apiresponse title="Response"}
"ok"
```
### Pause a print job
```{.http .apirequest title="HTTP Request"}
POST /printer/print/pause
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.print.pause",
"id": 4564
}
```
```{.text .apiresponse title="Response"}
"ok"
```
### Resume a print job
```{.http .apirequest title="HTTP Request"}
POST /printer/print/resume
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.print.resume",
"id": 1465
}
```
```{.text .apiresponse title="Response"}
"ok"
```
### Cancel a print job
```{.http .apirequest title="HTTP Request"}
POST /printer/print/cancel
```
```{.json .apirequest title="JSON-RPC Request"}
{
"jsonrpc": "2.0",
"method": "printer.print.cancel",
"id": 2578
}
```
```{.text .apiresponse title="Response"}
"ok"
```