Printago API
GET /v1/printers/{id}/capabilities

Get resolved capabilities

Resolve effective capabilities for one printer.

Path Parameters

id required
string
The printer's unique identifier

Response Schema

Response
axesoptional
object[]
axisoptional
"x" | "y" | "z"
xyz
flippedoptional
boolean
homeoptional
boolean
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
moveoptional
boolean
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
bedsoptional
object[]
hasMeshoptional
boolean
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
temperatureoptional
object
readoptional
boolean
setoptional
boolean
camerasoptional
object[]
Cameras attached to the printer. Built-in (`mounting:'builtin'`) cameras come from the printer's capability set; external IP/RTSP cameras (`mounting:'external'`) are added via printer config. Replaces the legacy `getCameraProtocol(modelCode)` lookup — all camera config flows through this array.
authoptional
string
Auth credentials for the stream — `Bearer ...`, `user:pass`, or a query-string fragment. Bambu protocols ignore this; their auth is derived from `printer.accessCode`.
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
mountingoptional
"external" | "builtin"
`builtin`: seeded by the capability set, locked in the UI. `external`: user-attached; editable + removable via printer config.
externalbuiltin
pathoptional
string
Override the URL path for `mjpeg-http` (default `/`). Used when the stream sits behind a fixed path on the printer's web server — e.g. Mainsail/Fluidd-style `/webcam/?action=stream` for camera-streamer or mjpg-streamer. Combined with `printer.ip + port` to build the full URL when `url` isn't set.
portoptional
number
Override default port for the protocol.
primaryoptional
boolean
When true, this is the printer's primary camera: it owns the bare `printer.id` go2rtc stream key, so the live dashboard/printer tile, periodic snapshots, the print-completion thumbnail, and timelapses all read from it instead of the built-in camera. At most one camera per printer should set this; when none do, the first camera (index 0, normally the built-in) is the implicit primary.
protocoloptional
enum
mjpeg-bamburtsps-bambuwebrtcrtsprtspsmjpeg-httphttp-flvhttp-snapshothttp-snapshot-poll
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
roleoptional
"overhead" | "bed" | "chamber" | "toolhead" | object
UX-only role for grouping/labeling.
Variant 1"overhead"
Variant 2"bed"
Variant 3"chamber"
Variant 4"toolhead"
Variant 5object
lengthoptional
number
Returns the length of a String object.
snapshotsoptional
boolean
Whether to capture periodic snapshots. Defaults true if unset.
timelapseoptional
boolean
Whether to record timelapses. Defaults true if unset.
urloptional
string
Literal stream URL. Required for non-Bambu protocols, EXCEPT for `mjpeg-http` cameras whose endpoint can be synthesized from `printer.ip + port` (path-agnostic MJPEG, e.g. Elegoo Centauri Carbon 2 on `:8080`). Set `url` when the camera is at a third-party absolute address; otherwise just set `port` and let the go2rtc generator build `http://${printer.ip}:${port}/`.
webrtcSignalingoptional
object
SDP-exchange config for `protocol: 'webrtc'`. Required when protocol is `'webrtc'`; ignored otherwise. The transport itself is always standard WebRTC; this only describes how the offer/answer get traded. For `creality-base64-json`, the signaling URL is built from `printer.ip:port` + `path` (e.g. http://192.168.1.26:8000/call/webrtc_local). For `whep`, `path` may be a full URL or a path appended to the camera's base URL.
flavoroptional
"whep" | "creality-base64-json" | "go2rtc-ws"
whepcreality-base64-jsongo2rtc-ws
pathoptional
string
Endpoint path or full URL for the signaling request.
chambersoptional
object[]
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
temperatureoptional
object
readoptional
boolean
setoptional
boolean
fansoptional
object[]
controllableoptional
boolean
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
nozzleRefoptional
string
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
reportsSpeedoptional
boolean
Whether the printer reports back a live fan speed. Defaults to true (omitted). Set false for write-only fans (e.g. OctoPrint, whose REST API accepts M106 but never surfaces a speed) so diagnostics skip the readback verification instead of failing a check they can't perform.
roleoptional
"part" | "aux" | "chamber" | "hotend" | "exhaust" | object
Variant 1"part"
Variant 2"aux"
Variant 3"chamber"
Variant 4"hotend"
Variant 5"exhaust"
Variant 6object
lengthoptional
number
Returns the length of a String object.
toolRefoptional
string
filamentoptional
object
dynamicSlotsoptional
boolean
readoptional
boolean
setInfooptional
boolean
filamentsoptional
object[]
Directly-fed filament sources. An array because some printers feed multiple positions simultaneously (Bambu external bay = 2, Snapmaker U1 = 4, Bambu H2D = 2+). Each entry is one loadable position. AMS / MMU / ERCF / CFS / toolchanger live separately under `peripherals` and are presented alongside these in the UI's Filaments view.
canLoadoptional
boolean
True if printer can auto-load filament into this source.
canReadFilamentoptional
boolean
True if printer hardware can read filament info from this source.
canUnloadoptional
boolean
True if printer can auto-unload filament.
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
filesoptional
object
listoptional
boolean
uploadoptional
boolean
gcodeoptional
boolean
lightsoptional
object[]
dimmableoptional
boolean
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
roleoptional
"chamber" | "work" | "indicator" | "strip" | object
Variant 1"chamber"
Variant 2"work"
Variant 3"indicator"
Variant 4"strip"
Variant 5object
lengthoptional
number
Returns the length of a String object.
nozzlesoptional
object[]
extrudeoptional
boolean
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
temperatureoptional
object
readoptional
boolean
setoptional
boolean
toolRefoptional
string
peripheralsoptional
object[]
canLoadoptional
boolean
canReadFilamentoptional
boolean
canUnloadoptional
boolean
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
maxSlotsPerUnitoptional
number
maxUnitsoptional
number
minSlotsPerUnitoptional
number
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
slotsPerUnitoptional
number
typeoptional
"ercf" | "mmu" | "toolchanger" | "ams" | object
Variant 1"ercf"
Variant 2"mmu"
Variant 3"toolchanger"
Variant 4"ams"
Variant 5object
lengthoptional
number
Returns the length of a String object.
printingoptional
object
pauseoptional
boolean
resumeoptional
boolean
skipObjectsoptional
boolean
startoptional
boolean
stopoptional
boolean
printOptionsoptional
object[]
choicesoptional
object[]
For `kind: "enum"`: allowed values with display labels.
labeloptional
string
valueoptional
string
defaultoptional
string | boolean
UI default when the stored providerConfig is null / missing the key.
descriptionoptional
string
Tooltip help text rendered next to the label.
kindoptional
"boolean" | "enum"
booleanenum
labeloptional
string
Human-readable display name
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
sensorsoptional
object[]
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
nozzleRefoptional
string
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
roleoptional
"lidar" | "filament_runout" | "door" | "accelerometer" | "bed_mesh" | object
Variant 1"lidar"
Variant 2"filament_runout"
Variant 3"door"
Variant 4"accelerometer"
Variant 5"bed_mesh"
Variant 6object
lengthoptional
number
Returns the length of a String object.
toolRefoptional
string
toolsoptional
object[]
fanRefsoptional
string[]
kindoptional
string
Optional vendor/extensible subtype when the base role is not enough
labeloptional
string
Human-readable display name
nozzleRefsoptional
string[]
refoptional
string
Logical reference, unique within its array. ASCII, lowercase, deterministic.
selectableoptional
boolean
sensorRefsoptional
string[]

Example Response

200 OK — application/json
{
  "nozzles": [
    {
      "temperature": {
        "read": true,
        "set": true
      },
      "extrude": true,
      "toolRef": "string",
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "tools": [
    {
      "selectable": true,
      "nozzleRefs": [
        "string"
      ],
      "fanRefs": [
        "string"
      ],
      "sensorRefs": [
        "string"
      ],
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "fans": [
    {
      "role": "part",
      "controllable": true,
      "reportsSpeed": true,
      "nozzleRef": "string",
      "toolRef": "string",
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "lights": [
    {
      "role": "chamber",
      "dimmable": true,
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "sensors": [
    {
      "role": "lidar",
      "nozzleRef": "string",
      "toolRef": "string",
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "beds": [
    {
      "temperature": {
        "read": true,
        "set": true
      },
      "hasMesh": true,
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "chambers": [
    {
      "temperature": {
        "read": true,
        "set": true
      },
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "axes": [
    {
      "axis": "x",
      "move": true,
      "home": true,
      "flipped": true,
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "filaments": [
    {
      "canReadFilament": true,
      "canLoad": true,
      "canUnload": true,
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "cameras": [
    {
      "protocol": "mjpeg-bambu",
      "mounting": "external",
      "url": "string",
      "port": 1,
      "path": "string",
      "auth": "string",
      "role": "overhead",
      "snapshots": true,
      "timelapse": true,
      "primary": true,
      "webrtcSignaling": {
        "flavor": "whep",
        "path": "string"
      },
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "peripherals": [
    {
      "type": "ercf",
      "maxUnits": 1,
      "slotsPerUnit": 1,
      "minSlotsPerUnit": 1,
      "maxSlotsPerUnit": 1,
      "canReadFilament": true,
      "canLoad": true,
      "canUnload": true,
      "ref": "string",
      "label": "string",
      "kind": "string"
    }
  ],
  "printing": {
    "start": true,
    "pause": true,
    "resume": true,
    "stop": true,
    "skipObjects": true
  },
  "filament": {
    "setInfo": true,
    "read": true,
    "dynamicSlots": true
  },
  "files": {
    "upload": true,
    "list": true
  },
  "gcode": true,
  "printOptions": [
    {
      "kind": "boolean",
      "default": "string",
      "choices": [
        {
          "value": "string",
          "label": "string"
        }
      ],
      "description": "string",
      "ref": "string",
      "label": "string"
    }
  ]
}