{
  "openapi": "3.1.0",
  "info": {
    "title": "getactuators API",
    "version": "1.0.0",
    "summary": "Read-only REST API over the getactuators robot actuator and robot catalog.",
    "description": "Free, anonymous, read-only access to every actuator and robot on https://getactuators.com. No API key, no account, no writes: production is safe to call, so there is no separate sandbox.\n\n**Rate limits:** 120 requests per 60s per client IP, reported in `RateLimit`/`RateLimit-Policy` and `X-RateLimit-*` headers; a 429 carries `Retry-After`.\n\n**Errors:** RFC 9457 `application/problem+json` with a stable `code`.\n\n**Versioning and deprecation:** 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.",
    "contact": {
      "name": "getactuators on GitHub",
      "url": "https://github.com/Miyamura80/getactuators/issues"
    },
    "license": {
      "name": "MIT",
      "identifier": "MIT"
    },
    "x-deprecation-policy": "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."
  },
  "servers": [
    {
      "url": "https://getactuators.com",
      "description": "Production. Read-only, so it doubles as the sandbox."
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "actuators",
      "description": "Actuator search, detail and comparison."
    },
    {
      "name": "robots",
      "description": "Robots and the motors in their joints."
    },
    {
      "name": "taxonomy",
      "description": "Categories, brands and use cases for filters."
    },
    {
      "name": "meta",
      "description": "Discovery: index and this document."
    }
  ],
  "externalDocs": {
    "description": "Developer guide",
    "url": "https://getactuators.com/docs/api"
  },
  "paths": {
    "/api": {
      "get": {
        "operationId": "get_api_index",
        "summary": "API index",
        "description": "Machine-readable entry point: every endpoint with its method and summary, plus links to the docs, the OpenAPI document and the MCP server.",
        "tags": [
          "meta"
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiIndex"
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "get_openapi_spec",
        "summary": "OpenAPI document",
        "description": "This OpenAPI 3.1 description of the API (also at /api/openapi.json).",
        "tags": [
          "meta"
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenApiDocument"
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    },
    "/api/v1/actuators": {
      "get": {
        "operationId": "list_actuators",
        "summary": "Search and filter actuators",
        "description": "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.",
        "tags": [
          "actuators"
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Free-text search over id, name, brand, category, use cases, notes.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category slug.",
            "schema": {
              "type": "string",
              "enum": [
                "qdd_proprioceptive",
                "integrated_joint",
                "smart_servo",
                "harmonic_precision",
                "frameless_driver",
                "cycloidal_premium"
              ]
            }
          },
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "description": "Exact brand name (case-insensitive).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "use_case",
            "in": "query",
            "required": false,
            "description": "Use-case tag, e.g. `humanoid`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "min_peak_torque_nm",
            "in": "query",
            "required": false,
            "description": "Minimum peak torque in N·m.",
            "schema": {
              "type": "number",
              "minimum": 0
            }
          },
          {
            "name": "max_weight_g",
            "in": "query",
            "required": false,
            "description": "Maximum mass in grams.",
            "schema": {
              "type": "number",
              "minimum": 0
            }
          },
          {
            "name": "max_price_usd",
            "in": "query",
            "required": false,
            "description": "Maximum list price in USD.",
            "schema": {
              "type": "number",
              "minimum": 0
            }
          },
          {
            "name": "backdrivable",
            "in": "query",
            "required": false,
            "description": "Only backdrivable (`true`) or non-backdrivable (`false`).",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "integrated_driver",
            "in": "query",
            "required": false,
            "description": "Only actuators with (`true`) or without an onboard driver.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Sort field (default: id).",
            "schema": {
              "type": "string",
              "enum": [
                "peak_torque_nm",
                "rated_torque_nm",
                "max_speed_rpm",
                "weight_g",
                "torque_density_nm_per_kg",
                "price_usd",
                "price_per_nm",
                "backlash_arcmin",
                "name"
              ]
            }
          },
          {
            "name": "order",
            "in": "query",
            "required": false,
            "description": "Sort direction (default desc when `sort` is set).",
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1 to 100 (default 25).",
            "schema": {
              "default": 25,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque `pagination.next_cursor` from the previous page.",
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActuatorList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400"
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    },
    "/api/v1/actuators/compare": {
      "get": {
        "operationId": "compare_actuators",
        "summary": "Fetch several actuators by id",
        "description": "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.",
        "tags": [
          "actuators"
        ],
        "parameters": [
          {
            "name": "ids",
            "in": "query",
            "required": true,
            "description": "Comma-separated actuator ids, 1 to 20, e.g. `a,b,c`.",
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompareResult"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400"
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      },
      "post": {
        "operationId": "compare_actuators_batch",
        "summary": "Fetch several actuators by id (JSON body)",
        "description": "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.",
        "tags": [
          "actuators"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompareRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompareResult"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400"
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "415": {
            "$ref": "#/components/responses/Problem415"
          },
          "422": {
            "$ref": "#/components/responses/Problem422"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    },
    "/api/v1/actuators/{id}": {
      "get": {
        "operationId": "get_actuator",
        "summary": "Get one actuator",
        "description": "Full specifications for one actuator, plus `robots_using`: the robots in the catalog whose joints use it.",
        "tags": [
          "actuators"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Actuator id (slug).",
            "schema": {
              "type": "string",
              "examples": [
                "robstride-02"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActuatorDetail"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/Problem404"
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    },
    "/api/v1/robots": {
      "get": {
        "operationId": "list_robots",
        "summary": "List robots",
        "description": "Robots (arms, humanoids, quadrupeds) in the catalog with headline specs. Cursor-paginated like `list_actuators`.",
        "tags": [
          "robots"
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Free-text search over name, brand, summary.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "description": "Exact brand name (case-insensitive).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1 to 100 (default 25).",
            "schema": {
              "default": 25,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque `pagination.next_cursor` from the previous page.",
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RobotList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem400"
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    },
    "/api/v1/robots/{id}": {
      "get": {
        "operationId": "get_robot",
        "summary": "Get one robot with its joint motors",
        "description": "One robot with every joint group resolved to its motor specs, linked to the matching catalog actuator when there is one.",
        "tags": [
          "robots"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Robot id (slug).",
            "schema": {
              "type": "string",
              "examples": [
                "i2rt-yam"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RobotDetail"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/Problem404"
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    },
    "/api/v1/categories": {
      "get": {
        "operationId": "list_categories",
        "summary": "List actuator categories",
        "description": "Every category slug with a label, description and actuator count.",
        "tags": [
          "taxonomy"
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryList"
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    },
    "/api/v1/brands": {
      "get": {
        "operationId": "list_brands",
        "summary": "List actuator brands",
        "description": "Every brand name (usable as the `brand` filter) with its actuator count.",
        "tags": [
          "taxonomy"
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NamedCountList"
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    },
    "/api/v1/use-cases": {
      "get": {
        "operationId": "list_use_cases",
        "summary": "List use-case tags",
        "description": "Every use-case tag (usable as the `use_case` filter) with its actuator count.",
        "tags": [
          "taxonomy"
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/API-Version"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NamedCountList"
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/Problem405"
          },
          "429": {
            "$ref": "#/components/responses/Problem429"
          },
          "500": {
            "$ref": "#/components/responses/Problem500"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Actuator": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Stable slug, e.g. `robstride-02`."
          },
          "name": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "qdd_proprioceptive",
              "integrated_joint",
              "smart_servo",
              "harmonic_precision",
              "frameless_driver",
              "cycloidal_premium"
            ]
          },
          "use_cases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "image_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Product image URL."
          },
          "product_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Manufacturer product page."
          },
          "datasheet_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Datasheet URL."
          },
          "price_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "List price in USD, when public."
          },
          "availability": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "in_production, discontinued, eol or unknown."
          },
          "peak_torque_nm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Peak torque in N·m."
          },
          "rated_torque_nm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rated (continuous) torque in N·m."
          },
          "max_speed_rpm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Max output speed in rpm."
          },
          "gear_ratio": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Gear ratio, e.g. `9:1`."
          },
          "weight_g": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Mass in grams."
          },
          "torque_density_nm_per_kg": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Peak torque divided by mass."
          },
          "backdrivable": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "backlash_arcmin": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Backlash in arc-minutes."
          },
          "repeatability_arcmin": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Repeatability in arc-minutes."
          },
          "voltage_v": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "Supply voltage (number) or range (string)."
          },
          "peak_current_a": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Peak current in A."
          },
          "power_w": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Power in W."
          },
          "kt_nm_per_a": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Torque constant in N·m/A."
          },
          "comm": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "null"
              }
            ],
            "description": "Bus protocols."
          },
          "control_modes": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "encoder": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Encoder description."
          },
          "integrated_driver": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "ip_rating": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Ingress protection rating."
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Free-text notes."
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Source URLs for the specs."
          },
          "price_per_nm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "price_usd divided by peak_torque_nm."
          },
          "data_source": {
            "type": "string"
          },
          "verified": {
            "type": "boolean",
            "description": "Specs spot-checked against a source."
          },
          "country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Manufacturer country."
          },
          "country_flag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Flag emoji for country."
          },
          "source_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Primary source URL."
          },
          "source_domain": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Domain of source_url."
          },
          "url": {
            "type": "string",
            "description": "Human-readable page on getactuators.com."
          },
          "api_url": {
            "type": "string",
            "description": "Canonical API URL of this resource."
          }
        },
        "required": [
          "id",
          "name",
          "brand",
          "category",
          "use_cases",
          "image_url",
          "product_url",
          "datasheet_url",
          "price_usd",
          "availability",
          "peak_torque_nm",
          "rated_torque_nm",
          "max_speed_rpm",
          "gear_ratio",
          "weight_g",
          "torque_density_nm_per_kg",
          "backdrivable",
          "backlash_arcmin",
          "repeatability_arcmin",
          "voltage_v",
          "peak_current_a",
          "power_w",
          "kt_nm_per_a",
          "comm",
          "control_modes",
          "encoder",
          "integrated_driver",
          "ip_rating",
          "notes",
          "sources",
          "price_per_nm",
          "data_source",
          "verified",
          "country",
          "country_flag",
          "source_url",
          "source_domain",
          "url",
          "api_url"
        ],
        "additionalProperties": false,
        "description": "A robot actuator with its published specifications."
      },
      "RobotRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "api_url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "brand",
          "url",
          "api_url"
        ],
        "additionalProperties": false
      },
      "ActuatorDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Stable slug, e.g. `robstride-02`."
          },
          "name": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "qdd_proprioceptive",
              "integrated_joint",
              "smart_servo",
              "harmonic_precision",
              "frameless_driver",
              "cycloidal_premium"
            ]
          },
          "use_cases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "image_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Product image URL."
          },
          "product_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Manufacturer product page."
          },
          "datasheet_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Datasheet URL."
          },
          "price_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "List price in USD, when public."
          },
          "availability": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "in_production, discontinued, eol or unknown."
          },
          "peak_torque_nm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Peak torque in N·m."
          },
          "rated_torque_nm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rated (continuous) torque in N·m."
          },
          "max_speed_rpm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Max output speed in rpm."
          },
          "gear_ratio": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Gear ratio, e.g. `9:1`."
          },
          "weight_g": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Mass in grams."
          },
          "torque_density_nm_per_kg": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Peak torque divided by mass."
          },
          "backdrivable": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "backlash_arcmin": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Backlash in arc-minutes."
          },
          "repeatability_arcmin": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Repeatability in arc-minutes."
          },
          "voltage_v": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "Supply voltage (number) or range (string)."
          },
          "peak_current_a": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Peak current in A."
          },
          "power_w": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Power in W."
          },
          "kt_nm_per_a": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Torque constant in N·m/A."
          },
          "comm": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "null"
              }
            ],
            "description": "Bus protocols."
          },
          "control_modes": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "encoder": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Encoder description."
          },
          "integrated_driver": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "ip_rating": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Ingress protection rating."
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Free-text notes."
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Source URLs for the specs."
          },
          "price_per_nm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "price_usd divided by peak_torque_nm."
          },
          "data_source": {
            "type": "string"
          },
          "verified": {
            "type": "boolean",
            "description": "Specs spot-checked against a source."
          },
          "country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Manufacturer country."
          },
          "country_flag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Flag emoji for country."
          },
          "source_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Primary source URL."
          },
          "source_domain": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Domain of source_url."
          },
          "url": {
            "type": "string",
            "description": "Human-readable page on getactuators.com."
          },
          "api_url": {
            "type": "string",
            "description": "Canonical API URL of this resource."
          },
          "robots_using": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RobotRef"
            },
            "description": "Robots in the catalog whose joints use this actuator."
          }
        },
        "required": [
          "id",
          "name",
          "brand",
          "category",
          "use_cases",
          "image_url",
          "product_url",
          "datasheet_url",
          "price_usd",
          "availability",
          "peak_torque_nm",
          "rated_torque_nm",
          "max_speed_rpm",
          "gear_ratio",
          "weight_g",
          "torque_density_nm_per_kg",
          "backdrivable",
          "backlash_arcmin",
          "repeatability_arcmin",
          "voltage_v",
          "peak_current_a",
          "power_w",
          "kt_nm_per_a",
          "comm",
          "control_modes",
          "encoder",
          "integrated_driver",
          "ip_rating",
          "notes",
          "sources",
          "price_per_nm",
          "data_source",
          "verified",
          "country",
          "country_flag",
          "source_url",
          "source_domain",
          "url",
          "api_url",
          "robots_using"
        ],
        "additionalProperties": false
      },
      "Joint": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "description": "Joint group, e.g. `Shoulder (J1-J3)`."
          },
          "count": {
            "type": "number",
            "description": "Number of joints in this group."
          },
          "motor": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "brand": {
                "type": "string"
              },
              "rated_torque_nm": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Rated torque in N·m."
              },
              "peak_torque_nm": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Peak torque in N·m."
              },
              "rated_speed_rpm": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Rated speed in rpm."
              },
              "gear_ratio": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Gear ratio."
              },
              "weight_g": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Mass in grams."
              },
              "torque_density_nm_per_kg": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Torque density."
              },
              "product_url": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Product page."
              },
              "actuator_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Catalog actuator id, when the motor is listed."
              },
              "actuator_api_url": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "API URL of the linked actuator, if any."
              }
            },
            "required": [
              "id",
              "name",
              "brand",
              "rated_torque_nm",
              "peak_torque_nm",
              "rated_speed_rpm",
              "gear_ratio",
              "weight_g",
              "torque_density_nm_per_kg",
              "product_url",
              "actuator_id",
              "actuator_api_url"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "role",
          "count",
          "motor"
        ],
        "additionalProperties": false
      },
      "Robot": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Manufacturer country."
          },
          "country_flag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Flag emoji."
          },
          "dof": {
            "type": "number",
            "description": "Degrees of freedom."
          },
          "payload_kg": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Payload in kg."
          },
          "reach_mm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Reach in mm."
          },
          "weight_kg": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Mass in kg."
          },
          "price_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Price (or lower bound) in USD."
          },
          "price_max_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Upper price bound in USD, if a range."
          },
          "product_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Product page."
          },
          "image_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Image URL."
          },
          "summary": {
            "type": "string"
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": "string"
          },
          "api_url": {
            "type": "string"
          },
          "joint_count": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "name",
          "brand",
          "country",
          "country_flag",
          "dof",
          "payload_kg",
          "reach_mm",
          "weight_kg",
          "price_usd",
          "price_max_usd",
          "product_url",
          "image_url",
          "summary",
          "sources",
          "url",
          "api_url",
          "joint_count"
        ],
        "additionalProperties": false,
        "description": "A robot."
      },
      "RobotDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Manufacturer country."
          },
          "country_flag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Flag emoji."
          },
          "dof": {
            "type": "number",
            "description": "Degrees of freedom."
          },
          "payload_kg": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Payload in kg."
          },
          "reach_mm": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Reach in mm."
          },
          "weight_kg": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Mass in kg."
          },
          "price_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Price (or lower bound) in USD."
          },
          "price_max_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Upper price bound in USD, if a range."
          },
          "product_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Product page."
          },
          "image_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Image URL."
          },
          "summary": {
            "type": "string"
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": "string"
          },
          "api_url": {
            "type": "string"
          },
          "joints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Joint"
            }
          }
        },
        "required": [
          "id",
          "name",
          "brand",
          "country",
          "country_flag",
          "dof",
          "payload_kg",
          "reach_mm",
          "weight_kg",
          "price_usd",
          "price_max_usd",
          "product_url",
          "image_url",
          "summary",
          "sources",
          "url",
          "api_url",
          "joints"
        ],
        "additionalProperties": false
      },
      "Pagination": {
        "type": "object",
        "properties": {
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page; null on the last page."
          },
          "has_more": {
            "type": "boolean"
          },
          "total": {
            "type": "number",
            "description": "Total matching items across all pages."
          }
        },
        "required": [
          "next_cursor",
          "has_more",
          "total"
        ],
        "additionalProperties": false
      },
      "ActuatorList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Actuator"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "data",
          "pagination"
        ],
        "additionalProperties": false
      },
      "RobotList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Robot"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "data",
          "pagination"
        ],
        "additionalProperties": false
      },
      "CompareResult": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "found": {
                  "type": "boolean"
                },
                "actuator": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/Actuator"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "found",
                "actuator"
              ],
              "additionalProperties": false
            }
          },
          "not_found": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Requested ids with no match."
          }
        },
        "required": [
          "data",
          "not_found"
        ],
        "additionalProperties": false
      },
      "CategoryList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slug": {
                  "type": "string",
                  "enum": [
                    "qdd_proprioceptive",
                    "integrated_joint",
                    "smart_servo",
                    "harmonic_precision",
                    "frameless_driver",
                    "cycloidal_premium"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "actuator_count": {
                  "type": "number"
                }
              },
              "required": [
                "slug",
                "label",
                "description",
                "actuator_count"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "data"
        ],
        "additionalProperties": false
      },
      "NamedCountList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "actuator_count": {
                  "type": "number"
                }
              },
              "required": [
                "name",
                "actuator_count"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "data"
        ],
        "additionalProperties": false
      },
      "ApiIndex": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "auth": {
            "type": "string"
          },
          "docs": {
            "type": "string"
          },
          "openapi": {
            "type": "string"
          },
          "mcp": {
            "type": "string"
          },
          "endpoints": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "method": {
                  "type": "string"
                },
                "path": {
                  "type": "string"
                },
                "summary": {
                  "type": "string"
                }
              },
              "required": [
                "method",
                "path",
                "summary"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "name",
          "version",
          "description",
          "auth",
          "docs",
          "openapi",
          "mcp",
          "endpoints"
        ],
        "additionalProperties": false
      },
      "OpenApiDocument": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {},
        "description": "An OpenAPI 3.1 document."
      },
      "Problem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "URI identifying the problem type."
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "number"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "description": "Stable machine-readable error code."
          },
          "hint": {
            "description": "How to fix the request.",
            "type": "string"
          },
          "instance": {
            "description": "Request path.",
            "type": "string"
          },
          "docs": {
            "type": "string",
            "description": "Documentation link."
          },
          "errors": {
            "description": "Per-field validation errors.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              },
              "required": [
                "field",
                "message"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "code",
          "docs"
        ],
        "additionalProperties": false,
        "description": "RFC 9457 problem details (application/problem+json)."
      },
      "CompareRequest": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "description": "Actuator ids to fetch (1 to 20)."
          }
        },
        "required": [
          "ids"
        ],
        "additionalProperties": false
      }
    },
    "responses": {
      "Problem400": {
        "description": "Problem details; `code` is one of: invalid_parameter, invalid_cursor, invalid_json.",
        "headers": {},
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      },
      "Problem404": {
        "description": "Problem details; `code` is one of: not_found, unknown_endpoint.",
        "headers": {},
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      },
      "Problem405": {
        "description": "Problem details; `code` is one of: method_not_allowed.",
        "headers": {
          "Allow": {
            "$ref": "#/components/headers/Allow"
          }
        },
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      },
      "Problem415": {
        "description": "Problem details; `code` is one of: unsupported_media_type.",
        "headers": {},
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      },
      "Problem422": {
        "description": "Problem details; `code` is one of: validation_failed.",
        "headers": {},
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      },
      "Problem429": {
        "description": "Problem details; `code` is one of: rate_limited.",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          }
        },
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      },
      "Problem500": {
        "description": "Problem details; `code` is one of: internal_error.",
        "headers": {},
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      }
    },
    "headers": {
      "API-Version": {
        "description": "Major API version that served the request.",
        "schema": {
          "type": "string"
        }
      },
      "RateLimit": {
        "description": "Remaining quota and reset, e.g. `\"default\";r=119;t=42`.",
        "schema": {
          "type": "string"
        }
      },
      "RateLimit-Policy": {
        "description": "Quota policy: `\"default\";q=120;w=60`.",
        "schema": {
          "type": "string"
        }
      },
      "X-RateLimit-Limit": {
        "description": "Requests allowed per window.",
        "schema": {
          "type": "integer"
        }
      },
      "X-RateLimit-Remaining": {
        "description": "Requests left in the current window.",
        "schema": {
          "type": "integer"
        }
      },
      "X-RateLimit-Reset": {
        "description": "Seconds until the window resets.",
        "schema": {
          "type": "integer"
        }
      },
      "Retry-After": {
        "description": "Seconds to wait before retrying.",
        "schema": {
          "type": "integer"
        }
      },
      "Allow": {
        "description": "Methods supported by this path.",
        "schema": {
          "type": "string"
        }
      }
    },
    "parameters": {
      "IdempotencyKey": {
        "name": "Idempotency-Key",
        "in": "header",
        "required": false,
        "description": "Accepted for client compatibility; unnecessary because every operation is read-only and safe to retry.",
        "schema": {
          "type": "string",
          "maxLength": 255
        }
      }
    },
    "securitySchemes": {}
  },
  "x-authentication": {
    "required": false,
    "description": "No authentication. All operations are public and read-only."
  },
  "x-rate-limit": {
    "limit": 120,
    "window_seconds": 60,
    "scope": "client IP (first X-Forwarded-For hop)",
    "headers": [
      "RateLimit",
      "RateLimit-Policy",
      "X-RateLimit-Limit",
      "X-RateLimit-Remaining",
      "X-RateLimit-Reset",
      "Retry-After"
    ]
  },
  "x-mcp-server": "https://getactuators.com/mcp"
}