actuatorlist API

Version 1 · Last updated 2026-09-26

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

MethodPathSummary
GET/apiAPI index
GET/openapi.jsonOpenAPI document
GET/api/v1/actuatorsSearch and filter actuators
GET/api/v1/actuators/compareFetch several actuators by id
POST/api/v1/actuators/compareFetch several actuators by id (JSON body)
GET/api/v1/actuators/{id}Get one actuator
GET/api/v1/robotsList robots
GET/api/v1/robots/{id}Get one robot with its joint motors
GET/api/v1/categoriesList actuator categories
GET/api/v1/brandsList actuator brands
GET/api/v1/use-casesList use-case tags
GET/api/v1/companiesList supply-chain companies
GET/api/v1/companies/{id}Get one supply-chain company
GET/api/v1/sitesList supply-chain sites
GET/api/v1/metalsList 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/policyList policy measures on the actuator chain
GET/api/v1/policy/{id}Get one policy measure
GET/api/v1/humanoidsList 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.

ParameterInDescription
qqueryFree-text search over id, name, brand, category, use cases, notes.
categoryqueryCategory slug.
brandqueryExact brand name (case-insensitive).
use_casequeryUse-case tag, e.g. humanoid.
min_peak_torque_nmqueryMinimum peak torque in N·m.
max_weight_gqueryMaximum mass in grams.
max_price_usdqueryMaximum list price in USD.
backdrivablequeryOnly backdrivable (true) or non-backdrivable (false).
integrated_driverqueryOnly actuators with (true) or without an onboard driver.
sortquerySort field (default: id).
orderquerySort direction (default desc when sort is set).
limitqueryPage size, 1 to 100 (default 25).
cursorqueryOpaque 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.

ParameterInDescription
idsquery, requiredComma-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.

ParameterInDescription
idpath, requiredActuator 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.

ParameterInDescription
qqueryFree-text search over name, brand, summary.
brandqueryExact brand name (case-insensitive).
limitqueryPage size, 1 to 100 (default 25).
cursorqueryOpaque 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.

ParameterInDescription
idpath, requiredRobot 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.

ParameterInDescription
countryqueryISO 3166 alpha-2 country code, e.g. JP.
stagequerySupply-chain stage, e.g. magnet.
segmentqueryIndustry segment.
limitqueryPage size, 1 to 100 (default 25).
cursorqueryOpaque 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.

ParameterInDescription
idpath, requiredCompany 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.

ParameterInDescription
countryqueryISO 3166 alpha-2 country code, e.g. JP.
stagequerySupply-chain stage, e.g. magnet.
companyqueryCompany id.
kindquerySite kind.
limitqueryPage size, 1 to 100 (default 25).
cursorqueryOpaque 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.

ParameterInDescription
elementpath, requiredElement id: nd, pr, dy, tb, sm or co.
stagequeryOnly 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.

ParameterInDescription
seriespath, requiredSeries id, e.g. ndpr-oxide, dy-oxide, tb-metal-cn, tb-metal-fob, co-metal.
fromqueryFirst month, YYYY-MM.
toqueryLast 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.

ParameterInDescription
jurisdictionqueryISO 3166 alpha-2 code (CN, US, JP, KR, AU), EU, INTL, or OTHER.
typequeryexport-control, tariff, subsidy or standard.
stagequerySupply-chain stage the measure hits, e.g. magnet.
statusquerydraft, 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.

ParameterInDescription
idpath, requiredMeasure 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.

ParameterInDescription
idpath, requiredHumanoid 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"
}
CodeStatusMeaning
invalid_parameter400A query parameter has the wrong type or value; see errors[].
invalid_cursor400The cursor is malformed or was issued for other filters.
invalid_json400The POST body is not JSON.
not_found404No actuator or robot with that id.
unknown_endpoint404The path is not part of the API.
method_not_allowed405Wrong HTTP method; the Allow header lists valid ones.
unsupported_media_type415POST bodies must be application/json.
validation_failed422The JSON body does not match the schema; see errors[].
rate_limited429Slow down and retry after Retry-After seconds.
internal_error500Server 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