Printago API
GET
/v2/print-history
List print history
List print attempts newest first (sorted by `endedAt:desc` unless you pass `sort`). Always returns a paginated envelope; `limit` defaults to 100. Filter with `field.operator=value` query parameters, for example `status.eq=failed`.
Query Parameters
printJobId
optional
string
Filter on
printJobId. A bare value is an exact match (printJobId=value); use printJobId.<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.
attemptNumber
optional
string
Filter on
attemptNumber. A bare value is an exact match (attemptNumber=value); use attemptNumber.<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.
taskId
optional
string
Filter on
taskId. A bare value is an exact match (taskId=value); use taskId.<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.
finalStatus
optional
string
Filter on
finalStatus. A bare value is an exact match (finalStatus=value); use finalStatus.<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.
outcome
optional
string
Filter on
outcome. A bare value is an exact match (outcome=value); use outcome.<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.
partBuildId
optional
string
Filter on
partBuildId. A bare value is an exact match (partBuildId=value); use partBuildId.<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.
partId
optional
string
Filter on
partId. A bare value is an exact match (partId=value); use partId.<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.
partName
optional
string
Filter on
partName. A bare value is an exact match (partName=value); use partName.<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.
skuId
optional
string
Filter on
skuId. A bare value is an exact match (skuId=value); use skuId.<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.
skuName
optional
string
Filter on
skuName. A bare value is an exact match (skuName=value); use skuName.<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.
groupId
optional
string
Filter on
groupId. A bare value is an exact match (groupId=value); use groupId.<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.
orderId
optional
string
Filter on
orderId. A bare value is an exact match (orderId=value); use orderId.<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.
orderItemId
optional
string
Filter on
orderItemId. A bare value is an exact match (orderItemId=value); use orderItemId.<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.
quantityIndex
optional
string
Filter on
quantityIndex. A bare value is an exact match (quantityIndex=value); use quantityIndex.<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.
quantityTotal
optional
string
Filter on
quantityTotal. A bare value is an exact match (quantityTotal=value); use quantityTotal.<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.
printerId
optional
string
Filter on
printerId. A bare value is an exact match (printerId=value); use printerId.<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.
printerDeviceId
optional
string
Filter on
printerDeviceId. A bare value is an exact match (printerDeviceId=value); use printerDeviceId.<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.
printerProvider
optional
string
Filter on
printerProvider. A bare value is an exact match (printerProvider=value); use printerProvider.<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.
printerName
optional
string
Filter on
printerName. A bare value is an exact match (printerName=value); use printerName.<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.
printerModelName
optional
string
Filter on
printerModelName. A bare value is an exact match (printerModelName=value); use printerModelName.<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.
printerVendorName
optional
string
Filter on
printerVendorName. A bare value is an exact match (printerVendorName=value); use printerVendorName.<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.
queuedAt
optional
string
Filter on
queuedAt. A bare value is an exact match (queuedAt=value); use queuedAt.<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.
assignmentStartedAt
optional
string
Filter on
assignmentStartedAt. A bare value is an exact match (assignmentStartedAt=value); use assignmentStartedAt.<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.
assignmentCompletedAt
optional
string
Filter on
assignmentCompletedAt. A bare value is an exact match (assignmentCompletedAt=value); use assignmentCompletedAt.<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.
printingStartedAt
optional
string
Filter on
printingStartedAt. A bare value is an exact match (printingStartedAt=value); use printingStartedAt.<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.
printingCompletedAt
optional
string
Filter on
printingCompletedAt. A bare value is an exact match (printingCompletedAt=value); use printingCompletedAt.<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.
cancelledAt
optional
string
Filter on
cancelledAt. A bare value is an exact match (cancelledAt=value); use cancelledAt.<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.
endedAt
optional
string
Filter on
endedAt. A bare value is an exact match (endedAt=value); use endedAt.<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.
printDurationSeconds
optional
string
Filter on
printDurationSeconds. A bare value is an exact match (printDurationSeconds=value); use printDurationSeconds.<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.
errorMessage
optional
string
Filter on
errorMessage. A bare value is an exact match (errorMessage=value); use errorMessage.<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.
materialUsageId
optional
string
Filter on
materialUsageId. A bare value is an exact match (materialUsageId=value); use materialUsageId.<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.
totalUsed
optional
string
Filter on
totalUsed. A bare value is an exact match (totalUsed=value); use totalUsed.<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.
totalUsedGrams
optional
string
Filter on
totalUsedGrams. A bare value is an exact match (totalUsedGrams=value); use totalUsedGrams.<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.
usedBySlot
optional
string
Flat slot id (amsIndex*4+slotIndex, negative for spools) -> mm extruded.
usedGramsBySlot
optional
string
Flat slot id -> grams extruded, when a grams conversion was available.
slotMaterials
optional
string
Flat slot id -> what was loaded there at capture time. Deliberately open:
it is a verbatim snapshot of `material_usage.slot_materials`, whose shape
has gained fields over time and must survive round-tripping unchanged.
materialMapping
optional
string
Filter on
materialMapping. A bare value is an exact match (materialMapping=value); use materialMapping.<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.
totalLayers
optional
string
Filter on
totalLayers. A bare value is an exact match (totalLayers=value); use totalLayers.<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.
completedLayers
optional
string
Filter on
completedLayers. A bare value is an exact match (completedLayers=value); use completedLayers.<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.
skippedObjects
optional
string
Filter on
skippedObjects. A bare value is an exact match (skippedObjects=value); use skippedObjects.<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.
estimatedPrintTimeSeconds
optional
string
Filter on
estimatedPrintTimeSeconds. A bare value is an exact match (estimatedPrintTimeSeconds=value); use estimatedPrintTimeSeconds.<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.
estimatedTotalWeightGrams
optional
string
Filter on
estimatedTotalWeightGrams. A bare value is an exact match (estimatedTotalWeightGrams=value); use estimatedTotalWeightGrams.<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.
estimatedMaterials
optional
string
Filter on
estimatedMaterials. A bare value is an exact match (estimatedMaterials=value); use estimatedMaterials.<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.
slicerVersion
optional
string
Filter on
slicerVersion. A bare value is an exact match (slicerVersion=value); use slicerVersion.<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.
overriddenProcessProfileId
optional
string
Filter on
overriddenProcessProfileId. A bare value is an exact match (overriddenProcessProfileId=value); use overriddenProcessProfileId.<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.
gcodeAnalysisSha256
optional
string
Filter on
gcodeAnalysisSha256. A bare value is an exact match (gcodeAnalysisSha256=value); use gcodeAnalysisSha256.<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.
slicedGcodeUri
optional
string
Filter on
slicedGcodeUri. A bare value is an exact match (slicedGcodeUri=value); use slicedGcodeUri.<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.
thumbnailUri
optional
string
Filter on
thumbnailUri. A bare value is an exact match (thumbnailUri=value); use thumbnailUri.<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.
coloredThumbnailUri
optional
string
Filter on
coloredThumbnailUri. A bare value is an exact match (coloredThumbnailUri=value); use coloredThumbnailUri.<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.
cameraThumbnailUri
optional
string
Filter on
cameraThumbnailUri. A bare value is an exact match (cameraThumbnailUri=value); use cameraThumbnailUri.<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.
timelapseUri
optional
string
Filter on
timelapseUri. A bare value is an exact match (timelapseUri=value); use timelapseUri.<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.
logsUri
optional
string
Filter on
logsUri. A bare value is an exact match (logsUri=value); use logsUri.<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.
gatewayTelemetryUri
optional
string
Filter on
gatewayTelemetryUri. A bare value is an exact match (gatewayTelemetryUri=value); use gatewayTelemetryUri.<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.
fuseTelemetryUri
optional
string
Filter on
fuseTelemetryUri. A bare value is an exact match (fuseTelemetryUri=value); use fuseTelemetryUri.<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.
priority
optional
string
Filter on
priority. A bare value is an exact match (priority=value); use priority.<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.
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.
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.
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.
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.
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
SearchResponse
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
{
"data": [
{}
],
"meta": {
"total": 1,
"count": 1,
"offset": 1,
"limit": 1,
"hasMore": true,
"executionTime": 1
}
}