Printago API
GET /v1/printers/{id}/history/last

Last printed history

Get the most recent print(s) on a printer, with related entities (part, SKU, job, order, order item) optionally inlined. "Most recent" means the latest job that actually started printing and reached a terminal state (completed, failed, or cancelled after the print began). Jobs cancelled while still in the queue are excluded. Each entry contains only the refs you request; a requested ref with no value on the job (for example, a walk-in print with no order) is returned as null rather than being omitted. Unknown values in refs return a 400.

Requires: printer.viewqueue.view

Path Parameters

id required
string
The printer's unique identifier

Query Parameters

refs optional
string
Comma-separated subset of: part, sku, job, order, orderItem. Defaults to job when omitted.
limit optional
integer
Number of recent terminal jobs to return, 1 to 25. Defaults to 1.

Response Schema

PrinterHistoryLastResponse
lastrequired
object[]
joboptionalnullable
object
assignedPrinterIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
assignmentCompletedAtrequirednullable
string
format: date-time
assignmentStartedAtrequirednullable
string
format: date-time
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`.
boundingBoxrequirednullable
object
{x,y,z} mm bounding box of what this job prints. Null until computed.
xrequired
number
yrequired
number
zrequired
number
buildThumbnailUrirequirednullable
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.

cameraThumbnailUrirequirednullable
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.
cancelledAtrequirednullable
string
format: date-time
coloredThumbnailUrirequirednullable
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
createdByActorIdrequirednullable
string
Who queued this job — see the column comments on `print_jobs`.
createdByLabelrequirednullable
string
createdByTyperequirednullable
string
customMetadataoptionalnullable
Record<string, any>
Construct a type with a set of properties K of type T
errorMessagerequirednullable
string
extensionsoptionalnullable
object
3mfoptional
object
mergedPlateoptional
object
Present on merged-plate parent jobs (see MergedPlateExtension).
serialsoptional
object[]
Serials embedded in what this job prints, stamped at job creation. A merged-plate parent aggregates its children's serials so the queue row that is actually shown carries the full list.
filesToPrintrequired
string[]
fuseTelemetryUrirequirednullable
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`.
gcodeAnalysisSha256requirednullable
string
SHA256 hash of analyzed gcode content — stable key for extrusion lookup
groupIdrequirednullable
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.
pattern: ^[a-z0-9]{24}$
hiddenrequired
boolean
idrequired
string
pattern: ^[a-z0-9]{24}$
isGcodeCachedrequired
boolean
labelrequired
string
linkedPartIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
logsUrirequirednullable
string
materialAssignmentsrequirednullable
Record<string, object[]>
Construct a type with a set of properties K of type T
materialMappingrequirednullable
object[]
amsIndexoptional
number
Visual AMS array index: -1 for spool, 0+ for AMS units
coloroptional
string
filamentSystemProfileIdoptionalnullable
number
filamentUserProfileIdoptionalnullable
string
pattern: ^[a-z0-9]{24}$
materialIdoptional
string
materialTypeoptional
string
nameoptional
string
skipoptional
boolean
slotoptional
number
slotIndexoptional
number
Slot within the AMS, or spool index for multiple spools
variantIdoptional
string
orderIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
orderItemIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
overriddenProcessProfileIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
parameterOverridesrequired
object[]
namerequired
string
typerequired
"number" | "string" | "boolean" | "file"
numberstringbooleanfile
valueoptional
number | string | boolean
parentJobIdrequirednullable
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.
pattern: ^[a-z0-9]{24}$
partBuildIdrequired
string
pattern: ^[a-z0-9]{24}$
partIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
partNamerequired
string
printingCompletedAtrequirednullable
string
format: date-time
printingStartedAtrequirednullable
string
format: date-time
priorityrequired
100 | 1000
1001000
profileUrisrequirednullable
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.
skipObjectIdsoptionalnullable
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.
skipObjectsDataoptionalnullable
object
excludedUsageoptional
object
Per-slot material excluded from an attempt because its object was skipped.
objectsrequired
object[]
pickImageUrioptional
string
runtimeSkipsoptional
object[]
Objects skipped at runtime (mid-print or at print start), as observed
topImageUrioptional
string
skuIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
skuInstancerequirednullable
number
skuNamerequirednullable
string
slicedGcodeUrirequirednullable
string
slicerInputHashrequirednullable
string
statusrequired
enum
pendingassignedslicingslicedfinalizingwaiting-for-approvalready-for-printersending-to-printerprintingpausedcompletedfailedcancelled
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
taskIdrequired
number
thumbnailUrirequirednullable
string

A URL to the part's original thumbnail image, carried over from the part at the time the print job was created.

timelapseUrirequirednullable
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
orderoptionalnullable
object
Order entity representing a retail order
cancelledAtoptionalnullable
string
createdAtrequired
string
format: date-time
currencyoptionalnullable
string
customerIdoptionalnullable
string
pattern: ^[a-z0-9]{24}$
customMetadataoptional
Record<string, any>
Construct a type with a set of properties K of type T
deadlineoptionalnullable
string
externalIdoptionalnullable
string
externalUrloptionalnullable
string
idrequired
string
pattern: ^[a-z0-9]{24}$
integrationIdoptionalnullable
string
pattern: ^[a-z0-9]{24}$
noteoptionalnullable
string
orderNumberrequired
string
priceoptionalnullable
number
priceBucketoptionalnullable
number
processedAtoptionalnullable
string
shippedAtoptionalnullable
string
sourceoptionalnullable
enum
etsyshopifymanualebaytiktok-shopwoocommerceshipstationwix
sourceRefoptionalnullable
string
statusrequired
"open" | "closed"
openclosed
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
syncDisabledrequired
boolean
updatedAtrequired
string
format: date-time
orderItemoptionalnullable
object
OrderItem entity representing an item in a retail order
createdAtrequired
string
format: date-time
customMetadataoptional
Record<string, any>
Construct a type with a set of properties K of type T
externalIdoptionalnullable
string
externalOrderIdoptionalnullable
string
externalProductIdoptionalnullable
string
externalSkuoptionalnullable
string
idrequired
string
pattern: ^[a-z0-9]{24}$
ignoredoptionalnullable
boolean
inputsoptionalnullable
Record<string, any>
Construct a type with a set of properties K of type T
orderIdrequired
string
pattern: ^[a-z0-9]{24}$
originalSkuoptionalnullable
string
Original SKU identifier sent when creating the order item (sku or externalSku), null if skuId was provided directly
processedAtoptionalnullable
string
format: date-time
processedStatusoptionalnullable
"unprocessed" | "processed"
unprocessedprocessed
quantityrequired
number
min: 1
resolutionNoteoptionalnullable
object
Structured note describing why SKU or variant resolution failed. Stored as a dedicated column on order_items for easy querying.
messagerequired
string
occurredAtrequired
number
Timestamp of when this failure occurred
retriablerequired
boolean
Whether this failure can be retried (e.g., API errors are retriable, missing SKUs are not)
typerequired
"variant_enrichment_failed" | "sku_not_found" | "ambiguous_match"
variant_enrichment_failedsku_not_foundambiguous_match
skuConfigoptionalnullable
object
SKU configuration stored with order items Contains only the configuration overrides, not the SKU reference
freeTextOptionIdsoptional
string[]
Options whose selected value is a buyer's free-text answer rather than one of the option's defined values. A personalization question can reuse a variant option (same name), and its arbitrary answers must not be flagged as invalid values during reconciliation.
linkedPartConfigsoptional
Record<string, object>
Construct a type with a set of properties K of type T
personalizationAnswerKeysoptional
string[]
selectedOptions keys the integration wrote from buyer personalization answers (as opposed to regular variation selections). Only these may be treated as free text when they land on a variant option; an unmatched regular variation value must still fail validation.
selectedOptionsoptional
Record<string, string>
Construct a type with a set of properties K of type T
skuIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
sourceoptionalnullable
enum
etsyshopifymanualebaytiktok-shopwoocommerceshipstationwix
statusoptionalnullable
string
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
updatedAtrequired
string
format: date-time
partoptionalnullable
object
arrangeableoptional
boolean
createdAtrequired
string
format: date-time
customMetadataoptional
Record<string, any>
Construct a type with a set of properties K of type T
descriptionrequired
string
fileHashesrequired
string[]
min items: 1
fileUrisrequired
string[]
min items: 1
folderIdoptionalnullable
string
pattern: ^[a-z0-9]{24}$
gcodePlateUrisoptionalnullable
Record<string, string>
Construct a type with a set of properties K of type T
idrequired
string
pattern: ^[a-z0-9]{24}$
materialsrequirednullable
object[]
colorrequirednullable
string
pattern: ^#{0,1}[0-9A-F]{6}|[0-9A-F]{8}$
identifieroptionalnullable
string
indexrequired
number
min: 0
nameoptionalnullable
string
skipoptional
boolean
typerequirednullable
string
meshErroroptionalnullable
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.
meshSourceHashoptionalnullable
string
`fileHashes[0]` of the source the mesh state describes — the file `meshUri` was tessellated from, or the one `meshError` failed on.
meshUrioptionalnullable
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.
metadataoptionalnullable
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[]
printerModelrequired
string
profileCompatrequired
object
slicerVersionoptionalnullable
object
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.
namerequired
string
overriddenProcessProfileIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
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
labeloptional
string
What the parameter is shown under wherever a customer or an operator fills it in; `name` stays the key everything binds by (SKU options, order inputs, build overrides, and — for a 3MF text slot — the text volume the substitution travels to). A parameter without one is shown under its name. This interface is the one the API's request validators are generated from, and it is a second declaration of the shape in `../part/parameter`. A field added to only one of them is accepted by the code and then pruned off the wire.
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[]
serialReuseoptional
"share" | "increment"
For a 3MF text-slot parameter bound to a sequence: whether occurrences repeated on one plate share a serial or each consume the next one. Absent means {@link TextSlotSerialReuse.Share }, today's duplicate-name meaning.
shareincrement
sizingoptional
"stretch" | "fit" | "unconstrained"
3MF text placeholders only: how a substituted value is sized against the bounds of the text volume it replaces. Absent means "fit within bounds", which is what every part declared before the setting existed carries. Declared on this shape as well as on `../part/parameter` for the reason `label` is — the API's request validators are generated from this one, and a field on only the other is pruned off the wire.
stretchfitunconstrained
stepoptional
number
typerequired
"number" | "string" | "boolean" | "file"
numberstringbooleanfile
valueoptional
number | string | boolean
printTagsrequired
object
filament.typeoptional
string
printer.idoptional
string
printer.modelNameoptional
string
printer.nozzleDiameteroptional
string
printer.provideroptional
string
user.tagsoptional
string
processingoptionalnullable
object
Per-stage ingest progress and, on failure, which stage stopped and why.
attemptrequired
number
How many ingests this part has had before this one — a monotonic per-part counter, not a per-file retry count, so no two runs can ever share a workflow key. See {@link nextPartIngestAttempt }.
erroroptional
string
failedStageoptional
"fetch" | "read-metadata" | "thumbnails" | "split-plates" | "estimate"
fetchread-metadatathumbnailssplit-platesestimate
fileHashrequired
string
`fileHashes[0]` this ingest describes; replacing the file retires it.
finishedAtoptional
string
stagesrequired
object[]
startedAtrequired
string
workflowKeyrequired
string
The workflow run that owns this state. A retry or a file replacement writes a new key first, so a superseded run's writes no longer match and are dropped instead of clobbering the newer run's progress.
processingStatusoptionalnullable
"processing" | "failed"
Where the file's ingest (metadata extraction, thumbnails, plate split, estimation) stands. `null` means ready — parts that predate the ingest workflow are healthy without backfill. System-set, not user-editable.
processingfailed
slicerOverrideoptionalnullable
string
slicingEstimateoptionalnullable
object
estimatedPrintTimeSecondsrequired
number
materialsrequired
object[]
platesoptional
object[]
profilesoptional
object
slicedAtrequired
string
slicerVersionrequired
string
totalWeightGramsrequired
number
sourceoptionalnullable
"google-drive" | "onedrive"
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.
google-driveonedrive
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
thumbnailUrirequirednullable
string
typerequired
enum
scadcadquerybuild123dstlstep3mfgcode3mfgcode
updatedAtrequired
string
format: date-time
uploadedAtoptionalnullable
string
format: date-time
use3MFProcessProfileoptional
boolean
Slice this part with the process profile embedded in its 3MF rather than the matched printer's. Omit it when creating a 3MF part and it is turned on for you, unless you also send an `overriddenProcessProfileId`; send `false` to slice with the printer's profile instead. Ignored for every other part type.
userTagsoptional
string[]
max items: 10
skuoptionalnullable
object
createdAtrequired
string
format: date-time
customMetadataoptional
Record<string, any>
Construct a type with a set of properties K of type T
descriptionrequired
string
externalIdrequirednullable
string
externalProviderrequirednullable
"etsy" | "shopify"
etsyshopify
folderIdoptionalnullable
string
pattern: ^[a-z0-9]{24}$
idrequired
string
pattern: ^[a-z0-9]{24}$
skurequired
string
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
titlerequired
string
totalCogsrequired
number
updatedAtrequired
string
format: date-time
printerIdrequired
string
pattern: ^[a-z0-9]{24}$

Example Response

200 OK — application/json
{
  "printerId": "string",
  "last": [
    {
      "job": {
        "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
              }
            ],
            "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"
      },
      "part": {
        "name": "string",
        "type": "scad",
        "description": "string",
        "fileUris": [
          "string"
        ],
        "fileHashes": [
          "string"
        ],
        "thumbnailUri": "string",
        "parameters": [
          {
            "default": 1,
            "options": [
              {
                "value": "string",
                "label": "string"
              }
            ],
            "description": "string",
            "min": 1,
            "max": 1,
            "step": 1,
            "acceptedContentTypes": [
              "string"
            ],
            "multiple": true,
            "defaultUri": "string",
            "label": "string",
            "serialReuse": "share",
            "sizing": "stretch",
            "name": "string",
            "type": "number",
            "value": 1
          }
        ],
        "printTags": {
          "printer.provider": "string",
          "printer.id": "string",
          "printer.nozzleDiameter": "string",
          "printer.modelName": "string",
          "filament.type": "string",
          "user.tags": "string"
        },
        "overriddenProcessProfileId": "string",
        "folderId": "string",
        "materials": [
          {
            "index": 0,
            "color": "string",
            "type": "string",
            "skip": true,
            "name": "string",
            "identifier": "string"
          }
        ],
        "slicerOverride": "string",
        "metadata": {
          "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": [],
                "filaments": [],
                "warnings": [],
                "layerFilamentLists": []
              },
              "filamentIds": [
                "string"
              ]
            }
          ],
          "filamentIds": [
            "string"
          ],
          "textSlots": [
            {
              "key": "string",
              "label": "string",
              "text": "string",
              "volumeCount": 1,
              "fontName": "string",
              "fontVersion": "string",
              "surfaceType": 1,
              "occurrences": [
                {}
              ]
            }
          ],
          "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": [
                {}
              ],
              "totalWeightGrams": 1
            }
          ]
        },
        "use3MFProcessProfile": true,
        "arrangeable": true,
        "userTags": [
          "string"
        ],
        "gcodePlateUris": {},
        "meshUri": "string",
        "meshSourceHash": "string",
        "meshError": "string",
        "uploadedAt": "2025-01-15T12:00:00.000Z",
        "customMetadata": {},
        "source": "google-drive",
        "processingStatus": "processing",
        "processing": {
          "workflowKey": "string",
          "fileHash": "string",
          "attempt": 1,
          "startedAt": "string",
          "finishedAt": "string",
          "failedStage": "fetch",
          "error": "string",
          "stages": [
            {
              "key": "fetch",
              "status": "running",
              "attempts": 1,
              "error": "string"
            }
          ]
        },
        "id": "string",
        "storeId": "string",
        "createdAt": "2025-01-15T12:00:00.000Z",
        "updatedAt": "2025-01-15T12:00:00.000Z"
      },
      "sku": {
        "sku": "string",
        "title": "string",
        "description": "string",
        "externalId": "string",
        "externalProvider": "etsy",
        "folderId": "string",
        "totalCogs": 1,
        "customMetadata": {},
        "id": "string",
        "storeId": "string",
        "createdAt": "2025-01-15T12:00:00.000Z",
        "updatedAt": "2025-01-15T12:00:00.000Z"
      },
      "order": {
        "orderNumber": "string",
        "source": "etsy",
        "status": "open",
        "cancelledAt": "2025-01-15T12:00:00.000Z",
        "shippedAt": "2025-01-15T12:00:00.000Z",
        "customerId": "string",
        "integrationId": "string",
        "priceBucket": 1,
        "price": 1,
        "currency": "string",
        "externalId": "string",
        "externalUrl": "string",
        "sourceRef": "string",
        "note": "string",
        "deadline": "2025-01-15T12:00:00.000Z",
        "processedAt": "2025-01-15T12:00:00.000Z",
        "syncDisabled": true,
        "customMetadata": {},
        "id": "string",
        "storeId": "string",
        "createdAt": "2025-01-15T12:00:00.000Z",
        "updatedAt": "2025-01-15T12:00:00.000Z"
      },
      "orderItem": {
        "orderId": "string",
        "skuId": "string",
        "source": "etsy",
        "quantity": 1,
        "inputs": {},
        "status": "string",
        "externalId": "string",
        "externalOrderId": "string",
        "externalProductId": "string",
        "externalSku": "string",
        "originalSku": "string",
        "processedAt": "2025-01-15T12:00:00.000Z",
        "ignored": true,
        "processedStatus": "unprocessed",
        "skuConfig": {
          "linkedPartConfigs": {},
          "selectedOptions": {},
          "freeTextOptionIds": [
            "string"
          ],
          "personalizationAnswerKeys": [
            "string"
          ]
        },
        "resolutionNote": {
          "type": "variant_enrichment_failed",
          "message": "string",
          "retriable": true,
          "occurredAt": 1
        },
        "customMetadata": {},
        "id": "string",
        "storeId": "string",
        "createdAt": "2025-01-15T12:00:00.000Z",
        "updatedAt": "2025-01-15T12:00:00.000Z"
      }
    }
  ]
}