GrabCAD APIgrabcad.com ↗
Search and retrieve 3D CAD models from GrabCAD's Community Library. Filter by software, keyword, and sort order. Get model details and file listings via 3 endpoints.
What is the GrabCAD API?
The GrabCAD Library API provides 3 endpoints to search, inspect, and list files for community-contributed 3D CAD models. The search_models endpoint returns paginated results filterable by software slug (e.g. solidworks, fusion-360), keyword, sort order, and time range, with each result carrying download counts, like counts, and preview images. The other two endpoints retrieve per-model metadata and file-level detail.
curl -X GET 'https://api.parse.bot/scraper/c6dc175a-44c2-4d5c-a2e6-d4fcc8058524/search_models?page=1&sort=recent&time=all_time&query=gear&per_page=5&software=solidworks' \ -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 grabcad-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.
"""GrabCAD Community Library — search models, drill into details and files."""
from parse_apis.grabcad_community_library_api import GrabCAD, Sort, TimeFilter, ModelNotFound
client = GrabCAD()
# Search for recent SOLIDWORKS gear models (bounded)
for summary in client.modelsummaries.search(query="gear", sort=Sort.RECENT, software="solidworks", limit=3):
print(summary.name, summary.downloads_count, summary.softwares)
# Drill into the first result's full details
summary = client.modelsummaries.search(query="fan", sort=Sort.MOST_DOWNLOADED, limit=1).first()
if summary:
model = summary.details()
print(model.name, model.files_count, model.categories, model.tags)
# List files for that model, filter by extension
for f in model.files.list(extension="sldprt", limit=5):
print(f.name, f.extension, f.system, f.is_viewable)
# Fetch a model directly by slug
try:
direct = client.models.get(slug="motor-with-gear-double-shaft-jgy-370-1")
print(direct.name, direct.author.name, direct.author.location)
except ModelNotFound as exc:
print(f"Model not found: {exc.slug}")
print("exercised: modelsummaries.search / summary.details / model.files.list / models.get")
Search and list CAD models from the GrabCAD library with pagination. Filter by software type, sort order, and keyword query. Returns paginated results with model summaries including author info and download counts. Paginates via integer page counter. Each model summary carries a slug usable with get_model_details and get_model_files.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based) |
| sort | string | Sort order for results |
| time | string | Time filter for results |
| query | string | Search keyword to filter models (e.g. 'fan', 'gear') |
| per_page | integer | Results per page (max ~100) |
| software | string | Filter by software slug (e.g. 'solidworks', 'autocad', 'fusion-360') |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"models": "array of model summary objects with name, slug, preview_image, likes_count, comments_count, downloads_count, created_at, softwares, and author",
"per_page": "integer, results per page",
"total_pages": "integer, total number of pages",
"total_entries": "integer, total number of matching models"
},
"sample": {
"data": {
"page": 1,
"models": [
{
"name": "Motor with gear double shaft JGY-370",
"slug": "motor-with-gear-double-shaft-jgy-370-1",
"author": {
"name": "Dim Nem",
"slug": "dim.nem-1",
"avatar": "https://grabcad.com/members/avatars/17100857/feed.png?1725536879"
},
"softwares": [
"SOLIDWORKS",
"Rendering"
],
"created_at": "2026-06-10T06:58:12Z",
"likes_count": 0,
"preview_image": "https://grabcad.com/screenshots/pics/e3d644cb520a908dfabd4d2e4fda1590/card.jpg",
"comments_count": 0,
"downloads_count": 9
}
],
"per_page": 5,
"total_pages": 480,
"total_entries": 2400
},
"status": "success"
}
}About the GrabCAD API
Search and Filter CAD Models
The search_models endpoint accepts up to six parameters: query for keyword search, software to narrow by CAD application slug (such as autocad or step), sort and time for ordering, and page/per_page for pagination up to roughly 100 results at a time. The response reports total_entries and total_pages so you can walk the full result set. Each model summary includes name, slug, preview_image, likes_count, comments_count, downloads_count, created_at, and a softwares array.
Model Details and Metadata
Pass any slug from search_models into get_model_details to receive full model metadata: description, tags, categories, softwares, files_count, created_at, and updated_at. The author object includes the contributor's name, slug, avatar, location, and models_count, which is useful for building attribution displays or tracking prolific contributors.
File Listings
get_model_files takes the same slug and an optional extension filter (e.g. step, stl, sldprt, sldasm) to return only files of that type. Each file object includes id, name, extension, system (the CAD platform it targets), created_at, updated_at, is_viewable, and thumbnail. The total_files field reflects the count after any extension filter is applied.
The GrabCAD API is a managed, monitored endpoint for grabcad.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when grabcad.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 grabcad.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 CAD model search interface filtered by specific software like SolidWorks or Fusion 360
- Track download and like counts across models to identify trending designs in a category
- Aggregate author profiles using the
models_countandlocationfields fromget_model_details - Inventory available file formats for a model by filtering
get_model_filesby extension (e.g. STEP vs STL) - Build a dataset of tagged CAD models by category for machine learning or search indexing
- Monitor newly uploaded models by sorting
search_modelsbyrecentand polling periodically - Identify which CAD software ecosystems have the most coverage for a given component type
| 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 GrabCAD have an official developer API?+
What does `get_model_files` return, and can I filter by file type?+
name, extension, system (the target CAD platform), is_viewable, thumbnail, and timestamps. You can pass the optional extension parameter—such as step, stl, or sldprt—to limit results to a single file type. The total_files count in the response reflects the filtered set.Can I retrieve actual file download URLs through this API?+
Is there a limit to how many results `search_models` can return per page?+
per_page parameter supports up to roughly 100 results per request. For larger result sets, use the total_pages and total_entries fields in the response to paginate through subsequent pages using the integer page parameter.Does the API expose model comments or review text?+
search_models returns a comments_count per model, and get_model_details provides metadata like description and tags, but the content of individual comments is not exposed. You can fork this API on Parse and revise it to add a comments endpoint for a given model slug.