Printago API
GET
/v1/part-builds/{id}
Get a specific part build by ID
Path Parameters
id
required
string
- Part build identifier
Response Schema
PartBuildWithRelation
assignmentCompletedAtrequired
string
assignmentStartedAtrequired
string
createdAtrequired
string
format: date-time
dismissedrequired
boolean
extensionsoptional
object
idrequired
string
pattern: ^[a-z0-9]{24}$
labelrequired
string
linkedPartIdrequired
string
materialAssignmentsrequired
Record<string, object[]>
numPartsPerSkuoptional
number
orderIdrequired
string
orderItemIdrequired
string
outputFilesrequired
string[]
parameterOverridesrequired
object[]
namerequired
string
typerequired
any
valueoptional
number | string | boolean
partCopyrequired
object
arrangeableoptional
boolean
createdAtrequired
string
descriptionrequired
string
fileHashesrequired
string[]
fileUrisrequired
string[]
folderIdoptional
string
gcodePlateUrisoptional
Record<string, string>
idrequired
string
pattern: ^[a-z0-9]{24}$
materialsrequired
object[]
meshErroroptional
string
Why tessellating this source failed. Set with `meshUri` cleared, so a
file that cannot be meshed is stated once instead of re-converting on
every print forever. Replacing the source moves `fileHashes[0]` off this
hash, which retires the error without anything having to clear it.
meshSourceHashoptional
string
`fileHashes[0]` of the source the mesh state describes — the file
`meshUri` was tessellated from, or the one `meshError` failed on.
meshUrioptional
string
Tessellated mesh derived from a boundary-representation source (STEP).
The slicer CLI only reads meshes, so this — not `fileUris[0]` — is what
the print and estimation paths feed it.
metadataoptional
object
namerequired
string
overriddenProcessProfileIdrequired
string
parametersrequired
object[]
acceptedContentTypesoptional
string[]
File-parameter-only fields (populated when
`type === PartParameterVariableType.File`). Kept optional on the
shared interface so scalar-parameter call sites do not need
union-narrowing. See `FilePartParameter` for the strict shape.
`acceptedContentTypes` is intentionally an OPEN `string[]` (not a
narrow union). The customizer emits SVG, but Etsy attachments and
direct API order ingestion can carry ANY mime type (PNG / JPG / PDF /
AI / etc). Builders enforce kind constraints; the shared type stays
open.
defaultoptional
number | string | boolean
defaultUrioptional
string
Optional fallback file URI (e.g. a known SVG in storage).
descriptionoptional
string
maxoptional
number
minoptional
number
multipleoptional
boolean
Whether the slot accepts >1 file. Reserved for forward compat — the
Phase 5 resolver assumes single-file per slot for v1.
namerequired
string
optionsoptional
object[]
labeloptional
string
valuerequired
string | number
stepoptional
number
typerequired
any
valueoptional
number | string | boolean
printTagsrequired
object
filament.typeoptional
string
printer.idoptional
string
printer.modelNameoptional
string
printer.nozzleDiameteroptional
string
printer.provideroptional
string
user.tagsoptional
string
slicerOverrideoptional
string
slicingEstimateoptional
object
sourceoptional
any
Which integration created this part. Set only by the cloud-storage
providers today; null on every other creation path (upload, API, OpenSCAD,
…) rather than carrying a synthetic "manual" value, so existing parts need
no backfill. Not user-editable — it records what happened, not a preference.
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
thumbnailUrirequired
string
typerequired
any
updatedAtrequired
string
uploadedAtoptional
string
use3MFProcessProfileoptional
boolean
userTagsoptional
string[]
partIdrequired
string
positionrequired
any
printingCompletedAtrequired
string
printingStartedAtrequired
string
printJobsrequired
object[]
assignedPrinterIdrequired
string
assignmentCompletedAtrequired
string
assignmentStartedAtrequired
string
attemptNumberrequired
number
1-based counter of print attempts (bumped on requeue once the attempt
printed or reached a terminal state). Keys per-attempt media/telemetry
objects and aligns with `print_history.attemptNumber`.
boundingBoxrequired
object
{x,y,z} mm bounding box of what this job prints. Null until computed.
buildThumbnailUrirequired
string
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.
cameraThumbnailUrirequired
string
Camera-captured snapshot from the moment Fuse detected the last
layer of the print. Persisted to the files bucket. Null unless Fuse
successfully captured and uploaded.
cancelledAtrequired
string
coloredThumbnailUrirequired
string
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.
createdAtrequired
string
format: date-time
errorMessagerequired
string
extensionsoptional
object
filesToPrintrequired
string[]
fuseTelemetryUrirequired
string
Fuse flight-recorder artifact for the current attempt (gzipped JSONL
under the permanent `telemetry/` prefix). Confirmed asynchronously by
Fuse after the print ends, like `timelapseUri`.
gcodeAnalysisSha256required
string
SHA256 hash of analyzed gcode content — stable key for extrusion lookup
groupIdrequired
string
Group identifier for visually-collapsed print-queue rows. Assigned at
emission (one per plate cluster within a build). Split mints fresh
groupIds for non-first buckets. May be null for legacy rows that predate
the grouping feature.
hiddenrequired
boolean
idrequired
string
pattern: ^[a-z0-9]{24}$
isGcodeCachedrequired
boolean
labelrequired
string
linkedPartIdrequired
string
logsUrirequired
string
materialAssignmentsrequired
Record<string, object[]>
materialMappingrequired
object[]
orderIdrequired
string
orderItemIdrequired
string
overriddenProcessProfileIdrequired
string
parameterOverridesrequired
object[]
namerequired
string
typerequired
any
valueoptional
number | string | boolean
parentJobIdrequired
string
Set on jobs merged onto a shared plate; points at the merged (parent)
job. Children mirror the parent's status and are excluded from
independent matching.
partBuildIdrequired
string
pattern: ^[a-z0-9]{24}$
partIdrequired
string
partNamerequired
string
printingCompletedAtrequired
string
printingStartedAtrequired
string
priorityrequired
any
profileUrisrequired
string[]
quantityIndexrequired
number
quantityTotalrequired
number
queueOrderrequired
number
min: 0
requiredPrinterTagsrequired
object
filament.typeoptional
string
printer.idoptional
string
printer.modelNameoptional
string
printer.nozzleDiameteroptional
string
printer.provideroptional
string
user.tagsoptional
string
sendFailureCountrequired
number
Consecutive send-give-up cycles (EnsureJobStarted exhausted its retries
without the printer starting). Reset on retry from a terminal state.
skipObjectIdsoptional
string[]
User-selected objects to skip on this job's plate, as identifyId strings
(resolved at queue time from the part's plate object list). When the print
starts, a Bambu `skip_objects` command is auto-sent for these. Null/empty
means print everything. Stored as strings; converted to integer obj_list at
send time.
skipObjectsDataoptional
object
skuIdrequired
string
skuInstancerequired
number
skuNamerequired
string
slicedGcodeUrirequired
string
slicerInputHashrequired
string
statusrequired
any
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
taskIdrequired
number
thumbnailUrirequired
string
A URL to the part's original thumbnail image, carried over from the part at the time the print job was created.
timelapseUrirequired
string
MP4 timelapse Fuse encoded from frames captured during the print and
uploaded to the snapshots bucket under the `timelapses/` prefix.
Null unless the store has timelapses enabled and Fuse uploaded
successfully.
updatedAtrequired
string
format: date-time
printStatusrequired
any
priorityrequired
any
quantityrequired
number
min: 0max: 500
requiredPrinterTagsrequired
object
filament.typeoptional
string
printer.idoptional
string
printer.modelNameoptional
string
printer.nozzleDiameteroptional
string
printer.provideroptional
string
user.tagsoptional
string
skuBuildIdrequired
string
skuIdrequired
string
skuInstanceStartoptional
number
skuNamerequired
string
statusrequired
any
stepsrequired
object[]
builderrequired
any
cachedBuildStepIdrequired
string
cachedOutputFilerequired
string
completedAtrequired
string
createdAtrequired
string
format: date-time
dismissedrequired
boolean
idrequired
string
pattern: ^[a-z0-9]{24}$
inputFilesrequired
string[]
min items: 1
inputHashrequired
string
inputParametersoptional
object
logsrequired
string[]
nextStepIdrequired
string
orderrequired
number
min: 0
outputFilesrequired
string[]
min items: 1
partBuildIdrequired
string
pattern: ^[a-z0-9]{24}$
requiresAssignedPrinterrequired
boolean
startedAtrequired
string
statusrequired
any
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
updatedAtrequired
string
format: date-time
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
thumbnailUrirequired
string
updatedAtrequired
string
format: date-time
Example Response
200 OK — application/json
{
"partCopy": {
"name": "string",
"description": "string",
"fileUris": [
"string"
],
"fileHashes": [
"string"
],
"parameters": [
{
"options": [
{
"label": "string"
}
],
"description": "string",
"min": 1,
"max": 1,
"step": 1,
"acceptedContentTypes": [
"string"
],
"multiple": true,
"defaultUri": "string",
"name": "string"
}
],
"printTags": {
"printer.provider": "string",
"printer.id": "string",
"printer.nozzleDiameter": "string",
"printer.modelName": "string",
"filament.type": "string",
"user.tags": "string"
},
"use3MFProcessProfile": true,
"arrangeable": true,
"userTags": [
"string"
],
"id": "string",
"storeId": "string",
"createdAt": "string",
"updatedAt": "string"
},
"requiredPrinterTags": {
"printer.provider": "string",
"printer.id": "string",
"printer.nozzleDiameter": "string",
"printer.modelName": "string",
"filament.type": "string",
"user.tags": "string"
},
"quantity": 0,
"parameterOverrides": [
{
"name": "string"
}
],
"dismissed": true,
"id": "string",
"storeId": "string",
"createdAt": "2026-08-24T03:58:55.797Z",
"updatedAt": "2026-08-24T03:58:55.797Z",
"steps": [
{
"partBuildId": "string",
"order": 0,
"inputFiles": [
"string"
],
"outputFiles": [
"string"
],
"logs": [
"string"
],
"requiresAssignedPrinter": true,
"dismissed": true,
"id": "string",
"storeId": "string",
"createdAt": "2026-08-24T03:58:55.797Z",
"updatedAt": "2026-08-24T03:58:55.797Z"
}
],
"printJobs": [
{
"partBuildId": "string",
"quantityIndex": 1,
"quantityTotal": 1,
"attemptNumber": 1,
"sendFailureCount": 1,
"filesToPrint": [
"string"
],
"isGcodeCached": true,
"partName": "string",
"parameterOverrides": [
{
"name": "string"
}
],
"label": "string",
"queueOrder": 0,
"requiredPrinterTags": {
"printer.provider": "string",
"printer.id": "string",
"printer.nozzleDiameter": "string",
"printer.modelName": "string",
"filament.type": "string",
"user.tags": "string"
},
"taskId": 1,
"hidden": true,
"id": "string",
"storeId": "string",
"createdAt": "2026-08-24T03:58:55.797Z",
"updatedAt": "2026-08-24T03:58:55.797Z"
}
]
}