Use it for comparison sites, research, internal tools and more, following the terms of use (crediting the source).
Endpoints
Base URL: https://www.3d-tech.org/api/v1. All endpoints are GET only.
| Path | Returns |
|---|---|
/api/v1/printers | List of 3D printers |
/api/v1/printers/{id} | A single 3D printer |
/api/v1/scanners | List of 3D scanners |
/api/v1/scanners/{id} | A single 3D scanner |
List parameters
Results are always sorted by ID in ascending order. Parameters not listed here, or malformed values, return a 400 error.
| Name | Description | Default |
|---|---|---|
limit | Items per page (1–100) | 20 |
offset | Number of items to skip from the start (0 or more) | 0 |
method | Filter by method ID (printing method for printers, scanning method for scanners) | None |
company | Filter by maker ID | None |
in_production | Filter by in production (true) or discontinued (false) | None |
curl "https://www.3d-tech.org/api/v1/printers?limit=10&method=1&in_production=true"Responses
Lists return data (an array) and meta (the total count total, and next_offset and next for the next page, which are null on the last page). A single item returns one object in data.
- Units are given as suffixes of the field names (
_mm,_um(μm),_kg,_c(°C),_nm,_mm_s(mm/s),_fps). - Prices are returned separately as
price_jpy(Japanese yen) andprice_usd(US dollars). Neither is converted from the other at an exchange rate. - Fields without a recorded value are null (empty arrays for multi-value fields).
- For scanners,
scan_area_mmis a string such as “210 x 150”. - Some text is in Japanese:
method.name_jaholds the Japanese name of the method, and errormessagevalues are written in Japanese. Useerror.codeto handle errors in your code. In the examples below, non-ASCII characters are shown as\uXXXXescapes, which decode to the same values.
Example of a 3D printer list (GET /api/v1/printers?limit=10):
{
"data": [
{
"id": 1,
"name": "Example Printer X1",
"url": "https://www.3d-tech.org/search/1",
"company": {
"id": 3,
"name": "Example Inc."
},
"method": {
"id": 1,
"name": "Fused Deposition Modeling",
"name_ja": "\u71b1\u6eb6\u89e3\u7a4d\u5c64\u65b9\u5f0f",
"abbreviation": "FDM"
},
"price_jpy": 49800,
"price_usd": 299,
"build_volume_mm": {
"x": 220,
"y": 220,
"z": 250
},
"dimensions_mm": {
"x": 400,
"y": 410,
"z": 470
},
"weight_kg": 7.5,
"resolution_xy_um": null,
"resolution_z_um": 100,
"layer_pitch_mm": {
"min": 0.05,
"max": 0.35
},
"speed_mm_s": {
"min": null,
"max": 500
},
"nozzle_temp_c": 300,
"bed_temp_c": 100,
"chamber_temp_c": null,
"nozzle_sizes_mm": [
0.4,
0.6
],
"filament_sizes_mm": [
1.75
],
"wavelength_nm": null,
"power_supply": "100-240V",
"is_in_production": true,
"released_on": "2025-03-01",
"product_url": "https://example.com/x1",
"japan": {
"has_giteki": true,
"has_japanese_support": true,
"distributor_name": null,
"distributor_url": null,
"official_price_jpy": 49800,
"warranty_months": 12
}
}
],
"meta": {
"total": 120,
"limit": 10,
"offset": 0,
"next_offset": 10,
"next": "https://www.3d-tech.org/api/v1/printers?limit=10&offset=10"
},
"attribution": {
"text": "3Techs\uff08https://www.3d-tech.org\uff09",
"url": "https://www.3d-tech.org/",
"terms": "https://www.3d-tech.org/developers#terms"
}
}For 3D scanners, the API returns fields such as accuracy_mm, resolution_mm, point_distance_mm, scan_area_mm (min / max), working_distance_mm (min / max), scan_speed_fps, has_color, connection and weight_kg (id, name, url, company, method, prices and production status have the same shape as for printers).
Errors
Errors are returned in this form.
{
"error": {
"code": "invalid_parameter",
"message": "limit \u306f 1\u301c100 \u3067\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044"
}
}| Status | code | Meaning |
|---|---|---|
| 400 | invalid_parameter | A parameter or ID is malformed |
| 404 | not_found | No data exists for the ID |
| 429 | rate_limited | The rate limit was exceeded |
| 500 | internal_error | A server-side error |
Rate limits and caching
- Each IP address can make up to 60 requests per 60 seconds. Beyond that, the API returns 429, and the
Retry-Afterheader tells you how many seconds to wait. - Responses include
X-RateLimit-Limit(the limit),X-RateLimit-Remaining(requests left) andX-RateLimit-Reset(reset time in UNIX seconds). - Limits are counted per server instance, so they are a guide rather than a strict limit. Header values on responses served from the CDN cache may not reflect the current state.
- Successful responses are cached for up to 5 minutes, so data updates may take that long to appear. If you need a lot of data, store it locally instead of fetching it repeatedly at short intervals.
- To allow calls directly from browsers, responses include
Access-Control-Allow-Origin: *(CORS).
Terms of use
By using this API or data obtained through it, you agree to the following conditions. These terms are an English translation of the Japanese terms.
Crediting the source
- When you display or publish the data, credit the source as “3Techs (https://www.3d-tech.org)” where users can see it.
- On websites and apps, link to 3Techs (https://www.3d-tech.org/, or the 3Techs page of the product) as the source.
- When you publish processed or aggregated data, state that the original data comes from 3Techs.
Accuracy of the data
- The data is compiled by 3Techs from sources such as information published by manufacturers, and its accuracy, completeness and timeliness are not guaranteed. Always check the manufacturer’s official information before making decisions such as purchases.
- The API specification and service may change or stop without notice. Except in cases of intent or gross negligence on the part of 3Techs, 3Techs is not liable for any damage arising from the use of the API.
Prohibited uses
- Publishing or redistributing the data without crediting the source
- Presenting the data as if it were not from 3Techs, or as if 3Techs recommends a particular product
- Selling the data as is, or nearly as is
- Making large numbers of requests from multiple IP addresses or similar to get around the rate limit
- Uses that interfere with the operation of the service, or that violate laws or public order and morals
If you find an error or want to discuss usage beyond the limits, contact us on X (@threejp).