Printago API
GET
/v1/parts/{partId}/metadata
Get part metadata
Path Parameters
partId
required
string
Part ID
Response Schema
PartMetadata
createdAtrequired
string
format: date-time
dimensionsrequirednullable
object
Geometry dimensions for a part file. For 3MFs this is the (trimmed)
compute3MFDimensions result; STL and parametric outputs populate a single
object/world box. `source` records how the value was derived —
'parametric-build' entries are best-effort fallbacks (output varies with
build parameters).
objectsrequired
object[]
componentPathrequired
string
Path to the component .model file holding the mesh, e.g. "/3D/Objects/Cube_1.model"
localrequired
object
Bounding box in the object's own mesh coordinates (before any transform)
centerrequired
object
xrequired
number
yrequired
number
zrequired
number
maxrequired
object
xrequired
number
yrequired
number
zrequired
number
minrequired
object
xrequired
number
yrequired
number
zrequired
number
sizerequired
object
xrequired
number
yrequired
number
zrequired
number
nameoptional
string
Display name from model_settings.config, if any
objectIdrequired
string
objectid of the top-level build item in /3D/3dmodel.model
plateIdoptional
number
Plate this object is assigned to, if determinable from model_settings.config
plateLocaloptional
object
Bounding box relative to this object's plate origin (only set if plate origin is known)
centerrequired
object
xrequired
number
yrequired
number
zrequired
number
maxrequired
object
xrequired
number
yrequired
number
zrequired
number
minrequired
object
xrequired
number
yrequired
number
zrequired
number
sizerequired
object
xrequired
number
yrequired
number
zrequired
number
printableWorldoptional
object
World box of this object's *printable* geometry only — its `normal_part`
volumes, excluding modifiers, support enforcers/blockers and negative
volumes. Equal to `world` when the file declares no part subtypes at all,
and undefined for an object with no printable part (one made entirely of
modifiers). Callers deciding where geometry sits on the bed want this;
callers asking how much room a file occupies want `world`.
centerrequired
object
xrequired
number
yrequired
number
zrequired
number
maxrequired
object
xrequired
number
yrequired
number
zrequired
number
minrequired
object
xrequired
number
yrequired
number
zrequired
number
sizerequired
object
xrequired
number
yrequired
number
zrequired
number
worldrequired
object
Bounding box in world (build-plate-layout) coordinates after build-item + component transforms
centerrequired
object
xrequired
number
yrequired
number
zrequired
number
maxrequired
object
xrequired
number
yrequired
number
zrequired
number
minrequired
object
xrequired
number
yrequired
number
zrequired
number
sizerequired
object
xrequired
number
yrequired
number
zrequired
number
platesrequired
object[]
nameoptional
string
objectsrequired
object[]
componentPathrequired
string
Path to the component .model file holding the mesh, e.g. "/3D/Objects/Cube_1.model"
localrequired
object
Bounding box in the object's own mesh coordinates (before any transform)
nameoptional
string
Display name from model_settings.config, if any
objectIdrequired
string
objectid of the top-level build item in /3D/3dmodel.model
plateIdoptional
number
Plate this object is assigned to, if determinable from model_settings.config
plateLocaloptional
object
Bounding box relative to this object's plate origin (only set if plate origin is known)
printableWorldoptional
object
World box of this object's *printable* geometry only — its `normal_part`
volumes, excluding modifiers, support enforcers/blockers and negative
volumes. Equal to `world` when the file declares no part subtypes at all,
and undefined for an object with no printable part (one made entirely of
modifiers). Callers deciding where geometry sits on the bed want this;
callers asking how much room a file occupies want `world`.
originoptional
object
World-space origin of this plate's bed front-left corner, if known or inferred
xrequired
number
yrequired
number
zrequired
number
plateIdrequired
number
plateLocaloptional
object
Combined AABB with each plate's own origin as (0,0,0) — only set if origin is known
centerrequired
object
xrequired
number
yrequired
number
zrequired
number
maxrequired
object
xrequired
number
yrequired
number
zrequired
number
minrequired
object
xrequired
number
yrequired
number
zrequired
number
sizerequired
object
xrequired
number
yrequired
number
zrequired
number
printableWorldoptional
object
`world` restricted to printable geometry — see `ObjectDimensions.printableWorld`.
centerrequired
object
xrequired
number
yrequired
number
zrequired
number
maxrequired
object
xrequired
number
yrequired
number
zrequired
number
minrequired
object
xrequired
number
yrequired
number
zrequired
number
sizerequired
object
xrequired
number
yrequired
number
zrequired
number
worldrequired
object
Combined world-space AABB of all objects on this plate
centerrequired
object
xrequired
number
yrequired
number
zrequired
number
maxrequired
object
xrequired
number
yrequired
number
zrequired
number
minrequired
object
xrequired
number
yrequired
number
zrequired
number
sizerequired
object
xrequired
number
yrequired
number
zrequired
number
printableWorldoptional
object
`world` restricted to printable geometry — see `ObjectDimensions.printableWorld`.
centerrequired
object
xrequired
number
yrequired
number
zrequired
number
maxrequired
object
xrequired
number
yrequired
number
zrequired
number
minrequired
object
xrequired
number
yrequired
number
zrequired
number
sizerequired
object
xrequired
number
yrequired
number
zrequired
number
sourcerequired
"file" | "parametric-build"
fileparametric-build
versionoptional
number
See {@link PART_DIMENSIONS_VERSION }. Absent on pre-versioning entries.
worldrequired
object
Combined world-space AABB across every object in the file
centerrequired
object
xrequired
number
yrequired
number
zrequired
number
maxrequired
object
xrequired
number
yrequired
number
zrequired
number
minrequired
object
xrequired
number
yrequired
number
zrequired
number
sizerequired
object
xrequired
number
yrequired
number
zrequired
number
footprintsrequirednullable
object
Stored footprint hulls for a part (`part_metadata.footprints`): the convex
XY outline the plate-merge packer collides instead of the bounding box.
Every hull is CCW, capped at {@link HULL_MAX_VERTICES } vertices, expressed
RELATIVE TO ITS OWN AABB CENTER (so it drops onto a layout placement, whose
x/y is the footprint center, with a plain translation), stays inside that
AABB, and contains the true outline to within the ~15µm quantization bound
described at {@link finalizeFootprintHull } — conservative for collision at
every physically relevant scale.
platesoptional
Record<string, any[][]>
Construct a type with a set of properties K of type T
sourceHashrequirednullable
string
`fileHashes[0]` of the source file the hulls were computed from. A job
packs with these hulls only when its own source snapshot carries the
same hash — queued jobs keep printing the file they were created with,
so after a part-file replacement the (recomputed) hulls describe
geometry those jobs will never print.
worldrequirednullable
any[][]
Whole-file hull (STL, or a 3MF's combined build).
inputHashrequirednullable
string
metadata3mfrequirednullable
object
filamentColorsrequired
string[]
filamentDensitiesoptional
number[]
filamentDiametersoptional
number[]
filamentIdsoptional
string[]
filamentTyperequired
string[]
nozzleDiameterrequired
string
plateRenderSourceHashoptional
string
`fileHashes[0]` of the source that produced the plates'
`thumbnailRenderedUri`. Re-extraction carries the renders forward only
while this still matches the part's current source; a replaced file
leaves them behind rather than showing the previous model's geometry.
platesoptional
object[]
filamentIdsoptional
string[]
filamentMapModeoptional
string
filamentMapsoptional
number[]
gcodeFileoptional
string
idrequired
number
lockedoptional
boolean
nameoptional
string
patternBboxFileoptional
string
pickDataoptional
string
pickFileoptional
string
pickUploadedUrioptional
string
slicedoptional
object
extruderTypeoptional
string
filamentMapsoptional
string
filamentsoptional
object[]
colorrequired
string
idrequired
string
trayInfoIdxrequired
string
typerequired
string
usedGrequired
number
usedMrequired
number
indexoptional
number
labelObjectEnabledoptional
boolean
layerFilamentListsoptional
object[]
filamentListrequired
number
layerRangesrequired
string
nozzleDiametersoptional
string
nozzleVolumeTypeoptional
string
objectsoptional
object[]
identifyIdrequired
string
namerequired
string
skippedrequired
boolean
outsideoptional
boolean
predictionoptional
number
printerModelIdoptional
string
supportUsedoptional
boolean
timelapseTypeoptional
string
warningsoptional
object[]
errorCoderequired
string
levelrequired
number
msgrequired
string
weightoptional
number
thumbnailDataoptional
string
thumbnailFileoptional
string
thumbnailNoLightFileoptional
string
thumbnailRenderedUrioptional
string
The plate re-rendered by the three.js builder. Written by a different
flow, and to a different storage path, than the archive copy above — a
later metadata reprocess re-copies the archive image and must not be able
to overwrite this. Prefer it over `thumbnailUploadedUri`
(see `plateThumbnailUri`).
thumbnailUploadedUrioptional
string
The archive's own plate preview, copied out at metadata-extraction time.
topDataoptional
string
Base64 PNG data for the top/pick images, staged before upload then cleared.
topFileoptional
string
topUploadedUrioptional
string
Uploaded URIs for the plate's top-down image and color-coded object pick mask.
Used by the visual skip-objects picker.
printerModelrequired
string
profileCompatrequired
object
compatiblerequired
string[]
saferequired
string[]
slicedrequired
string
slicerVersionoptionalnullable
object
enginerequired
"orcaslicer" | "bambu-studio" | "prusaslicer" | "superslicer"
orcaslicerbambu-studioprusaslicersuperslicer
versionrequired
string
textSlotsoptional
object[]
PrintagoParam text slots with their per-plate occurrence identities,
re-detected whenever the file is (re)processed. The saved reuse mode
lives on the slot's parameter, which survives a file replacement; this
is the geometry-derived half that must always track the current file.
fontNameoptional
string
`font_name` of the first volume seen with this key.
fontVersionoptional
string
`font_version` of the first volume seen with this key.
keyrequired
string
The matching volume/object name — the substitution key.
labelrequired
string
The label this slot's parameter is shown under.
occurrencesoptional
object[]
Every printable object instance carrying this slot, across all plates.
Absent when the file predates occurrence detection or has no plate
metadata to resolve instances against.
identifyIdoptional
string
Bambu's per-instance id, when present (matches gcode object labels).
instanceIdrequired
number
0-based instance index among the object's build items.
objectIdrequired
string
`model_settings.config` object id (matches the root model's build items).
plateIdrequired
number
surfaceTypeoptional
number
`surface_type` of the first volume seen with this key (0=flat).
textrequired
string
The text authored into the volume. It prints as-is when the slot goes
unfilled, which makes it the parameter's default.
volumeCountrequired
number
How many text volumes in the file carry this slot name.
partIdrequired
string
preslicerequirednullable
object
A pre-slice run: the part sliced once per distinct printer configuration in
the farm. Stored on `part_metadata.preslice`; `slicing_estimate` keeps the
rolled-up average so existing consumers are unaffected.
completedAtoptional
string
groupsrequired
object[]
estimatedPrintTimeSecondsoptional
number
filamentsoptional
object[]
filamentProfileIdrequired
string
filamentProfileNamerequirednullable
string
indexrequired
number
materialNamerequired
string
qualityrequired
"type" | "exact" | "vendor-type"
typeexactvendor-type
substitutedrequired
boolean
The matcher fell back to something other than the material the part names.
keyrequired
string
Stable identity of the printer group: model + machine/process/filament profiles.
materialsoptional
object[]
coloroptional
string
indexrequired
number
materialTyperequired
string
usedGramsrequired
number
usedMetersrequired
number
nozzleDiameterrequirednullable
string
pendingPlateIdsoptional
number[]
Plate ids still waiting on a slicer callback. Empty once the group is done.
platesoptional
object[]
estimatedPrintTimeSecondsrequired
number
materialsrequired
object[]
coloroptional
string
indexrequired
number
materialTyperequired
string
usedGramsrequired
number
usedMetersrequired
number
plateIdrequired
number
totalWeightGramsrequired
number
printerCountrequired
number
How many printers in the farm this row stands for — the weight of the average.
printerModelNamerequired
string
reasonoptional
string
reasonCodeoptional
"material-mismatch" | "profile-missing" | "no-compatible-material" | "slicer-error" | "profile-error"
material-mismatchprofile-missingno-compatible-materialslicer-errorprofile-error
slicerVersionoptional
string
statusrequired
"running" | "pending" | "failed" | "no-compatible-material" | "complete"
runningpendingfailedno-compatible-materialcomplete
totalWeightGramsoptional
number
vendorNamerequirednullable
string
inputHashrequired
string
File hashes + resolved profile ids + material selection. Re-runs skip when it matches.
parametricSourceoptional
object
The default-parameter render a parametric part is pre-sliced from.
hashrequired
string
File hashes + parameter values the render describes.
urisrequired
string[]
runIdrequired
string
sourcerequired
"file" | "parametric-defaults"
'parametric-defaults' when the geometry came from a build at default parameters.
fileparametric-defaults
sourceUrisoptional
string[]
The files that were actually sliced, when they are not the part's own —
the mesh a parametric part was rendered to at its default parameters.
startedAtrequired
string
statusrequired
"running" | "pending" | "failed" | "complete"
runningpendingfailedcomplete
slicingEstimaterequirednullable
object
estimatedPrintTimeSecondsrequired
number
materialsrequired
object[]
coloroptional
string
indexrequired
number
materialTyperequired
string
usedGramsrequired
number
usedMetersrequired
number
platesoptional
object[]
estimatedPrintTimeSecondsrequired
number
materialsrequired
object[]
coloroptional
string
indexrequired
number
materialTyperequired
string
usedGramsrequired
number
usedMetersrequired
number
plateIdrequired
number
totalWeightGramsrequired
number
profilesoptional
object
filamentProfileIdsrequired
string[]
filamentProfileNamesrequired
string[]
machineProfileIdrequired
string
machineProfileNamerequired
string
processProfileIdrequired
string
processProfileNamerequired
string
slicedAtrequired
string
slicerVersionrequired
string
totalWeightGramsrequired
number
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
updatedAtrequired
string
format: date-time
Example Response
200 OK — application/json
{
"partId": "string",
"metadata3mf": {
"printerModel": "string",
"filamentType": [
"string"
],
"filamentColors": [
"string"
],
"filamentDensities": [
1
],
"filamentDiameters": [
1
],
"nozzleDiameter": "string",
"profileCompat": {
"sliced": "string",
"compatible": [
"string"
],
"safe": [
"string"
]
},
"slicerVersion": {
"engine": "orcaslicer",
"version": "string"
},
"plates": [
{
"id": 1,
"name": "string",
"locked": true,
"filamentMapMode": "string",
"filamentMaps": [
1
],
"gcodeFile": "string",
"thumbnailFile": "string",
"thumbnailUploadedUri": "string",
"thumbnailRenderedUri": "string",
"thumbnailNoLightFile": "string",
"thumbnailData": "string",
"topFile": "string",
"pickFile": "string",
"topData": "string",
"pickData": "string",
"topUploadedUri": "string",
"pickUploadedUri": "string",
"patternBboxFile": "string",
"sliced": {
"index": 1,
"extruderType": "string",
"nozzleVolumeType": "string",
"printerModelId": "string",
"nozzleDiameters": "string",
"timelapseType": "string",
"prediction": 1,
"weight": 1,
"outside": true,
"supportUsed": true,
"labelObjectEnabled": true,
"filamentMaps": "string",
"objects": [
{
"identifyId": "string",
"name": "string",
"skipped": true
}
],
"filaments": [
{
"id": "string",
"trayInfoIdx": "string",
"type": "string",
"color": "string",
"usedM": 1,
"usedG": 1
}
],
"warnings": [
{
"msg": "string",
"level": 1,
"errorCode": "string"
}
],
"layerFilamentLists": [
{
"filamentList": 1,
"layerRanges": "string"
}
]
},
"filamentIds": [
"string"
]
}
],
"filamentIds": [
"string"
],
"textSlots": [
{
"key": "string",
"label": "string",
"text": "string",
"volumeCount": 1,
"fontName": "string",
"fontVersion": "string",
"surfaceType": 1,
"occurrences": [
{
"plateId": 1,
"objectId": "string",
"instanceId": 1,
"identifyId": "string"
}
]
}
],
"plateRenderSourceHash": "string"
},
"slicingEstimate": {
"estimatedPrintTimeSeconds": 1,
"materials": [
{
"index": 1,
"usedGrams": 1,
"usedMeters": 1,
"materialType": "string",
"color": "string"
}
],
"totalWeightGrams": 1,
"profiles": {
"machineProfileId": "string",
"machineProfileName": "string",
"processProfileId": "string",
"processProfileName": "string",
"filamentProfileIds": [
"string"
],
"filamentProfileNames": [
"string"
]
},
"slicedAt": "string",
"slicerVersion": "string",
"plates": [
{
"plateId": 1,
"estimatedPrintTimeSeconds": 1,
"materials": [
{
"index": 1,
"usedGrams": 1,
"usedMeters": 1,
"materialType": "string",
"color": "string"
}
],
"totalWeightGrams": 1
}
]
},
"inputHash": "string",
"dimensions": {
"source": "file",
"version": 1,
"plates": [
{
"plateId": 1,
"name": "string",
"origin": {
"x": 1,
"y": 1,
"z": 1
},
"objects": [
{
"objectId": "string",
"name": "string",
"componentPath": "string",
"local": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
},
"world": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
},
"printableWorld": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
},
"plateId": 1,
"plateLocal": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
}
}
],
"world": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
},
"printableWorld": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
},
"plateLocal": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
}
}
],
"objects": [
{
"objectId": "string",
"name": "string",
"componentPath": "string",
"local": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
},
"world": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
},
"printableWorld": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
},
"plateId": 1,
"plateLocal": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
}
}
],
"world": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
},
"printableWorld": {
"min": {
"x": 1,
"y": 1,
"z": 1
},
"max": {
"x": 1,
"y": 1,
"z": 1
},
"size": {
"x": 1,
"y": 1,
"z": 1
},
"center": {
"x": 1,
"y": 1,
"z": 1
}
}
},
"footprints": {
"sourceHash": "string",
"world": [
[]
],
"plates": {}
},
"preslice": {
"runId": "string",
"inputHash": "string",
"status": "running",
"source": "file",
"startedAt": "string",
"completedAt": "string",
"groups": [
{
"key": "string",
"printerModelName": "string",
"vendorName": "string",
"nozzleDiameter": "string",
"printerCount": 1,
"status": "running",
"reasonCode": "material-mismatch",
"reason": "string",
"filaments": [
{
"index": 1,
"materialName": "string",
"filamentProfileId": "string",
"filamentProfileName": "string",
"quality": "type",
"substituted": true
}
],
"estimatedPrintTimeSeconds": 1,
"totalWeightGrams": 1,
"materials": [
{
"index": 1,
"usedGrams": 1,
"usedMeters": 1,
"materialType": "string",
"color": "string"
}
],
"plates": [
{
"plateId": 1,
"estimatedPrintTimeSeconds": 1,
"materials": [
{
"index": 1,
"usedGrams": 1,
"usedMeters": 1,
"materialType": "string",
"color": "string"
}
],
"totalWeightGrams": 1
}
],
"pendingPlateIds": [
1
],
"slicerVersion": "string"
}
],
"sourceUris": [
"string"
],
"parametricSource": {
"hash": "string",
"uris": [
"string"
]
}
},
"storeId": "string",
"updatedAt": "2025-01-15T12:00:00.000Z",
"createdAt": "2025-01-15T12:00:00.000Z"
}