List all printers
const url = 'https://example.com/api/v1/printers';const options = {method: 'GET', headers: {'X-Label-Hub-Key': '<X-Label-Hub-Key>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/v1/printers \ --header 'X-Label-Hub-Key: <X-Label-Hub-Key>'Returns every registered printer. The paused flag is joined from printer_state; it is false when no state row exists yet. Pass ?slug=<slug> to filter to a single printer by exact slug match (returns 404 when no printer with that slug exists).
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”Successful Response
Full representation of a Printer row, augmented with the paused flag.
paused is joined from the printer_state table; it defaults to
False for printers whose state row was not yet created (safe — the
DB lifespan helper creates state rows at startup, so this only matters
in tests or during the very first boot).
object
object
Stored label layout per tape width in mm (#258), keyed by the width as a string; the print dialog preselects it. A missing width uses the tape default (62 mm across/compact, else along)
object
A stored layout default for one tape width of one printer.
None fields fall back to the built-in default for the tape (62 mm: across, compact;
every other width: along).
object
How the label content runs on endless tape.
The built-in QL 62 mm across-width layouts (docs/design/ql-layout-presets).
Example
[ { "layout_defaults": { "additionalProperty": { "orientation": "across", "preset": "compact" } }, "pause": { "source": "user" }, "slug": "" }]Validation Error
object
object
object
Example generated
{ "detail": [ { "ctx": {}, "input": "example", "loc": [ "example" ], "msg": "example", "type": "example" } ]}