Printago API
GET
/v1/skus/{id}
Get a specific SKU
Path Parameters
id
required
string
The unique identifier of the SKU
Response Schema
SkuLinkedPartsWithPartRelation
createdAtrequired
string
format: date-time
descriptionrequired
string
externalIdrequired
string
externalProviderrequired
any
folderIdoptional
string
idrequired
string
pattern: ^[a-z0-9]{24}$
linkedPartsrequired
object[]
createdAtrequired
string
format: date-time
exposedParametersrequired
string[]
extensionsoptional
object
idrequired
string
pattern: ^[a-z0-9]{24}$
labelrequired
string
materialAssignmentsoptional
Record<string, object[]>
parameterBindingsoptional
Record<string, string>
parametersrequired
object[]
namerequired
string
typerequired
any
valueoptional
number | string | boolean
partrequired
object
arrangeableoptional
boolean
createdAtrequired
string
format: date-time
descriptionrequired
string
fileHashesrequired
string[]
min items: 1
fileUrisrequired
string[]
min items: 1
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
format: date-time
uploadedAtoptional
string
use3MFProcessProfileoptional
boolean
userTagsoptional
string[]
max items: 10
partIdrequired
string
pattern: ^[a-z0-9]{24}$
plateQuantitiesBindingoptional
string
quantityrequired
number
min: 0max: 500
skuIdrequired
string
pattern: ^[a-z0-9]{24}$
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
updatedAtrequired
string
format: date-time
skurequired
string
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
titlerequired
string
totalCogsrequired
number
updatedAtrequired
string
format: date-time
Example Response
200 OK — application/json
{
"sku": "string",
"title": "string",
"description": "string",
"totalCogs": 1,
"id": "string",
"storeId": "string",
"createdAt": "2026-08-24T03:58:56.125Z",
"updatedAt": "2026-08-24T03:58:56.125Z",
"linkedParts": [
{
"skuId": "string",
"partId": "string",
"parameters": [
{
"name": "string"
}
],
"quantity": 0,
"label": "string",
"exposedParameters": [
"string"
],
"id": "string",
"storeId": "string",
"createdAt": "2026-08-24T03:58:56.125Z",
"updatedAt": "2026-08-24T03:58:56.125Z",
"part": {
"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": "2026-08-24T03:58:56.125Z",
"updatedAt": "2026-08-24T03:58:56.125Z"
}
}
]
}