getactuators API
A free, public, read-only REST API over every actuator and robot on getactuators. JSON in, JSON out, no key required. The same data is available to AI agents over MCP.
Quickstart
curl -s "https://getactuators.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://getactuators.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
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://getactuators.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://getactuators.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://getactuators.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://getactuators.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://getactuators.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://getactuators.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://getactuators.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://getactuators.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://getactuators.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://getactuators.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://getactuators.com/api/v1/use-cases"
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://getactuators.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://getactuators.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://getactuators.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.