Thingiverse APIthingiverse.com ↗
Search Thingiverse models, fetch detailed specs, files, tags, and creator info, or aggregate tag trends across up to 50 models with three focused endpoints.
What is the Thingiverse API?
This API exposes three endpoints for accessing Thingiverse's catalog of 3D printable models: search by keyword with sort and pagination controls, retrieve per-model details including files, tags, license, and creator, and aggregate tag usage counts across up to 50 models in a single call. The get_model_details endpoint alone returns over 10 structured fields per model, covering everything from file lists to like counts.
curl -X GET 'https://api.parse.bot/scraper/3a7b9fcd-6b1a-4e4c-9ed0-b9698b260adf/search_models?page=1&sort=popular&query=drone&per_page=5' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace thingiverse-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.thingiverse_scraper_api import Thingiverse, Sort, ModelSummary, Model, TagAggregation
client = Thingiverse()
# Search for popular 3D printable drone models
for summary in client.modelsummaries.search(query="drone", sort=Sort.POPULAR, limit=5):
print(summary.name, summary.like_count, summary.creator.name)
# Drill into full details for each model
model = summary.details()
print(model.description[:80], model.file_count, model.license)
for tag in model.tags:
print(tag.name, tag.url)
# Aggregate tag usage across search results
agg = client.modelsummaries.aggregate_tags(query="drone", limit=10)
print(agg.models_processed)
for tc in agg.tag_aggregations:
print(tc.tag, tc.count)
Full-text search over Thingiverse 3D model catalog. Results are paginated and sortable. Each hit includes basic model metadata (name, creator, engagement counts, thumbnail). For full details (description, tags, files), call the details navigation on a returned summary.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| sort | string | Sort order for results. |
| queryrequired | string | Search query keywords. |
| per_page | integer | Number of results per page. |
{
"type": "object",
"fields": {
"hits": "array of model summary objects with id, name, public_url, created_at, thumbnail, creator, like_count, collect_count, comment_count",
"total": "integer total number of matching results"
},
"sample": {
"data": {
"hits": [
{
"id": 763622,
"name": "3DBenchy",
"creator": {
"id": 1336,
"name": "CreativeTools",
"public_url": "https://www.thingiverse.com/CreativeTools"
},
"thumbnail": "https://cdn.thingiverse.com/assets/ee/dc/9a/fb/74/benchy.JPG",
"created_at": "2015-04-09T12:57:28+00:00",
"like_count": 90789,
"public_url": "https://www.thingiverse.com/thing:763622",
"is_featured": true,
"collect_count": 138060,
"comment_count": 993
}
],
"total": 10000
},
"status": "success"
}
}About the Thingiverse API
Search and Discovery
The search_models endpoint accepts a required query string and optional parameters for page, per_page, and sort. The sort field accepts four values — popular, relevant, featured, and newest — giving you control over ranking. Each result object in the hits array includes the model's id, name, public_url, thumbnail, creation timestamp, creator details, like_count, collect_count, and comment_count. The total field in the response tells you how many models matched, which you can use to drive pagination logic.
Model Details
The get_model_details endpoint takes a numeric thing_id and returns a structured record for that model. Response fields include tags (array of objects with name and url), files (array with per-file name and url), license, categories, file_count, like_count, created_at, and creator with their public profile URL. This is the right endpoint when you need to inspect a model's actual downloadable files or verify its license before use.
Tag Aggregation
The aggregate_tag_counts endpoint is purpose-built for trend analysis. It processes up to 50 models (controlled by the limit parameter), optionally filtered to a specific query. It returns a tag_aggregations array sorted by count descending, alongside models_processed so you know the sample size. If query is omitted, it aggregates across popular models, making it useful for identifying community-wide printing trends without manual iteration.
The Thingiverse API is a managed, monitored endpoint for thingiverse.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when thingiverse.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official thingiverse.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a 3D printing catalog app that searches Thingiverse by keyword and displays thumbnails and like counts from
search_models. - Verify the license of a model before commercial use by calling
get_model_detailsand reading thelicensefield. - Download all files for a specific model by iterating the
filesarray returned byget_model_details. - Identify trending maker topics by running
aggregate_tag_countswithout a query and sorting bycount. - Track how many Thingiverse models exist for a niche category by checking the
totalfield fromsearch_models. - Build a creator profile page by extracting
creator.nameandcreator.public_urlfrom model detail responses. - Analyze which tags dominate a keyword niche (e.g. 'miniatures') by passing a query to
aggregate_tag_counts.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Thingiverse have an official developer API?+
What does `get_model_details` return beyond what `search_models` already includes?+
search_models returns a summary per model: id, name, thumbnail, like_count, collect_count, comment_count, and basic creator info. get_model_details adds tags, files (with individual download URLs), license, categories, file_count, and created_at. If you need to know what files are attached to a model or what license it carries, you need get_model_details.Does `aggregate_tag_counts` cover all models on Thingiverse?+
limit parameter. The models_processed field in the response tells you the actual sample size. Results reflect a sample, not a full-corpus count. For a narrow query, 50 models may be most or all of the results; for broad queries it is a sample of the top results.Can I retrieve a model's remix history or see which designs it was derived from?+
thing_id.