getactuators API

Version 1 · Last updated 2026-09-26

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

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

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.

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://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.

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

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

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://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.

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