Printables API — Full 3D Model Detail as JSON
Documentation menu
FetchLayer FetchLayer API

Get one model in full

Everything Printables publishes for a single model: the long description as HTML, the licence, the tags, every gallery image, the complete file listing with per-file slicing settings, the models it was remixed from, every contest placing, and the full counter set. Accepts a model id or any Printables model URL. Files are described — name, size, kind, printer, material, layer height, estimated time and filament — but carry no download URL, because Printables issues model-file downloads only to a signed-in account.

POST /model-detail Models
https://api.fetchlayer.dev/printables/model-detail
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

model string required

Model id, or a Printables model URL containing one.

format string optional

json, or markdown to get the result rendered as text. (default: json)

timeoutMs number optional

Per-request time limit in milliseconds (max 600000).

Response Fields

model-detail

Get one model in full

modelId string

The resolved model id.

model object

The full model record.

model.summary string | null

Short plain-text blurb.

model.descriptionHtml string | null

The designer's long description, as HTML.

model.license object

The licence the model is published under.

model.tags object[]

Tags the designer applied, with their ids.

model.images object[]

Every gallery image, ordered; order 0 is the cover. Pass a url to GET /media to stream the bytes.

model.files object[]

The file listing. Each entry carries name, sizeBytes, kind (geometry or sliced), folder, note and uploadedAt — but no download URL, because Printables publishes none.

model.files[].printSettings object

Layer height, nozzle diameter, estimated print hours, filament grams, printer and material. Present only on a sliced file.

model.printSettings object

Settings recorded for the model as a whole, including whether it is multi-material.

model.authorship string | null

own, remix, or reupload.

model.remixedFrom object[]

Models this one was derived from, with ids and URLs.

model.contestPlacements object[]

Every contest placing, not just the most recent.

model.instructionsPdfUrl string | null

The designer's printing instructions, when they attached any. Streamable through GET /media.

model.fileKind string | null

Which ready-to-print file kind the model ships, when any.

model.stats object

Downloads, likes, views, makes, comments, rating average and count, collections, file and image counts.

notes string[]

Caveats about this specific result — a truncated walk, a listing that may be incomplete, an upstream limit. Read it before treating a result set as complete.

requestedUrl string

The Printables page this result corresponds to.

scrapedAt string

ISO 8601 timestamp of when the data was collected.

resultType string

Which shape this response is, e.g. model-search or contest-detail.

blocked boolean

Always false on a successful response.

Request

curl -X POST "https://api.fetchlayer.dev/printables/model-detail" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"model":"https://www.printables.com/model/512345-under-desk-cable-tray"}'

Response

{
  "resultType": "model-detail",
  "modelId": "512345",
  "notes": [],
  "model": {
    "id": "512345",
    "name": "Under-desk cable tray",
    "license": {
      "id": "7",
      "name": "CC BY-NC-SA 4.0"
    },
    "authorship": "own",
    "fileKind": "GCODE",
    "files": [
      {
        "id": "88121",
        "name": "tray_body.stl",
        "sizeBytes": 2184320,
        "kind": "geometry",
        "printSettings": null
      }
    ],
    "printSettings": {
      "layerHeightsMm": [
        0.2
      ],
      "printDurationHours": 4.5,
      "weightGrams": 62,
      "multiMaterial": false
    }
  }
}