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.
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
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"
}
]