actuatorlist API
A free, public, read-only REST API over every actuator and robot on actuatorlist. JSON in, JSON out, no key required. The same data is available to AI agents over MCP.
Quickstart
curl -s "https://actuatorlist.com/api/v1/actuators?q=humanoid&limit=3"
Authentication
None. Every endpoint is anonymous: no API key, no OAuth, no account. Just call it.
Base URL
https://actuatorlist.com. All paths below are relative to it. CORS is open (Access-Control-Allow-Origin: *), so browsers can call it directly.
Sandbox and safety
The API is read-only: no endpoint creates, changes or deletes anything, so production doubles as the sandbox and any call is safe to retry. POST /api/v1/actuators/compare accepts an Idempotency-Key header for client compatibility, but it is never needed.
Endpoints
| Method | Path | Summary |
|---|---|---|
| GET | /api | API index |
| GET | /openapi.json | OpenAPI document |
| GET | /api/v1/actuators | Search and filter actuators |
| GET | /api/v1/actuators/compare | Fetch several actuators by id |
| POST | /api/v1/actuators/compare | Fetch several actuators by id (JSON body) |
| GET | /api/v1/actuators/{id} | Get one actuator |
| GET | /api/v1/robots | List robots |
| GET | /api/v1/robots/{id} | Get one robot with its joint motors |
| GET | /api/v1/categories | List actuator categories |
| GET | /api/v1/brands | List actuator brands |
| GET | /api/v1/use-cases | List use-case tags |
| GET | /api/v1/companies | List supply-chain companies |
| GET | /api/v1/companies/{id} | Get one supply-chain company |
| GET | /api/v1/sites | List supply-chain sites |
| GET | /api/v1/metals | List magnet metals |
| GET | /api/v1/metals/{element} | Who supplies one magnet metal |
| GET | /api/v1/metal-prices/{series} | Price history of a magnet metal |
| GET | /api/v1/policy | List policy measures on the actuator chain |
| GET | /api/v1/policy/{id} | Get one policy measure |
| GET | /api/v1/humanoids | List humanoids with actuator totals |
| GET | /api/v1/humanoids/{id} | Get one humanoid joint by joint |
GET /api
API index. Machine-readable entry point: every endpoint with its method and summary, plus links to the docs, the OpenAPI document and the MCP server. Operation id: get_api_index.
curl -s "https://actuatorlist.com/api"
GET /openapi.json
OpenAPI document. This OpenAPI 3.1 description of the API (also at /api/openapi.json). Operation id: get_openapi_spec.
curl -s "https://actuatorlist.com/openapi.json"
GET /api/v1/actuators
Search and filter actuators. List robot actuators with optional filters (text, category, brand, use case, torque, mass, price, backdrivability, onboard driver) and sorting. Cursor-paginated: follow pagination.next_cursor until has_more is false. Operation id: list_actuators.
| Parameter | In | Description |
|---|---|---|
q | query | Free-text search over id, name, brand, category, use cases, notes. |
category | query | Category slug. |
brand | query | Exact brand name (case-insensitive). |
use_case | query | Use-case tag, e.g. humanoid. |
min_peak_torque_nm | query | Minimum peak torque in N·m. |
max_weight_g | query | Maximum mass in grams. |
max_price_usd | query | Maximum list price in USD. |
backdrivable | query | Only backdrivable (true) or non-backdrivable (false). |
integrated_driver | query | Only actuators with (true) or without an onboard driver. |
sort | query | Sort field (default: id). |
order | query | Sort direction (default desc when sort is set). |
limit | query | Page size, 1 to 100 (default 25). |
cursor | query | Opaque pagination.next_cursor from the previous page. |
curl -s "https://actuatorlist.com/api/v1/actuators?category=qdd_proprioceptive&min_peak_torque_nm=20&sort=torque_density_nm_per_kg&limit=5"
GET /api/v1/actuators/compare
Fetch several actuators by id. Batch lookup of up to 20 actuators by id for side-by-side comparison. Results keep request order; unknown ids are listed in not_found instead of failing the whole request. Operation id: compare_actuators.
| Parameter | In | Description |
|---|---|---|
ids | query, required | Comma-separated actuator ids, 1 to 20, e.g. a,b,c. |
curl -s "https://actuatorlist.com/api/v1/actuators/compare?ids=robstride-02,cubemars-ak80-9"
POST /api/v1/actuators/compare
Fetch several actuators by id (JSON body). Same as compare_actuators but takes {"ids": [...]} (1 to 20 ids) as a JSON body. Read-only and safe to retry: an Idempotency-Key header is accepted but not required. Operation id: compare_actuators_batch.
curl -s -X POST "https://actuatorlist.com/api/v1/actuators/compare" \
-H "Content-Type: application/json" \
-d '{"ids": ["robstride-02", "cubemars-ak80-9", "not-a-real-id"]}'
GET /api/v1/actuators/{id}
Get one actuator. Full specifications for one actuator, plus robots_using: the robots in the catalog whose joints use it. Operation id: get_actuator.
| Parameter | In | Description |
|---|---|---|
id | path, required | Actuator id (slug). |
curl -s "https://actuatorlist.com/api/v1/actuators/robstride-02"
GET /api/v1/robots
List robots. Robots (arms, humanoids, quadrupeds) in the catalog with headline specs. Cursor-paginated like list_actuators. Operation id: list_robots.
| Parameter | In | Description |
|---|---|---|
q | query | Free-text search over name, brand, summary. |
brand | query | Exact brand name (case-insensitive). |
limit | query | Page size, 1 to 100 (default 25). |
cursor | query | Opaque pagination.next_cursor from the previous page. |
curl -s "https://actuatorlist.com/api/v1/robots?limit=10"
GET /api/v1/robots/{id}
Get one robot with its joint motors. One robot with every joint group resolved to its motor specs, linked to the matching catalog actuator when there is one. Operation id: get_robot.
| Parameter | In | Description |
|---|---|---|
id | path, required | Robot id (slug). |
curl -s "https://actuatorlist.com/api/v1/robots/i2rt-yam"
GET /api/v1/categories
List actuator categories. Every category slug with a label, description and actuator count. Operation id: list_categories.
curl -s "https://actuatorlist.com/api/v1/categories"
GET /api/v1/brands
List actuator brands. Every brand name (usable as the brand filter) with its actuator count. Operation id: list_brands.
curl -s "https://actuatorlist.com/api/v1/brands"
GET /api/v1/use-cases
List use-case tags. Every use-case tag (usable as the use_case filter) with its actuator count. Operation id: list_use_cases.
curl -s "https://actuatorlist.com/api/v1/use-cases"
GET /api/v1/companies
List supply-chain companies. Companies along the actuator supply chain (rare earths, magnets and motors, gears and bearings, robot and actuator makers). Filter by country, stage or segment. Every number carries sources, as-of date and confidence. Cursor-paginated. Operation id: list_companies.
| Parameter | In | Description |
|---|---|---|
country | query | ISO 3166 alpha-2 country code, e.g. JP. |
stage | query | Supply-chain stage, e.g. magnet. |
segment | query | Industry segment. |
limit | query | Page size, 1 to 100 (default 25). |
cursor | query | Opaque pagination.next_cursor. |
curl -s "https://actuatorlist.com/api/v1/companies?country=JP&stage=gearing"
GET /api/v1/companies/{id}
Get one supply-chain company. One company with its sites, the companies it supplies and the companies that supply it, each with citations. Operation id: get_company.
| Parameter | In | Description |
|---|---|---|
id | path, required | Company id (slug). |
curl -s "https://actuatorlist.com/api/v1/companies/jl-mag"
GET /api/v1/sites
List supply-chain sites. Headquarters, plants, mines and refineries with coordinates and their precision. Filter by country, stage, company or kind. Cursor-paginated. Operation id: list_sites.
| Parameter | In | Description |
|---|---|---|
country | query | ISO 3166 alpha-2 country code, e.g. JP. |
stage | query | Supply-chain stage, e.g. magnet. |
company | query | Company id. |
kind | query | Site kind. |
limit | query | Page size, 1 to 100 (default 25). |
cursor | query | Opaque pagination.next_cursor. |
curl -s "https://actuatorlist.com/api/v1/sites?company=jl-mag"
GET /api/v1/metals
List magnet metals. The six metals in an actuator's permanent magnet (Nd, Pr, Dy, Tb for NdFeB; Sm, Co for SmCo) with their role and the leading country at each stage: mining, separation, metal and alloy, magnets. Operation id: list_metals.
curl -s "https://actuatorlist.com/api/v1/metals"
GET /api/v1/metals/{element}
Who supplies one magnet metal. Country shares of each stage (or one with stage), USGS mine production, reserves and years of supply by country, and the latest cited price of every series for the element. Stages no public source splits by country are marked gap. Operation id: get_metal.
| Parameter | In | Description |
|---|---|---|
element | path, required | Element id: nd, pr, dy, tb, sm or co. |
stage | query | Only this stage: mining, separation, metal-alloy or magnet. |
curl -s "https://actuatorlist.com/api/v1/metals/dy?stage=separation"
GET /api/v1/metal-prices/{series}
Price history of a magnet metal. Cited price points for one series in US$/kg (USGS annual averages and year-end ranges, monthly SMM readings in 2026) with the events that touched the element. from and to take YYYY-MM. Operation id: get_metal_prices.
| Parameter | In | Description |
|---|---|---|
series | path, required | Series id, e.g. ndpr-oxide, dy-oxide, tb-metal-cn, tb-metal-fob, co-metal. |
from | query | First month, YYYY-MM. |
to | query | Last month, YYYY-MM. |
curl -s "https://actuatorlist.com/api/v1/metal-prices/dy-oxide?from=2020-01"
GET /api/v1/policy
List policy measures on the actuator chain. Export controls, tariffs, subsidies and standards that touch the actuator supply chain (mining to robot) in China, the US, the EU, Japan, Korea, Australia and international standards bodies, oldest first. Each measure has its status history with a primary source per change. Filter by jurisdiction, type, stage or status. Operation id: list_policy_measures.
| Parameter | In | Description |
|---|---|---|
jurisdiction | query | ISO 3166 alpha-2 code (CN, US, JP, KR, AU), EU, INTL, or OTHER. |
type | query | export-control, tariff, subsidy or standard. |
stage | query | Supply-chain stage the measure hits, e.g. magnet. |
status | query | draft, announced, in-force, suspended or expired. |
curl -s "https://actuatorlist.com/api/v1/policy?jurisdiction=CN&type=export-control"
GET /api/v1/policy/{id}
Get one policy measure. One measure with its issuer, dates, status history, affected stages, HS codes, companies, award size and sources. Operation id: get_policy_measure.
| Parameter | In | Description |
|---|---|---|
id | path, required | Measure id, e.g. cn-mofcom-2025-18. |
curl -s "https://actuatorlist.com/api/v1/policy/cn-mofcom-2025-18"
GET /api/v1/humanoids
List humanoids with actuator totals. Every humanoid on /humanoids with its actuator count by type (QDD, planetary, harmonic, cycloidal, roller screw, ball screw, hydraulic, tendon, undisclosed) and estimated NdFeB magnet and rare-earth (Nd, Pr, Dy, Tb) mass, each with a range and confidence. Operation id: list_humanoids.
curl -s "https://actuatorlist.com/api/v1/humanoids"
GET /api/v1/humanoids/{id}
Get one humanoid joint by joint. One humanoid mapped onto the canonical joint set: per joint the actuator type and whether it is reported or estimated (with what it was inferred from), motor, reducer, peak torque or force, gear ratio and motor-side torque, estimated magnet mass and sources. Operation id: get_humanoid.
| Parameter | In | Description |
|---|---|---|
id | path, required | Humanoid id (slug). |
curl -s "https://actuatorlist.com/api/v1/humanoids/unitree-g1"
Pagination
List endpoints are cursor-paginated. Pass limit (1 to 100, default 25). Each response has pagination: { next_cursor, has_more, total }; repeat the same query with cursor=<next_cursor> until has_more is false. Cursors are opaque and tied to the filters they were issued for.
curl -s "https://actuatorlist.com/api/v1/actuators?limit=25&cursor=<next_cursor>"
Errors
Every error is RFC 9457 application/problem+json with a stable code, a hint on how to fix the request and, for validation errors, a per-field errors array. Unknown /api/* paths return a JSON 404, never an HTML page.
{
"type": "https://actuatorlist.com/docs/api#error-not-found",
"title": "Resource not found",
"status": 404,
"detail": "No actuator with id \"nope\".",
"code": "not_found",
"hint": "Ids are slugs; list valid ones with GET /api/v1/actuators?q=<search>.",
"instance": "/api/v1/actuators/nope",
"docs": "https://actuatorlist.com/docs/api#errors"
}
| Code | Status | Meaning |
|---|---|---|
invalid_parameter | 400 | A query parameter has the wrong type or value; see errors[]. |
invalid_cursor | 400 | The cursor is malformed or was issued for other filters. |
invalid_json | 400 | The POST body is not JSON. |
not_found | 404 | No actuator or robot with that id. |
unknown_endpoint | 404 | The path is not part of the API. |
method_not_allowed | 405 | Wrong HTTP method; the Allow header lists valid ones. |
unsupported_media_type | 415 | POST bodies must be application/json. |
validation_failed | 422 | The JSON body does not match the schema; see errors[]. |
rate_limited | 429 | Slow down and retry after Retry-After seconds. |
internal_error | 500 | Server bug; retry, then report it on GitHub. |
Rate limits
120 requests per 60 seconds per client IP. Every response reports the budget in the IETF RateLimit and RateLimit-Policy headers and in X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds). Past the limit you get a 429 problem with Retry-After. Responses are cacheable for 5 minutes (Cache-Control: public, max-age=300).
Versioning and deprecation
The major version is in the path (/api/v1) and echoed in the API-Version response header. Breaking changes ship only under a new path version (/api/v2). A deprecated operation keeps working for at least 6 months after it is marked: responses carry Deprecation (RFC 9745) and Sunset (RFC 8594) headers plus a Link rel="deprecation" to the changelog, and the operation is flagged deprecated: true here. Additive changes (new fields, endpoints, filters) can land at any time, so clients should ignore unknown fields.
Machine-readable resources
- OpenAPI 3.1 document (also at
/api/openapi.json); every operation has a snake_caseoperationIdusable as a function-calling tool name. - API index: JSON list of endpoints.
- MCP server: the same catalog as MCP tools, no auth.
- llms.txt: site overview for language models.
- This page as Markdown.
- Source and issues on GitHub.