Push updates
Warning
The interface documented here is the status quo that might be changed while the interfaces are streamlined for a more general consumption. If you happen to want to develop against it, you should drop me an email to make sure I can give you a heads-up when something changes.
To enable real time information exchange between client and server, OctoPrint uses SockJS to push status updates, temperature changes etc to connected web interface instances.
Each pushed message consists of a simple JSON object that follows this basic structure:
{
"<type>": <payload>
}
type
indicates the type of message being pushed to the client, the attached payload
is message specific. The
following message types are currently available for usage by 3rd party clients:
connected
: Initial connection information, sent only right after establishing the socket connection. See the payload data model.
reauthRequired
: A reauthentication of the current login session is required. Thereason
parameter in the payload defines whether a full active login is necessary (valueslogout
,stale
,removed
) or a simple passive login will suffice (all other values).
current
: Rate limited general state update, payload contains information about the printer’s state, job progress, accumulated temperature points and log lines since last update. OctoPrint will send these updates when new information is available, but not more often than twice per second in order to not flood the client with messages (e.g. during printing). See the payload data model.
history
: Current state, temperature and log history, sent upon initial connect to get the client up to date. Same payload data model ascurrent
, see the payload data model.
event
: Events triggered within OctoPrint, such as e.g.PrintFailed
orMovieRenderDone
. Payload is the event type and payload, see the payload data model. Sent when an event is triggered internally.
slicingProgress
: Progress updates from an active slicing background job, payload contains information about the model being sliced, the target file, the slicer being used and the progress as a percentage. See the payload data model.
plugin
: Messages generated by plugins. The payload data models are determined by the plugin which sent the message.
Clients must ignore any unknown messages.
The data model of the attached payloads is described further below.
OctoPrint’s SockJS socket also accepts three commands from the client to the server.
subscribe
(since 1.8.0): With thesubscribe
message, clients may selectively subscribe to certain message types. The payload should be a dict of message types with supported keys as follows:
state
: Either a boolean value indicating whether to generally receive state updates (current
andhistory
) or not, or a dict with further options for received state updates. Currently the following options are recognized here:
logs
: A boolean value whether to include all log lines (True
, default) or not (False
). Alternatively a string with a regex pattern can be provided, in which case only log lines matching the pattern will be returned.
messages
: Likelogs
but for the returned message lines.
plugins
: Either a boolean value indicating whether to generally receive plugin messages, or a list of plugin identifiers to receive plugin messages for.
events
: Either a boolean value indicating whether to generally receive event messages, or a list of event types to receive event messages for.If you send a
subscribe
message, OctoPrint will default the connection to not subscribe you to anything you did’t explicitly request.subscribe
messages do replace previous ones.Example for a
subscribe
message subscribing only to updates from pluginexample
but neither state nor events:{ "subscribe": { "plugins": ["example"] } }Example for a
subscribe
message subscribing to state, event and plugin updates, but filtering logs in state updates to only contain lines matching^Recv: Cap
and also filtering out all messages:{ "subscribe": { "state": { "logs": "^Recv: Cap", "messages": false }, "events": true, "plugins": true } }Example for a
subscribe
message subscribing only to events of typePrintFailed
:{ "subscribe": { "events": ["PrintFailed"] } }Note
Per default, OctoPrint will subscribe connecting clients to all state, event and plugin updates without any filtering in place. If you wish to have your more selective subscription active right from the start of your socket session, be sure to send the
subscribe
message before theauth
message.
auth
(since 1.3.10): With theauth
message, clients may associate an existing user session with the socket. That is of special importance to receive any kind of messages, since the permission system will prevent any kind of status messages to be sent to connected clients lacking theSTATUS
permission.The
auth
message expects the user id of the user to authenticate followed by:
and a session key to be obtained from the successful payload of a (passive or active) login via the API.Example for a
auth
client-server-message:{ "auth": "someuser:LGZ0trf8By" }An example for an auth roundtrip with only an API key using the JS Client Library can be found here.
throttle
: Usually, OctoPrint will push the general state update in thecurrent
message twice per second. For some clients that might still be too fast, so they can signal a different factor to OctoPrint utilizing thethrottle
message. OctoPrint expects a single integer here which represents the multiplier for the base rate limit of one message every 500ms. A value of 1 hence will produce the default behaviour of getting every update. A value of 2 will set the rate limit to maximally one message every 1s, 3 to maximally one message every 1.5s and so on.Example for a
throttle
client-server-message:{ "throttle": 2 }
Data model
connected
payload
Name |
Multiplicity |
Type |
Description |
---|---|---|---|
|
1 |
String |
Current UI API KEY. The UI API KEY is a special API key that gets regenerated on every server restart and has no rights attached other than accessing the REST API. An additional browser session is needed to send valid requests when the UI API KEY is used. |
|
1 |
String |
The server’s version. |
|
1 |
String |
The source code branch from which the server was built. |
|
1 |
String |
The server’s version and branch in a human readable format. |
|
1 |
String |
A hash of all installed plugins. This allows to detect if there have been plugin changes between server restarts. |
|
1 |
String |
A hash of the currently active config. This allows to detect if there have been configuration changes between server restarts. |
current
and history
payload
Name |
Multiplicity |
Type |
Description |
---|---|---|---|
|
1 |
Information about the current machine state |
|
|
1 |
Information about the currently active print job |
|
|
1 |
Information about the current print/streaming progress |
|
|
1 |
Float |
Current height of the Z-Axis (= current height of model) during printing from a local file |
|
0..1 |
Currently configured temperature offsets |
|
|
0..* |
List of Temperature Data Points |
Temperature data points for plotting |
|
0..* |
List of String |
Lines for the serial communication log (send/receive) |
|
0..* |
List of String |
Lines for the serial communication log (special messages) |
|
1 |
Current resend statistics for the connection |
|
|
0..1 |
Map of plugin identifiers to additional data |
Additional data injected by plugins via the octoprint.printer.additional_state_data hook, indexed by plugin identifier. Structure of additional data is determined by the plugin. |
event
payload
Name |
Multiplicity |
Type |
Description |
---|---|---|---|
|
1 |
String |
Name of the event |
|
1 |
Object |
Payload associated with the event |
slicingProgress
payload
Name |
Multiplicity |
Type |
Description |
---|---|---|---|
|
1 |
String |
Name of the slicer used |
|
1 |
String |
Location of the source file being sliced, at the moment either |
|
1 |
String |
Path of the source file being sliced (e.g. an STL file) |
|
1 |
String |
Location of the destination file being created, at the moment either |
|
1 |
String |
Path of the destination file being sliced (e.g. a GCODE file) |
|
1 |
Number (Float) |
Percentage of slicing job already completed |