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. The reason parameter in the payload defines whether a full active login is necessary (values logout and 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 as current, see the payload data model.

  • event: Events triggered within OctoPrint, such as e.g. PrintFailed or MovieRenderDone. 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 two commands from the client to the server.

  • auth (since 1.3.10): With the auth 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 the STATUS 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"
    }
    
  • throttle: Usually, OctoPrint will push the general state update in the current message twice per second. For some clients that might still be too fast, so they can signal a different factor to OctoPrint utilizing the throttle 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

apikey

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.

version

1

String

The server’s version.

branch

1

String

The source code branch from which the server was built.

display_version

1

String

The server’s version and branch in a human readable format.

plugin_hash

1

String

A hash of all installed plugins. This allows to detect if there have been plugin changes between server restarts.

config_hash

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

state

1

State information

Information about the current machine state

job

1

Job information

Information about the currently active print job

progress

1

Progress information

Information about the current print/streaming progress

currentZ

1

Float

Current height of the Z-Axis (= current height of model) during printing from a local file

offsets

0..1

Temperature offsets

Currently configured temperature offsets

temps

0..*

List of Temperature Data Points

Temperature data points for plotting

logs

0..*

List of String

Lines for the serial communication log (send/receive)

messages

0..*

List of String

Lines for the serial communication log (special messages)

event payload

Name

Multiplicity

Type

Description

type

1

String

Name of the event

payload

1

Object

Payload associated with the event

slicingProgress payload

Name

Multiplicity

Type

Description

slicer

1

String

Name of the slicer used

source_location

1

String

Location of the source file being sliced, at the moment either local or sdcard

source_path

1

String

Path of the source file being sliced (e.g. an STL file)

dest_location

1

String

Location of the destination file being created, at the moment either local or sdcard

dest_path

1

String

Path of the destination file being sliced (e.g. a GCODE file)

progress

1

Number (Float)

Percentage of slicing job already completed