Skip to content

Instantly share code, notes, and snippets.

@SimonIT
Last active October 12, 2020 20:38
Show Gist options
  • Save SimonIT/ea672554e9d642b517202125b10d3b37 to your computer and use it in GitHub Desktop.
Save SimonIT/ea672554e9d642b517202125b10d3b37 to your computer and use it in GitHub Desktop.
openapi: 3.0.0
info:
version: 1.0.0-oas3
title: Ultimaker API
description: >-
REST API for the Ultimaker 3D printer.
Authentication: Any PUT/POST/DELETE api requires authentication before it
can be used. Authentication is done with http digest (RFC 2617) without
fallback to basic authentication.
To get a valid username/password combination, the following process
can/should be followed.
1) POST /auth/request with 'application' and 'user' as parameters. The
application name and user name will be shown to the user on the printer. The
reply body will contain a json reply with an 'id' and 'key' part.
2) Repeatedly GET /auth/check/<id> until it reports 'authorized' or
'unauthorized'. This will be reported back once the end user selects if the
application is allowed to use the API.
3) [optional] test the authentication, the earlier given 'id' is the
username, the 'key' is the password. Use digest authentication on GET
/auth/verify to test this.
tags:
- name: Authentication
description: Request and check authorization keys
- name: Materials
description: All materials known by the printer
- name: Printer
description: Printer state
- name: Network
description: Network state
- name: PrintJob
description: Currently running print
- name: System
description: Device information
- name: History
description: History of this printer
- name: Camera
description: Camera image and video
paths:
/auth/request:
post:
tags:
- Authentication
description: >-
Request authentication from the printer. This generates new id/key
combination that has to be used as username/password in the digest
authentication on certain APIs.
responses:
'200':
description: Register as a new application that wants access to the API.
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: >-
New ID that is unique as authentication token. This is the
username part in the http digest authentication.
key:
type: string
description: >-
New key that is unique as authentication token. This is
the password part in the http digest authentication.
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
application:
description: >-
Name of the application that wants access. Displayed to the
user.
type: string
user:
description: >-
Name of the user who wants access. Displayed to the user
when confirming access.
type: string
host_name:
description: >-
Optionally the hostname of the service that is
authenticating can be provided for future use.
type: string
exclusion_key:
description: >-
Optionally This key can make sure only one authorisation
will exist on the remote printer with this same key, This
allows a new user to de-authenticate the old one preventing
multiple printer controlling applications to use the printer
at the same time. Naturally multiple authorisations can
exist if this is omitted
type: string
required:
- application
- user
'/auth/check/{id}':
get:
tags:
- Authentication
description: >-
Check if the given ID is authorized for printer access. Will return
'authorized' when the end user has selected that this application is
allowed to use the printer. Will return 'unauthorized' when the user has
selected that the application is not allowed to access the printer. Will
return 'unknown' when the end user has not selected any option yet.
parameters:
- name: id
in: path
description: id returned from the /auth/request call
required: true
schema:
type: string
responses:
'200':
description: result of the authorization check.
content:
application/json:
schema:
type: object
properties:
message:
type: string
enum:
- authorized
- unauthorized
- unknown
/auth/verify:
get:
tags:
- Authentication
description: >-
This API call always does authentication checking for digest
authentication. Invalid digest id/key combinations will generate a 401
result.
responses:
'200':
description: 'Verify check successful, digest authentication is valid.'
content:
application/json:
schema:
type: object
properties:
message:
type: string
enum:
- ok
'401':
description: >-
Not authorized. Check or request your id/key combination, and/or
http digest implementation.
/camera:
get:
tags:
- Camera
description: Returns camera object
responses:
'200':
description: Camera object
content:
application/json:
schema:
$ref: '#/components/schemas/Camera'
/camera/feed:
get:
tags:
- Camera
description: 'Get a link to the camera feed, this returns an url to a camera stream'
responses:
'200':
description: Camera feed
content:
application/json:
schema:
type: string
'/camera/{index}/stream':
get:
tags:
- Camera
description: Get a redirection to the camera live feed.
parameters:
- name: index
in: path
description: index of the camera to get the feed from.
required: true
schema:
type: number
responses:
'302':
description: Redirection to the camera feed.
'404':
description: Camera with this index is not available in the system.
'/camera/{index}/snapshot':
get:
tags:
- Camera
description: Get a redirection to the camera snapshot.
parameters:
- name: index
in: path
description: index of the camera to get the snapshot from.
required: true
schema:
type: number
responses:
'302':
description: Redirection to the camera snapshot.
'404':
description: Camera with this index is not available in the system.
/materials:
get:
tags:
- Materials
responses:
'200':
description: 'All known material XML files, one string for each material.'
content:
application/json:
schema:
type: array
items:
type: string
post:
tags:
- Materials
responses:
'204':
description: Material profile added.
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
file:
description: Material file (.xml)
type: string
format: binary
filename:
description: Name of the file
type: string
signature_file:
description: Signature file (.sig)
type: string
format: binary
required:
- file
- filename
'/materials/{material_guid}':
get:
tags:
- Materials
parameters:
- name: material_guid
in: path
description: GUID of material to fetch
required: true
schema:
type: string
responses:
'200':
description: xml of material
content:
application/json:
schema:
type: string
put:
tags:
- Materials
parameters:
- name: material_guid
in: path
description: GUID of material to update
required: true
schema:
type: string
responses:
'204':
description: Material updated
delete:
tags:
- Materials
parameters:
- name: material_guid
in: path
description: GUID of material to delete
required: true
schema:
type: string
responses:
'204':
description: Material deleted
/printer:
get:
tags:
- Printer
description: Returns printer object
responses:
'200':
description: Printer object
content:
application/json:
schema:
$ref: '#/components/schemas/Printer'
/printer/diagnostics/cap_sensor_noise:
get:
tags:
- Printer
description: >-
Calculates noise variances on the cap sensor by executing 100 loop
iterations, each iteration measuring 50 samples
responses:
'200':
description: >-
A list of dictionaries containing the min, max, avg and stddev^2
values
'400':
description: >-
When a timeout occurs (taking too long to get the data) or when the
printer is already busy
'/printer/diagnostics/cap_sensor_noise/{loop_count}':
get:
tags:
- Printer
description: >-
Calculates noise variances on the cap sensor by executing the specified
loop_count iterations, each iteration measuring 50 samples
parameters:
- name: loop_count
in: path
description: The number of times to get sample data
required: true
schema:
type: integer
format: int32
responses:
'200':
description: >-
A list of dictionaries containing the min, max, avg and stddev^2
values
'400':
description: >-
When a timeout occurs (taking too long to get the data) or when the
printer is already busy
'/printer/diagnostics/cap_sensor_noise/{loop_count}/{sample_count}':
get:
tags:
- Printer
description: >-
Calculates noise variances on the cap sensor by executing the specified
loop_count iterations, each iteration measuring sample_count samples
parameters:
- name: loop_count
in: path
description: The number of times to get sample data
required: true
schema:
type: integer
format: int32
- name: sample_count
in: path
description: The number of samples to get in each iteration
required: true
schema:
type: integer
format: int32
responses:
'200':
description: >-
A list of dictionaries containing the min, max, avg and stddev^2
values
'400':
description: >-
When a timeout occurs (taking too long to get the data) or when the
printer is already busy
'/printer/diagnostics/temperature_flow/{sample_count}':
get:
tags:
- Printer
description: Gets historical temperature & flow data
parameters:
- name: sample_count
in: path
description: The number of samples to get
required: true
schema:
type: integer
format: int32
- name: csv
in: query
description: >-
If not zero, return the results as comma separated values instead of
a normal json response.
required: false
schema:
type: integer
format: int32
responses:
'200':
description: >-
A 2 dimensional array of sample data. First row of the array
contains names of each column. All the other rows contain the actual
sample data.
/printer/diagnostics/probing_report:
get:
tags:
- Printer
responses:
'200':
description: Gets a file with the most recent build plate probing report.
content:
application/json:
schema:
type: string
format: binary
'204':
description: When no probing report is found.
/printer/status:
get:
tags:
- Printer
description: Get the status of the printer
responses:
'200':
description: >-
Global status of the printer, most interesting ones are 'idle' which
means the printer can accept a print job. And 'printing' which means
the printer is actively working on a print job.
content:
application/json:
schema:
$ref: '#/components/schemas/Printer_status'
/printer/led:
get:
tags:
- Printer
description: 'Returns the hue, saturation, and value (HSV) of the case lighting'
responses:
'200':
description: HSV the case lighting
content:
application/json:
schema:
$ref: '#/components/schemas/led'
put:
tags:
- Printer
description: 'Sets the hue, saturation, and value (HSV) of the case lighting'
responses:
'204':
description: lighting set
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/led'
description: Target HSV of case lighting
required: true
/printer/led/hue:
get:
tags:
- Printer
description: Returns the hue of the case lighting
responses:
'200':
description: Current hue of the case lighting
content:
application/json:
schema:
$ref: '#/components/schemas/led_hue'
put:
tags:
- Printer
responses:
'204':
description: lighting set
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/led_hue'
description: Target hue of case lighting
required: true
/printer/led/saturation:
get:
tags:
- Printer
description: Returns the saturation of the case lighting
responses:
'200':
description: Current saturation of the case lighting
content:
application/json:
schema:
$ref: '#/components/schemas/led_saturation'
put:
tags:
- Printer
responses:
'204':
description: lighting set
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/led_saturation'
description: Target saturation of case lighting
required: true
/printer/led/brightness:
get:
tags:
- Printer
description: Returns the brightness of the case lighting
responses:
'200':
description: Current brightness of the case lighting
content:
application/json:
schema:
$ref: '#/components/schemas/led_brightness'
put:
tags:
- Printer
responses:
'204':
description: lighting set
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/led_brightness'
description: Target brightness of case lighting
required: true
/printer/led/blink:
post:
tags:
- Printer
responses:
'204':
description: blink set
'400':
description: This is returned when frequency <= 0 or count <= 0 with a message
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Blink'
/printer/heads:
get:
tags:
- Printer
description: Returns all heads of the printer
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Head'
'/printer/heads/{head_id}':
get:
tags:
- Printer
description: Returns head by ID
parameters:
- name: head_id
in: path
description: ID of head to fetch
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Head'
'404':
description: >-
Head was not found. Note that this means that all deeper (eg:
getting position, extruders, etc.) calls will also return a 404
'/printer/heads/{head_id}/position':
get:
tags:
- Printer
description: Returns position of head by ID
parameters:
- name: head_id
in: path
description: >-
ID of head of which to get position. Note that this position also
has a Z component. This api assumes that the head is the only part
that moves.
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/XYZ'
put:
tags:
- Printer
parameters:
- name: head_id
in: path
description: ID of head from which the hotend is fetched
required: true
schema:
type: integer
format: int64
responses:
'204':
description: Position set
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/XYZ'
description: Target position
required: true
'/printer/heads/{head_id}/max_speed':
get:
tags:
- Printer
description: Returns max speed of head by ID
parameters:
- name: head_id
in: path
description: >-
ID of head of which to get the max speed of. Note that this speed
also has a Z component. This api assumes that the head is the only
part that moves.
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/XYZ'
put:
tags:
- Printer
parameters:
- name: head_id
in: path
description: ''
required: true
schema:
type: integer
format: int64
responses:
'204':
description: Max speed set
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/XYZ'
description: Target maximum speed for each axis.
required: true
'/printer/heads/{head_id}/acceleration':
get:
tags:
- Printer
description: Returns the default acceleration of head by ID.
parameters:
- name: head_id
in: path
description: >-
ID of head of which to get the default acceleration of. Note that
this speed also has a Z component. This API assumes that the head is
the only part that moves.
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
type: number
put:
tags:
- Printer
parameters:
- name: head_id
in: path
description: ''
required: true
schema:
type: integer
format: int64
responses:
'204':
description: acceleration speed set
requestBody:
content:
application/json:
schema:
type: number
description: Target default acceleration.
required: true
'/printer/heads/{head_id}/jerk':
get:
tags:
- Printer
description: Returns jerk of head by ID
parameters:
- name: head_id
in: path
description: >-
ID of head of which to get the jerk of. Note that this speed also
has a Z component. This API assumes that the head is the only part
that moves.
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/XYZ'
put:
tags:
- Printer
parameters:
- name: head_id
in: path
description: ''
required: true
schema:
type: integer
format: int64
responses:
'204':
description: Jerk set
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/XYZ'
description: Target jerk
required: true
/printer/bed:
get:
tags:
- Printer
description: Returns bed object
responses:
'200':
description: bed object
content:
application/json:
schema:
$ref: '#/components/schemas/Bed'
/printer/bed/temperature:
get:
tags:
- Printer
description: Returns temperature of bed
responses:
'200':
description: Temperature of the bed
content:
application/json:
schema:
$ref: '#/components/schemas/CurrentTargetNumberPair'
put:
tags:
- Printer
responses:
'204':
description: Temperature set
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
temperature:
description: Target temperature of bed
type: number
required:
- temperature
/printer/bed/pre_heat:
get:
tags:
- Printer
description: Returns status of pre-heating the heated bed.
responses:
'200':
description: Status of pre-heating the heated bed.
content:
application/json:
schema:
type: object
properties:
active:
type: boolean
remaining:
type: number
description: >-
Remaining pre-heat time in seconds. Only available when
'active' is True
put:
tags:
- Printer
responses:
'204':
description: Preheating Temperature set
'400':
description: Bad request (invalid parameters)
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Bed_PreHeat'
required: true
/printer/bed/type:
get:
tags:
- Printer
description: Returns the type of the bed.
responses:
'200':
description: 'The type of the bed, for now glass.'
content:
application/json:
schema:
type: string
'/printer/heads/{head_id}/extruders':
get:
tags:
- Printer
description: Returns all extruders of a head
parameters:
- name: head_id
in: path
description: ID of head from which the extruders are fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Extruder'
'/printer/heads/{head_id}/extruders/{extruder_id}':
get:
tags:
- Printer
description: Returns extruder by ID
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder to fetch.
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Extruder'
'/printer/heads/{head_id}/extruders/{extruder_id}/hotend/offset':
get:
tags:
- Printer
description: Returns offset of hotend with respect to head
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder to fetch
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/HotendOffset'
'/printer/heads/{head_id}/extruders/{extruder_id}/feeder':
get:
tags:
- Printer
description: Returns feeder of selected extruder
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the feeder is fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Feeder'
'/printer/heads/{head_id}/extruders/{extruder_id}/feeder/jerk':
get:
tags:
- Printer
description: Returns jerk of feeder
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the feeder is fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
type: number
put:
tags:
- Printer
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the feeder is fetched
required: true
schema:
type: integer
format: int64
responses:
'204':
description: Jerk set
requestBody:
content:
application/json:
schema:
type: number
description: Target jerk
required: true
'/printer/heads/{head_id}/extruders/{extruder_id}/feeder/max_speed':
get:
tags:
- Printer
description: Returns max_speed of feeder.
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the feeder is fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
type: number
put:
tags:
- Printer
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the feeder is fetched
required: true
schema:
type: integer
format: int64
responses:
'204':
description: Max speed set
requestBody:
content:
application/json:
schema:
type: number
description: Target max speed
required: true
'/printer/heads/{head_id}/extruders/{extruder_id}/feeder/acceleration':
get:
tags:
- Printer
description: Returns acceleration of feeder.
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the feeder is fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
type: number
put:
tags:
- Printer
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the feeder is fetched
required: true
schema:
type: integer
format: int64
responses:
'204':
description: Acceleration set
requestBody:
content:
application/json:
schema:
type: number
description: Target acceleration speed
required: true
'/printer/heads/{head_id}/extruders/{extruder_id}/active_material':
get:
tags:
- Printer
description: Get the active material of the extruder
parameters:
- name: head_id
in: path
description: ID of head from which the extruder is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Material'
'/printer/heads/{head_id}/extruders/{extruder_id}/active_material/length_remaining':
get:
tags:
- Printer
description: length of material remaining on spool in mm. Or -1 if no value is known.
parameters:
- name: head_id
in: path
description: ID of head from which the hotend is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the hotend is fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: >-
length of material remaining on spool in mm. Or -1 if no value is
known.
content:
application/json:
schema:
type: number
'/printer/heads/{head_id}/extruders/{extruder_id}/hotend':
get:
tags:
- Printer
description: Returns hotend of extruder
parameters:
- name: head_id
in: path
description: ID of head from which the hotend is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the hotend is fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Hotend'
'/printer/heads/{head_id}/extruders/{extruder_id}/hotend/temperature':
get:
tags:
- Printer
description: Returns temperature of extruder
parameters:
- name: head_id
in: path
description: ID of head from which the hotend is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the hotend is fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Temperature of the hotend
content:
application/json:
schema:
$ref: '#/components/schemas/CurrentTargetNumberPair'
put:
tags:
- Printer
parameters:
- name: head_id
in: path
description: ID of head from which the hotend is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the hotend is fetched
required: true
schema:
type: integer
format: int64
responses:
'204':
description: Temperature set
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
temperature:
description: Target temperature of nozzle
type: number
required:
- temperature
'/printer/heads/{head_id}/extruders/{extruder_id}/active_material/guid':
get:
tags:
- Printer
description: Returns the GUID of the active material
parameters:
- name: head_id
in: path
description: ID of head from which the hotend is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the hotend is fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: The GUID of the current active material.
content:
application/json:
schema:
type: string
'/printer/heads/{head_id}/extruders/{extruder_id}/active_material/GUID':
get:
tags:
- Printer
deprecated: true
description: Returns the GUID of the active material
parameters:
- name: head_id
in: path
description: ID of head from which the hotend is fetched
required: true
schema:
type: integer
format: int64
- name: extruder_id
in: path
description: ID of extruder from which the hotend is fetched
required: true
schema:
type: integer
format: int64
responses:
'200':
description: The GUID of the current active material.
content:
application/json:
schema:
type: string
/printer/network:
get:
tags:
- Network
description: Returns network state
responses:
'200':
description: Network object
content:
application/json:
schema:
$ref: '#/components/schemas/Network'
/printer/network/wifi_networks:
get:
tags:
- Network
description: Returns a list of available wifi networks
responses:
'200':
description: List of network ssid'
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Wifi_network'
'/printer/network/wifi_networks/{ssid}':
put:
tags:
- Network
description: Connect to a wifi network
parameters:
- name: ssid
in: path
description: ssid of the network to connect with.
required: true
schema:
type: string
responses:
'204':
description: ''
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
passphrase:
description: Phassphrase of network to connect with
type: string
required:
- passphrase
delete:
tags:
- Network
description: Forget a wifi network
parameters:
- name: ssid
in: path
description: ssid of the network to forget.
required: true
schema:
type: string
responses:
'204':
description: ''
/printer/validate_header:
post:
tags:
- Printer
responses:
'200':
description: All header validation mishaps
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/HeaderValidationEntry'
'400':
description: No validation checked because file is missing.
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
file:
description: 'File that needs to be printed (.gcode, .gcode.gz)'
type: string
format: binary
required:
- file
/printer/beep:
post:
tags:
- Printer
description: Makes the printer beep
responses:
'204':
description: Printer beeped
'400':
description: Unable to beep due to missing parameters
requestBody:
content:
application/json:
schema:
type: object
properties:
frequency:
description: The frequency of the tone in hz.
type: number
duration:
description: The duration in milliseconds.
type: number
required: true
/print_job:
get:
tags:
- PrintJob
responses:
'200':
description: Print job object
content:
application/json:
schema:
$ref: '#/components/schemas/PrintJob'
'404':
description: No printer job running
post:
tags:
- PrintJob
responses:
'201':
description: Print job accepted
content:
application/json:
schema:
type: object
properties:
message:
type: string
uuid:
$ref: '#/components/schemas/uuid'
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
jobname:
description: Name of the print job.
type: string
file:
description: 'File that needs to be printed (.gcode, .gcode.gz, .ufp)'
type: string
format: binary
required:
- jobname
- file
/print_job/name:
get:
tags:
- PrintJob
description: Name of print job
responses:
'200':
description: Name of print job
content:
application/json:
schema:
type: string
'404':
description: No printer job running
/print_job/datetime_started:
get:
tags:
- PrintJob
description: The moment the current print job was started
responses:
'200':
description: A timestamp in ISO 8601 format or an empty string if not available
content:
application/json:
schema:
type: string
format: date-time
'404':
description: No printer job running
/print_job/datetime_finished:
get:
tags:
- PrintJob
description: The moment the last print job finished.
responses:
'200':
description: A timestamp in ISO 8601 format or an empty string if not available
content:
application/json:
schema:
type: string
format: date-time
'404':
description: No printer job running
/print_job/datetime_cleaned:
get:
tags:
- PrintJob
description: The moment the last print job was cleaned from the build plate
responses:
'200':
description: A timestamp in ISO 8601 format or an empty string if not available
content:
application/json:
schema:
type: string
format: date-time
'404':
description: No printer job running
/print_job/source:
get:
tags:
- PrintJob
description: >-
From what source was the print job started. USB means it's started
manually from the USB drive. WEB_API means it's being received by the
WEB API. CALIBRATION_MENU means it's printing the XY offset print
responses:
'200':
description: ''
content:
application/json:
schema:
type: string
enum:
- USB
- WEP_API
- CALIBRATION_MENU
'404':
description: No printer job running
/print_job/source_user:
get:
tags:
- PrintJob
description: >-
If the origin equals to WEB_API, then this will return the user who
initiated the job
responses:
'200':
description: ''
content:
application/json:
schema:
type: string
'404':
description: No printer job running
/print_job/source_application:
get:
tags:
- PrintJob
description: >-
If the origin equals to WEB_API, then this will return the application
that sent the job
responses:
'200':
description: ''
content:
application/json:
schema:
type: string
'404':
description: No printer job running
/print_job/uuid:
get:
tags:
- PrintJob
responses:
'200':
description: Unique identifier of this print job. In a UUID4 format.
content:
application/json:
schema:
$ref: '#/components/schemas/uuid'
'404':
description: No printer job running
/print_job/reprint_original_uuid:
get:
tags:
- PrintJob
responses:
'200':
description: Unique identifier of this print job. In a UUID4 format.
content:
application/json:
schema:
$ref: '#/components/schemas/uuid'
'404':
description: No printer job running
/print_job/time_elapsed:
get:
tags:
- PrintJob
description: >-
Get the time elapsed (in seconds) since starting this print, including
pauses etc.
responses:
'200':
description: ''
content:
application/json:
schema:
type: integer
'404':
description: No printer job running
/print_job/time_total:
get:
tags:
- PrintJob
description: >-
Get the (estimated) total time in seconds for this print, excluding
pauses etc.
responses:
'200':
description: ''
content:
application/json:
schema:
type: integer
'404':
description: No printer job running
/print_job/progress:
get:
tags:
- PrintJob
description: >-
Get the (estimated) progress for the current print job, a value between
0 and 1
responses:
'200':
description: ''
content:
application/json:
schema:
type: number
'404':
description: No printer job running
/print_job/gcode:
get:
tags:
- PrintJob
responses:
'200':
description: >-
Get the gcode (possibly gzipped) of the active print job, you need
to get this with authentication!
content:
application/json:
schema:
type: string
format: binary
'404':
description: No printer job running or no gcode found
/print_job/container:
get:
tags:
- PrintJob
responses:
'200':
description: >-
Get the file (Gzipped, gcode or UFP) of the active print job, you
need to get this with authentication!
content:
application/json:
schema:
type: string
format: binary
'404':
description: No printer job running or no file found
/print_job/pause_source:
get:
tags:
- PrintJob
description: If the printer is paused this exposes what initiated the pause
responses:
'200':
description: ''
content:
application/json:
schema:
type: string
enum:
- unknown
- gcode
- display
- flowsensor
- printer
- api
'404':
description: No printer job running
/print_job/state:
get:
tags:
- PrintJob
description: Get the print job state
responses:
'200':
description: ''
content:
application/json:
schema:
type: string
enum:
- none
- printing
- pausing
- paused
- resuming
- pre_print
- post_print
- wait_cleanup
- wait_user_action
'404':
description: No printer job running
put:
tags:
- PrintJob
responses:
'204':
description: State changed
requestBody:
content:
application/json:
schema:
type: string
enum:
- print
- pause
- abort
description: >-
"print", "pause" or "abort". Change the current state of the print.
Note that only changes to abort / pause are always allowed and
changing to print only when state is paused.
required: true
/print_job/result:
get:
tags:
- PrintJob
description: The result of the current print job
responses:
'200':
description: The result of a print job
content:
application/json:
schema:
$ref: '#/components/schemas/printJob_result'
'404':
description: No printer job running
/history/print_jobs:
get:
tags:
- History
parameters:
- name: offset
in: query
description: >-
Allow an offset parameter to specify the start in the history to get
jobs from. Defaults to 0
required: false
schema:
type: number
- name: count
in: query
description: >-
Allow a count parameter to specify the number of jobs to get from
the log. Defaults to 50
required: false
schema:
type: number
responses:
'200':
description: All past PrintJobs on this printer
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PrintJobHistory'
'/history/print_jobs/{uuid}':
get:
tags:
- History
parameters:
- name: uuid
in: path
description: UUID of the job to get
required: true
schema:
type: string
responses:
'200':
description: PrintJob with the given UUID
content:
application/json:
schema:
$ref: '#/components/schemas/PrintJobHistory'
/history/events:
get:
tags:
- History
parameters:
- name: offset
in: query
description: >-
Allow an offset parameter to specify the start in the history to get
events from. Defaults to 0
required: false
schema:
type: number
- name: count
in: query
description: >-
Allow a count parameter to specify the number of events to get from
the log. Defaults to 50
required: false
schema:
type: number
- name: type_id
in: query
description: Allows the user to filter events by type
required: false
schema:
type: number
responses:
'200':
description: All events that happened on this printer
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/EventHistoryEntry'
post:
tags:
- History
responses:
'200':
description: Event logged
'400':
description: 'Bad request, some input value was not excepted.'
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
type_id:
type: number
parameters:
type: array
items:
type: string
required:
- type_id
- parameters
/system:
get:
tags:
- System
description: Get the entire system object
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/System'
/system/platform:
get:
tags:
- System
description: A string identifying the underlying platform in human readable form.
responses:
'200':
description: Platform
content:
application/json:
schema:
type: string
/system/hostname:
get:
tags:
- System
description: The hostname of this machine
responses:
'200':
description: Hostname
content:
application/json:
schema:
type: string
/system/firmware:
get:
tags:
- System
description: The version of the firmware currently running
responses:
'200':
description: Firmware version
content:
application/json:
schema:
type: string
put:
tags:
- System
description: >-
Trigger a firmware update. Printer will try to fetch & install the
latest version.
responses:
'200':
description: Update started
requestBody:
content:
application/json:
schema:
type: string
description: Type of the firmware update to do. Can be 'testing' or 'stable'
/system/firmware/status:
get:
tags:
- System
description: Get the status of the firmware update
responses:
'200':
description: Status of the firmware update
content:
application/json:
schema:
type: string
/system/firmware/stable:
get:
tags:
- System
description: Get the version available for updating to of the 'stable' release path
responses:
'200':
description: Possible future firmware version
content:
application/json:
schema:
type: string
/system/firmware/testing:
get:
tags:
- System
description: Get the version available for updating to of the 'testing' release path
responses:
'200':
description: Possible future firmware version
content:
application/json:
schema:
type: string
/system/memory:
get:
tags:
- System
description: The current memory usage
responses:
'200':
description: Memory usage
content:
application/json:
schema:
$ref: '#/components/schemas/system_memory'
/system/time:
get:
tags:
- System
description: The current UTC time
responses:
'200':
description: Time
content:
application/json:
schema:
$ref: '#/components/schemas/system_time'
/system/log:
get:
tags:
- System
description: Get the logs of the system
parameters:
- name: boot
in: query
description: >-
Allow a boot parameter to get logs from previous boot sessions,
default is 0 which is the current boot. -1 is the previous boot.
required: false
schema:
type: number
- name: lines
in: query
description: >-
Allow a lines parameter to specify the number of lines to get from
the log. Defaults to 50
required: false
schema:
type: number
responses:
'200':
description: Log data
content:
application/json:
schema:
$ref: '#/components/schemas/SystemLog'
/system/name:
get:
tags:
- System
description: Get the name of the system
responses:
'200':
description: name
content:
application/json:
schema:
type: string
put:
tags:
- System
responses:
'204':
description: Name set
'400':
description: 'Name is not set, because an invalid name is specified'
requestBody:
content:
application/json:
schema:
type: string
description: Target name of machine
required: true
/system/country:
get:
tags:
- System
description: Get the country of the system
responses:
'200':
description: country
content:
application/json:
schema:
type: string
put:
tags:
- System
responses:
'204':
description: Country set
requestBody:
content:
application/json:
schema:
type: string
description: Target country of system
required: true
/system/language:
get:
tags:
- System
description: Get the language of the system
responses:
'200':
description: Language
content:
application/json:
schema:
type: string
/system/uptime:
get:
tags:
- System
description: Get the uptime of the system in seconds
responses:
'200':
description: Uptime
content:
application/json:
schema:
type: integer
/system/type:
get:
tags:
- System
description: >-
Get the type of machine that we are talking with. Always returns "3D
printer"
responses:
'200':
description: Type of machine
content:
application/json:
schema:
type: string
/system/variant:
get:
tags:
- System
description: >-
Gets the machines variant. Currently this can return "Ultimaker 3",
"Ultimaker 3 extended" or "Ultimaker S5".
responses:
'200':
description: Machine variant
content:
application/json:
schema:
type: string
/system/hardware:
get:
tags:
- System
description: Gets the hardware number and revision identifiers
responses:
'200':
description: Machine hardware type and revision ID
content:
application/json:
schema:
$ref: '#/components/schemas/system_hardware'
/system/hardware/typeid:
get:
tags:
- System
description: >-
Gets the machine type as number identifier. This identifier IDs a
specific form of hardware
responses:
'200':
description: Machine hardware type ID
content:
application/json:
schema:
type: integer
/system/hardware/revision:
get:
tags:
- System
description: >-
The same machine could have different hardware revisions. When hardware
is updated and software needs to know that hardware has changed, this
revision number is changed. Currently only revision 0 is known.
responses:
'200':
description: Machine hardware revision
content:
application/json:
schema:
type: integer
/system/guid:
get:
tags:
- System
description: >-
Every machine as a unique identifier stored inside the board. This
allows for unique identification of this machine. This identifier is a
UUID4.
responses:
'200':
description: Machine guid
content:
application/json:
schema:
type: string
/system/display_message:
put:
tags:
- System
description: Enable external services to display a message screen on the printer.
responses:
'200':
description: Message is being displayed on the printer.
'400':
description: No message specified.
'405':
description: Message cannot be displayed because the printer is busy.
requestBody:
content:
application/json:
schema:
type: object
required:
- message
properties:
message:
type: string
button_caption:
type: string
description: Data to display on the screen of the printer.
required: true
servers:
- url: /api/v1
components:
schemas:
Camera:
type: object
required:
- feed
properties:
feed:
type: string
Printer_status:
type: string
enum:
- booting
- idle
- printing
- error
- maintenance
Printer:
type: object
required:
- heads
properties:
heads:
type: array
items:
$ref: '#/components/schemas/Head'
camera:
$ref: '#/components/schemas/Camera'
bed:
$ref: '#/components/schemas/Bed'
network:
$ref: '#/components/schemas/Network'
led:
$ref: '#/components/schemas/led'
status:
$ref: '#/components/schemas/Printer_status'
Material:
type: object
properties:
length_remaining:
description: >-
mm of filament remaining on spool. Returns -1 if the remaining
length is unknown.
type: number
GUID:
description: >-
Unique identifier of the material, empty string if no material
loaded.
type: string
Network:
type: object
properties:
wifi:
type: object
properties:
connected:
type: boolean
description: A bool indicating if the interface is connected.
enabled:
type: boolean
description: A bool indicating if the interface is enabled.
mode:
type: string
description: Wifi mode
enum:
- AUTO
- HOTSPOT
- WIFI SETUP
- CABLE
- WIRELESS
- OFFLINE
ssid:
type: string
description: >-
If connected, the SSID of the hotspot this machine is connected
to.
wifi_networks:
type: array
items:
$ref: '#/components/schemas/Wifi_network'
ethernet:
type: object
properties:
connected:
type: boolean
description: A bool indicating if the interface is connected.
enabled:
type: boolean
description: A bool indicating if the interface is enabled.
Extruder:
type: object
description: >-
Extruder drive train. Includes the feeder & nozzle. Note that its id can
never be lower than 0 and should be seen as an index.
properties:
hotend:
$ref: '#/components/schemas/Hotend'
feeder:
$ref: '#/components/schemas/Feeder'
active_material:
$ref: '#/components/schemas/Material'
Head:
type: object
description: >-
Head of a printer. May contain multiple extruders. Heads can be uniquely
identified by ID. The id is an integer starting at 0.
properties:
position:
$ref: '#/components/schemas/XYZ'
max_speed:
$ref: '#/components/schemas/XYZ'
acceleration:
description: 'The default acceleration for the X, Y and Z axis'
type: number
jerk:
$ref: '#/components/schemas/XYZ'
extruders:
type: array
items:
$ref: '#/components/schemas/Extruder'
fan:
description: The speed of the fan in percentage
type: number
Wifi_network:
type: object
properties:
ssid:
type: string
security_required:
type: boolean
strength:
type: integer
Hotend:
type: object
description: A single hotend
required:
- id
properties:
id:
type: string
serial:
description: A hexadecimal representation of the serial number
type: string
temperature:
$ref: '#/components/schemas/CurrentTargetNumberPair'
offset:
$ref: '#/components/schemas/HotendOffset'
statistics:
$ref: '#/components/schemas/HotendStatistics'
led_hue:
description: A LED hue value that ranges from 0-360
type: number
led_saturation:
description: A LED saturation value that ranges from 0-100
type: number
led_brightness:
description: A LED brightness value that ranges from 0-100
type: number
led:
type: object
description: A single (or set) of light source(s)
properties:
hue:
$ref: '#/components/schemas/led_hue'
saturation:
$ref: '#/components/schemas/led_saturation'
brightness:
$ref: '#/components/schemas/led_brightness'
Blink:
type: object
description: A description of a LED blink pattern
properties:
frequency:
description: Determine how fast the blink will happen (in Hz); defaults to 1Hz;
type: number
minimum: 0.1
count:
description: >-
The number of times the blinking should be repeated; defaults to
once.
type: number
minimum: 1
Bed:
type: object
description: (heated) bed of the printer
properties:
temperature:
$ref: '#/components/schemas/CurrentTargetNumberPair'
CurrentTargetNumberPair:
type: object
description: >-
Object with two numbers; Current (numeric) value of a setting and the
target (numeric) value of a setting
properties:
target:
type: number
current:
type: number
Feeder:
type: object
description: The feeder unit
properties:
position:
description: The position of the feeder. This is otherwise known as the E value
type: number
max_speed:
type: number
description: Max speed of the feeder in mm/s
jerk:
type: number
description: Acceleration of the acceleration (in mm/s^3)
acceleration:
type: number
description: Acceleration of the feeder (in mm/s^2)
HotendOffset:
type: object
description: >-
X,Y and Z offset of this hotend nozzle exit compared to the other
hotends in this head. The state indicates if the data for this hotend is
valid and thus can be used.
properties:
x:
type: number
default: 0
'y':
type: number
default: 0
z:
type: number
default: 0
state:
type: string
enum:
- valid
- invalid
HotendStatistics:
type: object
description: Keeping track of both changing statistics of the PrintCore.
properties:
last_material_guid:
$ref: '#/components/schemas/uuid'
material_extruded:
description: >-
Approximate accumulated amount of material extruded during printing
in millimeters.
type: integer
max_temperature_exposed:
description: Maximum temperature exposed in degrees Celsius
type: integer
time_spent_hot:
description: Approximate time spent above 65 degrees Celsius in seconds.
type: integer
XYZ:
type: object
description: Container for xyz
properties:
x:
type: number
default: 0
'y':
type: number
default: 0
z:
type: number
default: 0
printJob_result:
type: string
enum:
- Failed
- Aborted
- Finished
PrintJob:
type: object
description: An active print job.
properties:
time_elapsed:
type: integer
time_total:
type: integer
datetime_started:
description: Moment this print job started in ISO 8601 format
type: string
format: date-time
datetime_finished:
description: >-
Moment this print job finished in ISO 8601 format or empty string if
not finished yet
type: string
format: date-time
datetime_cleaned:
description: >-
Moment this print job was cleaned in ISO 8601 format or empty string
if build plate not cleaned yet
type: string
format: date-time
source:
type: string
source_user:
type: string
source_application:
type: string
name:
type: string
uuid:
$ref: '#/components/schemas/uuid'
reprint_original_uuid:
$ref: '#/components/schemas/uuid'
progress:
type: number
description: >-
Estimated progress for the current print job, a value between 0 and
1
state:
type: string
enum:
- none
- printing
- pausing
- paused
- resuming
- pre_print
- post_print
- wait_cleanup
- wait_user_action
result:
$ref: '#/components/schemas/printJob_result'
HeaderValidationEntry:
type: object
description: A validation result of the header check.
properties:
fault_code:
type: string
enum:
- HEADER_NOT_PRESENT
- HEADER_MISSING_ITEM
- MACHINE_TOO_SMALL_FOR_GCODE
- CHANGE_BUILDPLATE
- NOZZLE_AMOUNT_MISMATCH
- NOZZLE_MISMATCH
- MATERIAL_NOT_LOADED
- GUID_MISMATCH
fault_level:
type: string
enum:
- WARNING
- ERROR
message:
type: string
data:
description: >-
This is a string encoded dictionary holding Key/Value pairs or an
empty string
type: string
PrintJobHistory:
type: object
description: A print job in the past.
properties:
time_elapsed:
type: integer
time_estimated:
type: integer
time_total:
type: integer
datetime_started:
type: string
format: date-time
datetime_finished:
type: string
format: date-time
datetime_cleaned:
type: string
format: date-time
result:
type: string
enum:
- Finished
- Aborted
source:
type: string
reprint_original_uuid:
$ref: '#/components/schemas/uuid'
name:
type: string
uuid:
$ref: '#/components/schemas/uuid'
EventHistoryEntry:
type: object
description: An event that happened on the printer.
properties:
time:
type: string
format: date-time
type_id:
type: number
message:
type: string
parameters:
type: array
items:
type: string
uuid:
description: UUID in UUID4 format.
type: string
system_memory:
description: System memory
type: object
properties:
total:
description: in kb
type: integer
used:
description: in kb
type: integer
system_hardware:
type: object
description: Hardware versions
properties:
typeid:
type: integer
revision:
type: integer
system_time:
type: object
properties:
utc:
type: number
description: Number of seconds since the Unix Epoch
System:
type: object
description: 'Meta data on the system. '
properties:
name:
type: string
platform:
type: string
hostname:
type: string
uptime:
type: integer
time:
$ref: '#/components/schemas/system_time'
type:
type: string
variant:
type: string
memory:
$ref: '#/components/schemas/system_memory'
hardware:
$ref: '#/components/schemas/system_hardware'
log:
type: string
version:
type: string
guid:
type: string
SystemLog:
type: array
items:
type: string
Bed_PreHeat:
type: object
properties:
temperature:
description: >-
Target temperature of bed in degrees Celsius. Set to 0 to stop
pre-heating
type: number
minimum: 0
timeout:
description: Timeout for preheating in seconds
type: number
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment