Printago API
POST /v1/printers/capabilities/resolve

Resolve capabilities for printers

Resolve effective capabilities for multiple printers (bulk).

Request Body

ResolvePrinterCapabilitiesRequest
printerIdsrequired
string[]

Example Request

application/json
{
  "printerIds": [
    "string"
  ]
}

Response Schema

ResolvePrinterCapabilitiesResponse
itemsrequired
object[]
capabilitiesrequirednullable
object
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
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.
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.
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
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
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
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
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
printingoptional
object
pauseoptional
boolean
resumeoptional
boolean
skipObjectsoptional
boolean
startoptional
boolean
stopoptional
boolean
printOptionsoptional
object[]
choicesoptional
object[]
For `kind: "enum"`: allowed values with display labels.
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
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[]
printerIdrequired
string
pattern: ^[a-z0-9]{24}$

Example Response

201 OK — application/json
{
  "items": [
    {
      "printerId": "string",
      "capabilities": {
        "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"
          }
        ]
      }
    }
  ]
}