/v1/print-jobs
Get all print jobs
List print jobs: queued, printing and finished. There is no endpoint that creates a single print job directly. Jobs come from builds: queue parts and SKUs with POST /v2/builds, or print orders with POST /v1/orders/print, and the resulting jobs show up here.
Send Authorization: ApiKey <your-api-key>.
Job lifecycle
status |
Meaning |
|---|---|
pending |
In the queue, waiting for a compatible printer. |
assigned |
Matched to a printer (assignedPrinterId). |
slicing, sliced, finalizing, waiting-for-approval, ready-for-printer, sending-to-printer |
Being sliced for that printer and delivered to it. |
printing, paused |
On the printer. |
completed, failed, cancelled |
Finished. errorMessage explains a failure. |
Query parameters
- Filters:
field=valuematches exactly, for examplestatus=printingorpartBuildId=<id>. Usefield.operator=valuefor other comparisons (ne,gt,gte,lt,lte,contains,startsWith,endsWith,in,notIn);intakes a comma-separated list. Which operators a field accepts depends on its type (text operators for text, comparisons for numbers and dates,infor IDs and statuses). Useful fields:status,partBuildId,partId,skuId,orderId,orderItemId,assignedPrinterId,hidden,priority,queueOrder,createdAt,printingCompletedAt. - Sorting:
sort=field:ascorsort=field:desc, comma-separated for several. Withoutsort, the order is not guaranteed.sort=priority:asc,queueOrder:ascgives queue order. - Paging:
limit(up to1000) andoffset. Addmeta=trueto get{ "data": [...], "meta": { ... } }with the total count. - Related data:
include=partBuildembeds each job's part build.
The results include archived jobs (hidden: true), which are completed or cleared jobs removed from the queue view. Add hidden=false to match what the queue shows.
Query Parameters
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.
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. 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.
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. 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.
buildThumbnailUri. A bare value is an exact match (buildThumbnailUri=value); use buildThumbnailUri.<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.
filesToPrint. A bare value is an exact match (filesToPrint=value); use filesToPrint.<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.
slicerInputHash. A bare value is an exact match (slicerInputHash=value); use slicerInputHash.<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.
isGcodeCached. A bare value is an exact match (isGcodeCached=value); use isGcodeCached.<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. 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.
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. 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.
createdByType. A bare value is an exact match (createdByType=value); use createdByType.<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.
createdByLabel. A bare value is an exact match (createdByLabel=value); use createdByLabel.<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. 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. 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.
parameterOverrides. A bare value is an exact match (parameterOverrides=value); use parameterOverrides.<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. 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.
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.
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.
linkedPartId. A bare value is an exact match (linkedPartId=value); use linkedPartId.<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.
skuInstance. A bare value is an exact match (skuInstance=value); use skuInstance.<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.
queueOrder. A bare value is an exact match (queueOrder=value); use queueOrder.<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. 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.
requiredPrinterTags. A bare value is an exact match (requiredPrinterTags=value); use requiredPrinterTags.<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. 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.
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.
profileUris. A bare value is an exact match (profileUris=value); use profileUris.<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.
assignedPrinterId. A bare value is an exact match (assignedPrinterId=value); use assignedPrinterId.<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. 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. 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. 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. 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. 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.
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.
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.
hidden. A bare value is an exact match (hidden=value); use hidden.<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. 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.
extensions. A bare value is an exact match (extensions=value); use extensions.<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.
skipObjectsData. A bare value is an exact match (skipObjectsData=value); use skipObjectsData.<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.
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.
materialAssignments. A bare value is an exact match (materialAssignments=value); use materialAssignments.<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.
customMetadata. A bare value is an exact match (customMetadata=value); use customMetadata.<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.in=a,b,c for several (up to 100). See Querying Data.
createdAt.gte=2025-01-01T00:00:00Z. See Querying Data.
updatedAt.gt=2025-01-01T00:00:00Z to fetch what changed since a checkpoint. See Querying Data.
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 to page through a list, and with meta=true to learn the total. See Querying Data.
id,name,updatedAt. Other fields are left out of each record. At most 50 fields. See Querying Data.
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.
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.
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.
Examples
The active queue in queue order
GET /v1/print-jobs?status.in=pending,assigned,slicing,printing&hidden=false&sort=priority:asc,queueOrder:asc
[
{
"id": "j1h5g9f3d7s2a6q0w4e8r3t7",
"storeId": "k3m9x2p7q8r4t6v1w5y0z3a2",
"partBuildId": "b7v3c9x1z5n2m8k4j0h6g3f1",
"partId": "p8f2k6m1q9w3e7r5t0y4u2i6",
"partName": "Benchy",
"label": "Benchy",
"status": "printing",
"quantityIndex": 1,
"quantityTotal": 3,
"priority": 100,
"queueOrder": 42000,
"assignedPrinterId": "x1p2s3m4a5r6t7q8w9e0r1t2",
"skuId": null,
"orderId": null,
"hidden": false,
"errorMessage": null,
"attemptNumber": 1,
"printingStartedAt": "2026-09-23T14:09:55.210Z",
"createdAt": "2026-09-23T14:05:13.004Z",
"updatedAt": "2026-09-23T14:09:55.210Z"
},
{
"id": "j2k6l0z4x8c1v5b9n3m7q2w6",
"storeId": "k3m9x2p7q8r4t6v1w5y0z3a2",
"partBuildId": "b7v3c9x1z5n2m8k4j0h6g3f1",
"partId": "p8f2k6m1q9w3e7r5t0y4u2i6",
"partName": "Benchy",
"label": "Benchy",
"status": "pending",
"quantityIndex": 2,
"quantityTotal": 3,
"priority": 100,
"queueOrder": 42000,
"assignedPrinterId": null,
"skuId": null,
"orderId": null,
"hidden": false,
"errorMessage": null,
"attemptNumber": 1,
"printingStartedAt": null,
"createdAt": "2026-09-23T14:05:13.004Z",
"updatedAt": "2026-09-23T14:05:13.004Z"
}
]
Jobs for one order, with paging metadata
GET /v1/print-jobs?orderId=o4r8d2e6r0x3c7v1b5n9m2q6&sort=createdAt:asc&limit=1&meta=true
{
"data": [
{
"id": "j7u1y5t9r3e6w0q4a8s2d5f9",
"storeId": "k3m9x2p7q8r4t6v1w5y0z3a2",
"partBuildId": "b5n9m3k7j1h4g8f2d6s0a5q9",
"partId": "p8f2k6m1q9w3e7r5t0y4u2i6",
"partName": "Benchy",
"label": "Benchy",
"status": "completed",
"skuId": "s5h1j7k3l9a2s6d0f4g8h2j5",
"skuName": "BENCHY",
"orderId": "o4r8d2e6r0x3c7v1b5n9m2q6",
"orderItemId": "i9t3e7m1q5w2r6t0y4u8i3o5",
"skuInstance": 1,
"quantityIndex": 1,
"quantityTotal": 2,
"hidden": false,
"printingCompletedAt": "2026-09-23T17:42:08.615Z",
"createdAt": "2026-09-23T15:40:02.338Z",
"updatedAt": "2026-09-23T17:42:08.615Z"
}
],
"meta": {
"total": 2,
"count": 1,
"offset": 0,
"limit": 1,
"hasMore": true,
"executionTime": 18
}
}
Response Schema
A URL to a recolored thumbnail that reflects any material customizations applied to the print job. Populated after material assignments are made, giving a more accurate preview of the expected output colors.
A URL to a thumbnail recolored to match the specific filament loaded in the assigned printer. Populated once the print job is assigned to a printer, and cleared if the job is unassigned.
A URL to the part's original thumbnail image, carried over from the part at the time the print job was created.
Example Response
[
{
"partBuildId": "string",
"quantityIndex": 1,
"quantityTotal": 1,
"thumbnailUri": "string",
"coloredThumbnailUri": "string",
"buildThumbnailUri": "string",
"cameraThumbnailUri": "string",
"timelapseUri": "string",
"fuseTelemetryUri": "string",
"attemptNumber": 1,
"sendFailureCount": 1,
"filesToPrint": [
"string"
],
"slicerInputHash": "string",
"isGcodeCached": true,
"slicedGcodeUri": "string",
"partId": "string",
"partName": "string",
"createdByActorId": "string",
"createdByType": "string",
"createdByLabel": "string",
"skuId": "string",
"skuName": "string",
"parameterOverrides": [
{
"name": "string",
"type": "number",
"value": 1
}
],
"orderId": "string",
"label": "string",
"orderItemId": "string",
"linkedPartId": "string",
"skuInstance": 1,
"queueOrder": 0,
"priority": 100,
"requiredPrinterTags": {
"printer.provider": "string",
"printer.id": "string",
"printer.nozzleDiameter": "string",
"printer.modelName": "string",
"filament.type": "string",
"user.tags": "string"
},
"overriddenProcessProfileId": "string",
"taskId": 1,
"profileUris": [
"string"
],
"assignedPrinterId": "string",
"assignmentStartedAt": "2025-01-15T12:00:00.000Z",
"assignmentCompletedAt": "2025-01-15T12:00:00.000Z",
"printingStartedAt": "2025-01-15T12:00:00.000Z",
"printingCompletedAt": "2025-01-15T12:00:00.000Z",
"cancelledAt": "2025-01-15T12:00:00.000Z",
"status": "pending",
"errorMessage": "string",
"hidden": true,
"logsUri": "string",
"extensions": {
"3mf": {
"plateId": 1,
"gcodeFile": "string"
},
"mergedPlate": {
"processOverrides": {},
"slicerVersionId": "string",
"childJobIds": [
"string"
],
"layout": [
{
"jobId": "string",
"x": 1,
"y": 1,
"rotationDeg": 0
}
],
"bedSize": {
"x": 1,
"y": 1,
"z": 1
},
"footprints": {},
"filamentColours": [
"string"
]
},
"serials": [
{
"sequenceId": "string",
"sequenceName": "string",
"parameterName": "string",
"value": 1,
"serial": "string",
"target": {
"plateId": 1,
"objectId": "string",
"instanceId": 1,
"identifyId": "string"
}
}
]
},
"skipObjectsData": {
"objects": [
{
"identifyId": "string",
"name": "string",
"skipped": true
}
],
"topImageUri": "string",
"pickImageUri": "string",
"runtimeSkips": [
{
"identifyId": "string",
"layer": 1,
"at": "string"
}
],
"excludedUsage": {
"objectIds": [
"string"
],
"bySlot": {},
"gramsBySlot": {},
"totalMm": 1,
"totalGrams": 1
}
},
"skipObjectIds": [
"string"
],
"materialMapping": [
{
"slot": 1,
"amsIndex": 1,
"slotIndex": 1,
"skip": true,
"variantId": "string",
"materialId": "string",
"materialType": "string",
"name": "string",
"color": "string",
"filamentUserProfileId": "string",
"filamentSystemProfileId": 1
}
],
"materialAssignments": {},
"gcodeAnalysisSha256": "string",
"groupId": "string",
"parentJobId": "string",
"boundingBox": {
"x": 1,
"y": 1,
"z": 1
},
"customMetadata": {},
"id": "string",
"storeId": "string",
"createdAt": "2025-01-15T12:00:00.000Z",
"updatedAt": "2025-01-15T12:00:00.000Z"
}
]