Printago API
GET /v1/qr-tags

List QR tags

Filter with `entityType`, `status`, `batchId` or `entityId` (for example `?status=active&entityType=printer`), sort with `sort=-lastScannedAt`, and pass `meta=true` for a paged response with a total.

Requires any of: qr.scanqr.manage

Query Parameters

id optional
string
Filter by record ID. A bare value is an exact match; use id.in=a,b,c for several (up to 100). See Querying Data.
status optional
string
Filter on status. A bare value is an exact match (status=value); use status.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
entityType optional
string
Filter on entityType. A bare value is an exact match (entityType=value); use entityType.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
entityId optional
string
The printerId for printer_slot tags; null while blank. A blank keeps its printed payload (t: 'blank') after it is set up; this row says what it is.
slotAmsIndex optional
string
Slot identity for printer_slot tags; amsIndex -1 is the external spool
slotSlotIndex optional
string
Filter on slotSlotIndex. A bare value is an exact match (slotSlotIndex=value); use slotSlotIndex.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
label optional
string
Filter on label. A bare value is an exact match (label=value); use label.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
batchId optional
string
Filter on batchId. A bare value is an exact match (batchId=value); use batchId.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
payloadVersion optional
string
Filter on payloadVersion. A bare value is an exact match (payloadVersion=value); use payloadVersion.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
displaySnapshot optional
string
Filter on displaySnapshot. A bare value is an exact match (displaySnapshot=value); use displaySnapshot.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
printedAt optional
string
Filter on printedAt. A bare value is an exact match (printedAt=value); use printedAt.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
boundAt optional
string
Filter on boundAt. A bare value is an exact match (boundAt=value); use boundAt.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
boundBy optional
string
Filter on boundBy. A bare value is an exact match (boundBy=value); use boundBy.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
revokedAt optional
string
Filter on revokedAt. A bare value is an exact match (revokedAt=value); use revokedAt.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
revokedBy optional
string
Filter on revokedBy. A bare value is an exact match (revokedBy=value); use revokedBy.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
lastScannedAt optional
string
Filter on lastScannedAt. A bare value is an exact match (lastScannedAt=value); use lastScannedAt.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
scanCount optional
string
Filter on scanCount. A bare value is an exact match (scanCount=value); use scanCount.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
storeId optional
string
Filter by store ID. Results are always limited to the store your API key belongs to, so this is rarely useful. See Querying Data.
updatedAt optional
string
Filter by last-modified time. Pass an ISO 8601 timestamp with a comparison operator, e.g. updatedAt.gt=2025-01-01T00:00:00Z to fetch what changed since a checkpoint. See Querying Data.
createdAt optional
string
Filter by creation time. Pass an ISO 8601 timestamp with a comparison operator, e.g. createdAt.gte=2025-01-01T00:00:00Z. See Querying Data.
sort optional
string
Comma-separated field:direction pairs, applied in order, e.g. createdAt:desc,name:asc. Direction is asc (the default) or desc. At most 5 clauses; JSON and array fields cannot be sorted on. See Querying Data.
limit optional
number
Maximum number of records to return, 1–1000. Defaults to 1000; larger values are capped at 1000. See Querying Data.
offset optional
number
Number of matching records to skip before returning results. Combine with limit to page through a list, and with meta=true to learn the total. See Querying Data.
fields optional
string
Comma-separated list of fields to return, e.g. id,name,updatedAt. Other fields are left out of each record. At most 50 fields. See Querying Data.
include optional
string
Comma-separated related records to embed in each result, e.g. linkedParts,linkedParts.part. At most 4 includes, each at most 2 levels deep; only the relations this endpoint supports are accepted, anything else is a 400. See Querying Data.
meta optional
boolean
Set to true to wrap the response as { data, meta }, where meta carries total, count, offset, limit, hasMore and executionTime. Without it the response is a bare array. See Querying Data.
hints optional
boolean
Set to true to add a hints array of suggested follow-up API calls to the response (aimed at AI agents). A list response is wrapped as { data, meta, hints }. See Querying Data.

Response Schema

QrTag[] | SearchResponse
Variant 1QrTag[]
batchIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
boundAtrequirednullable
string
format: date-time
boundByrequirednullable
string
createdAtrequired
string
format: date-time
displaySnapshotrequirednullable
object
Caption data captured when a tag is created, so a tag still describes its target after the target is deleted.
brandoptional
string
codeoptional
string
The short code printed on a blank tag so two blanks can be told apart. It stays after the blank is set up, and becomes a new spool's label code.
coloroptionalnullable
string
#RRGGBBAA, or several joined with ";" for multicolor filament
materialNameoptional
string
Variant tags
nameoptional
string
The printer's name for printer and slot tags; the variant's name for variant and spool tags
provideroptionalnullable
string
slotRefoptional
string
Slot tags: the slot as the app names it, such as A1/3 or S1
entityIdrequirednullable
string
The printerId for printer_slot tags; null while blank. A blank keeps its printed payload (t: 'blank') after it is set up; this row says what it is.
pattern: ^[a-z0-9]{24}$
entityTyperequired
"blank" | "printer" | "printer_slot" | "material_variant" | "material_instance"
blankprinterprinter_slotmaterial_variantmaterial_instance
idrequired
string
pattern: ^[A-Za-z0-9_-]{1,24}$
labelrequirednullable
string
lastScannedAtrequirednullable
string
format: date-time
payloadVersionrequired
number
printedAtrequirednullable
string
format: date-time
revokedAtrequirednullable
string
format: date-time
revokedByrequirednullable
string
scanCountrequired
number
slotAmsIndexrequirednullable
number
Slot identity for printer_slot tags; amsIndex -1 is the external spool
slotSlotIndexrequirednullable
number
statusrequired
"blank" | "active" | "revoked" | "orphaned"
blankactiverevokedorphaned
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
updatedAtrequired
string
format: date-time
Variant 2SearchResponseStandardized search response with data, metadata, and query information
datarequired
Record<string, any>[]
Array of matching entities
metarequired
object
Pagination and result metadata
countrequired
number
Number of records returned in this response
executionTimerequired
number
Query execution time in milliseconds
hasMorerequired
boolean
Whether there are more records available
limitrequired
number
Maximum number of records requested
offsetrequired
number
Number of records skipped
totalrequired
number
Total number of matching records (before pagination)

Example Response

200 OK — application/json
[
  {
    "id": "string",
    "status": "blank",
    "entityType": "blank",
    "entityId": "string",
    "slotAmsIndex": 1,
    "slotSlotIndex": 1,
    "label": "string",
    "batchId": "string",
    "payloadVersion": 1,
    "displaySnapshot": {
      "name": "string",
      "provider": "string",
      "slotRef": "string",
      "materialName": "string",
      "brand": "string",
      "color": "string",
      "code": "string"
    },
    "printedAt": "2025-01-15T12:00:00.000Z",
    "boundAt": "2025-01-15T12:00:00.000Z",
    "boundBy": "string",
    "revokedAt": "2025-01-15T12:00:00.000Z",
    "revokedBy": "string",
    "lastScannedAt": "2025-01-15T12:00:00.000Z",
    "scanCount": 1,
    "storeId": "string",
    "updatedAt": "2025-01-15T12:00:00.000Z",
    "createdAt": "2025-01-15T12:00:00.000Z"
  }
]