{
  "openapi": "3.1.0",
  "info": {
    "title": "Hyperspawn registry API",
    "version": "1.0.0",
    "summary": "Robot registry, build packages, sourcing and intake for the Hyperspawn suite.",
    "description": "Read endpoints are public, CORS-open and CDN-cached. Unknown facts are absent, never estimated. Every error is { error, code, status, details? }. The same data is available to LLM agents over MCP (streamable HTTP) at /mcp.",
    "license": {
      "name": "Data per robot: see each robot's sources and license fields"
    }
  },
  "servers": [
    {
      "url": "https://hyperspawn.io"
    }
  ],
  "externalDocs": {
    "description": "Docs",
    "url": "https://hyperspawn.io/docs"
  },
  "tags": [
    {
      "name": "registry",
      "description": "Robots, packages, sourcing, compare, places, levels"
    },
    {
      "name": "builds",
      "description": "Verified builds: build reports approved by a human reviewer"
    },
    {
      "name": "intel",
      "description": "Curated industry intelligence: companies, robot brains, timeline, events. Every fact sourced."
    },
    {
      "name": "feeds",
      "description": "Live news, papers and official videos. Cached 30 minutes; each upstream's status is reported."
    },
    {
      "name": "intake",
      "description": "Submissions for human review. Never auto-published."
    },
    {
      "name": "training",
      "description": "GPU training jobs for humanoids: queue, worker protocol, artifacts. Jobs wait until a GPU worker claims them."
    }
  ],
  "paths": {
    "/api/v1/robots": {
      "get": {
        "operationId": "listRobots",
        "summary": "List robots",
        "description": "Every robot in the registry, open and closed. Filter by class, openness facets, verb state and text.",
        "tags": [
          "registry"
        ],
        "parameters": [
          {
            "name": "class",
            "in": "query",
            "required": false,
            "description": "Comma list: humanoid, wheeled-humanoid, biped, arm, quadruped, rover, gripper, hand",
            "schema": {
              "type": "string"
            },
            "example": "humanoid"
          },
          {
            "name": "open",
            "in": "query",
            "required": false,
            "description": "Comma list of facets that must all be public: cad, bom, firmware, sim, policies, software. `any` = at least one.",
            "schema": {
              "type": "string"
            },
            "example": "cad,bom"
          },
          {
            "name": "verb",
            "in": "query",
            "required": false,
            "description": "know | build | train | crew | map. Matches live or partial; add :live, :partial or :closed for one state.",
            "schema": {
              "type": "string"
            },
            "example": "build"
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Text match on name, id, maker, tags, summary",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1-200, default 50",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "default 0",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Page of RobotSummary. X-Total-Count header carries the total.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RobotList"
                }
              }
            }
          },
          "400": {
            "description": "Unknown class, facet or verb",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/robots/{org}/{slug}": {
      "get": {
        "operationId": "getRobot",
        "summary": "Get a robot",
        "description": "The full registry record with sources, openness score, level, and links to the same robot on every verb domain.",
        "tags": [
          "registry"
        ],
        "parameters": [
          {
            "name": "org",
            "in": "path",
            "required": true,
            "description": "Organisation slug",
            "schema": {
              "type": "string"
            },
            "example": "hyperspawn"
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Robot slug",
            "schema": {
              "type": "string"
            },
            "example": "dropbear"
          }
        ],
        "responses": {
          "200": {
            "description": "RobotDetail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RobotDetail"
                }
              }
            }
          },
          "404": {
            "description": "Unknown robot. details.suggestions lists near matches.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/robots/{org}/{slug}/package": {
      "get": {
        "operationId": "getPackage",
        "summary": "Get the build package",
        "description": "BOM, fabrication parts, assembly step graph, firmware and policies, plus computed totals. Safety-critical steps are listed in computed.safetySteps.",
        "tags": [
          "registry"
        ],
        "parameters": [
          {
            "name": "org",
            "in": "path",
            "required": true,
            "description": "Organisation slug",
            "schema": {
              "type": "string"
            },
            "example": "hyperspawn"
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Robot slug",
            "schema": {
              "type": "string"
            },
            "example": "dropbear"
          }
        ],
        "responses": {
          "200": {
            "description": "BuildPackage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BuildPackage"
                }
              }
            }
          },
          "404": {
            "description": "Unknown robot, or code=no_build_package when none is compiled yet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/robots/{org}/{slug}/sourcing": {
      "get": {
        "operationId": "getSourcing",
        "summary": "Resolve sourcing for a region",
        "description": "Resolves each BOM line to the cheapest priced offer in the region (GLOBAL offers count everywhere). Lines without a price come back in `unpriced`, never dropped.",
        "tags": [
          "registry"
        ],
        "parameters": [
          {
            "name": "org",
            "in": "path",
            "required": true,
            "description": "Organisation slug",
            "schema": {
              "type": "string"
            },
            "example": "hyperspawn"
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Robot slug",
            "schema": {
              "type": "string"
            },
            "example": "dropbear"
          },
          {
            "name": "region",
            "in": "query",
            "required": false,
            "description": "Default US",
            "schema": {
              "type": "string",
              "enum": [
                "IN",
                "US",
                "EU",
                "CN"
              ]
            },
            "example": "IN"
          }
        ],
        "responses": {
          "200": {
            "description": "Sourcing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sourcing"
                }
              }
            }
          },
          "400": {
            "description": "Bad region",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown robot or no build package",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/search": {
      "get": {
        "operationId": "search",
        "summary": "Search",
        "description": "Ranked text search across the registry. Every token must match.",
        "tags": [
          "registry"
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Query, up to 200 chars",
            "schema": {
              "type": "string"
            },
            "example": "unitree"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1-100, default 20",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "SearchResult",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResult"
                }
              }
            }
          },
          "400": {
            "description": "Missing q",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/compare": {
      "get": {
        "operationId": "compare",
        "summary": "Compare robots",
        "description": "Side-by-side specs, openness facets, levels and verb states for 2 to 6 robots. null means not published.",
        "tags": [
          "registry"
        ],
        "parameters": [
          {
            "name": "ids",
            "in": "query",
            "required": true,
            "description": "Comma list of robot ids",
            "schema": {
              "type": "string"
            },
            "example": "unitree/g1,unitree/h1"
          }
        ],
        "responses": {
          "200": {
            "description": "Comparison",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Comparison"
                }
              }
            }
          },
          "400": {
            "description": "Fewer than 2 or more than 6 ids",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Unknown id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/places": {
      "get": {
        "operationId": "places",
        "summary": "List places",
        "description": "Makers, labs, build sites and spaces with coordinates. verified=true only for reviewed build reports.",
        "tags": [
          "registry"
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "Filter by kind",
            "schema": {
              "type": "string",
              "enum": [
                "maker",
                "lab",
                "build",
                "space"
              ]
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO 3166 alpha-2",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "robot",
            "in": "query",
            "required": false,
            "description": "Robot id",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "verified",
            "in": "query",
            "required": false,
            "description": "true | false",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PlaceList",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlaceList"
                }
              }
            }
          },
          "400": {
            "description": "Unknown kind",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/levels": {
      "get": {
        "operationId": "levels",
        "summary": "Verification ladder",
        "description": "L0 Indexed to L5 Certified, the gate for each, and how many robots sit at each level.",
        "tags": [
          "registry"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Levels",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Levels"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/openness/{org}/{slug}": {
      "get": {
        "operationId": "openness",
        "summary": "Openness breakdown",
        "description": "The computed 0-100 openness score with per-facet weights, licenses, models and repos.",
        "tags": [
          "registry"
        ],
        "parameters": [
          {
            "name": "org",
            "in": "path",
            "required": true,
            "description": "Organisation slug",
            "schema": {
              "type": "string"
            },
            "example": "hyperspawn"
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Robot slug",
            "schema": {
              "type": "string"
            },
            "example": "dropbear"
          }
        ],
        "responses": {
          "200": {
            "description": "Openness",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpennessBreakdown"
                }
              }
            }
          },
          "404": {
            "description": "Unknown robot. details.suggestions lists near matches.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/builds": {
      "get": {
        "operationId": "listBuilds",
        "summary": "List verified builds",
        "description": "Build reports a person reviewed and approved: robot, builder display name, city, country, city-centre geo, photos, date. No emails or contacts, never a street address. Newest first.",
        "tags": [
          "builds"
        ],
        "parameters": [
          {
            "name": "robot",
            "in": "query",
            "required": false,
            "description": "Robot id org/slug",
            "schema": {
              "type": "string"
            },
            "example": "hyperspawn/dropbear"
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO 3166 alpha-2",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "builder",
            "in": "query",
            "required": false,
            "description": "Builder handle (slug of the display name)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1-1000, default 500",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "BuildList. X-Total-Count header carries the total.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BuildList"
                }
              }
            }
          },
          "400": {
            "description": "Bad country",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Build storage not configured",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/builds/{org}/{slug}": {
      "get": {
        "operationId": "robotBuilds",
        "summary": "Verified builds of a robot",
        "description": "Approved build reports for one robot. The count is the L4 Built evidence for its package.",
        "tags": [
          "builds"
        ],
        "parameters": [
          {
            "name": "org",
            "in": "path",
            "required": true,
            "description": "Organisation slug",
            "schema": {
              "type": "string"
            },
            "example": "hyperspawn"
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Robot slug",
            "schema": {
              "type": "string"
            },
            "example": "dropbear"
          }
        ],
        "responses": {
          "200": {
            "description": "RobotBuilds",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RobotBuilds"
                }
              }
            }
          },
          "404": {
            "description": "Unknown robot. details.suggestions lists near matches.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Build storage not configured",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/companies": {
      "get": {
        "operationId": "listCompanies",
        "summary": "List companies",
        "description": "Humanoid and robot makers, robot foundation-model companies, research labs, platforms and component makers. Funding, last round and valuation appear only with a dated source URL.",
        "tags": [
          "intel"
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "Comma list: humanoid-maker, robot-maker, foundation-model, component, research-lab, platform",
            "schema": {
              "type": "string"
            },
            "example": "foundation-model"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Comma list: active, acquired, shut-down",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "Comma list of ISO 3166 alpha-2",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "robot",
            "in": "query",
            "required": false,
            "description": "Robot id org/slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "funded",
            "in": "query",
            "required": false,
            "description": "true = has sourced funding or valuation",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Text match on name, summary, city, tags",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "CompanyList",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyList"
                }
              }
            }
          },
          "400": {
            "description": "Unknown kind or status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/companies/{id}": {
      "get": {
        "operationId": "getCompany",
        "summary": "Get a company",
        "description": "One company with its robots, brain models, timeline events and links to its filtered news, video and paper feeds.",
        "tags": [
          "intel"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Company id (usually the registry org)",
            "schema": {
              "type": "string"
            },
            "example": "unitree"
          }
        ],
        "responses": {
          "200": {
            "description": "CompanyDetail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyDetail"
                }
              }
            }
          },
          "404": {
            "description": "Unknown company. details.suggestions lists near matches.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/models": {
      "get": {
        "operationId": "listModels",
        "summary": "List robot brains",
        "description": "Robot foundation models: VLAs, world models, locomotion and whole-body controllers. Openness, license, embodiments and verified links to paper, code and weights.",
        "tags": [
          "intel"
        ],
        "parameters": [
          {
            "name": "company",
            "in": "query",
            "required": false,
            "description": "Company id",
            "schema": {
              "type": "string"
            },
            "example": "nvidia"
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "Comma list: vla, world-model, locomotion, wbc, vlm, other",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "open",
            "in": "query",
            "required": false,
            "description": "Comma list: open-weights, open-code, api, closed",
            "schema": {
              "type": "string"
            },
            "example": "open-weights"
          },
          {
            "name": "embodiment",
            "in": "query",
            "required": false,
            "description": "Substring match on embodiments, e.g. g1, aloha",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Text match",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ModelList",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelList"
                }
              }
            }
          },
          "400": {
            "description": "Unknown kind or open value",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/timeline": {
      "get": {
        "operationId": "timeline",
        "summary": "Industry timeline",
        "description": "Dated, sourced events in humanoid and open robotics history: robots, companies, funding, research and open-source releases.",
        "tags": [
          "intel"
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "Comma list: robot, company, funding, research, open-source, policy, milestone",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "robot",
            "in": "query",
            "required": false,
            "description": "Robot id org/slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "company",
            "in": "query",
            "required": false,
            "description": "Company id",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "YYYY, YYYY-MM or YYYY-MM-DD (inclusive)",
            "schema": {
              "type": "string"
            },
            "example": "2024"
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "YYYY, YYYY-MM or YYYY-MM-DD (inclusive)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "order",
            "in": "query",
            "required": false,
            "description": "Default asc",
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Text match on title and body",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Timeline",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Timeline"
                }
              }
            }
          },
          "400": {
            "description": "Bad date, kind or order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/events": {
      "get": {
        "operationId": "events",
        "summary": "Conferences and competitions",
        "description": "Robotics conferences, competitions and expos with dates, city and coordinates. Default: upcoming and live, soonest first.",
        "tags": [
          "intel"
        ],
        "parameters": [
          {
            "name": "when",
            "in": "query",
            "required": false,
            "description": "Default upcoming (includes live)",
            "schema": {
              "type": "string",
              "enum": [
                "upcoming",
                "past",
                "all"
              ]
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "Comma list: conference, competition, expo, meetup, hackathon",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "Comma list of ISO 3166 alpha-2",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "query",
            "required": false,
            "description": "Start year",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Text match on name and city",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "EventList",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventList"
                }
              }
            }
          },
          "400": {
            "description": "Bad when, kind or year",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/news": {
      "get": {
        "operationId": "news",
        "summary": "Robotics news feed",
        "description": "Live: robotics outlets' RSS (The Robot Report, IEEE Spectrum, Humanoids Daily, Robohub, TechCrunch, and more) plus Brave News search, deduped and tagged with registry robot, company and model ids. Headline, source, date, link and a short text summary; no images. Cached 30 minutes; failed sources are listed, never fatal.",
        "tags": [
          "feeds"
        ],
        "parameters": [
          {
            "name": "robot",
            "in": "query",
            "required": false,
            "description": "Robot id tag",
            "schema": {
              "type": "string"
            },
            "example": "unitree/g1"
          },
          {
            "name": "company",
            "in": "query",
            "required": false,
            "description": "Company id tag",
            "schema": {
              "type": "string"
            },
            "example": "figure"
          },
          {
            "name": "model",
            "in": "query",
            "required": false,
            "description": "Brain model id tag",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "description": "Substring of the outlet name or host, or rss / brave-news",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "ISO date or datetime",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Text match on title and summary",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1-100, default 30",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "default 0",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "NewsList. sources[] reports each upstream's status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NewsList"
                }
              }
            }
          },
          "400": {
            "description": "Bad robot id or since",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/papers": {
      "get": {
        "operationId": "papers",
        "summary": "Recent robotics papers",
        "description": "Live from the arXiv API: newest cs.RO papers on humanoids, legged locomotion, whole-body control, VLAs, dexterous manipulation and sim-to-real, tagged with registry ids. Cached 30 minutes.",
        "tags": [
          "feeds"
        ],
        "parameters": [
          {
            "name": "robot",
            "in": "query",
            "required": false,
            "description": "Robot id tag",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "company",
            "in": "query",
            "required": false,
            "description": "Company id tag",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "model",
            "in": "query",
            "required": false,
            "description": "Brain model id tag",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "description": "arXiv category substring, e.g. cs.cv",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "ISO date",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Text match on title, abstract, authors",
            "schema": {
              "type": "string"
            },
            "example": "humanoid"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1-100, default 30",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "default 0",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PaperList",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaperList"
                }
              }
            }
          },
          "400": {
            "description": "Bad robot id or since",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/videos": {
      "get": {
        "operationId": "videos",
        "summary": "Official maker videos",
        "description": "Live from official maker YouTube channels (channel RSS). Returns video ids with embed and watch URLs, tagged with registry ids. Cached 30 minutes.",
        "tags": [
          "feeds"
        ],
        "parameters": [
          {
            "name": "company",
            "in": "query",
            "required": false,
            "description": "Company id (channel owner or tag)",
            "schema": {
              "type": "string"
            },
            "example": "unitree"
          },
          {
            "name": "robot",
            "in": "query",
            "required": false,
            "description": "Robot id tag",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "model",
            "in": "query",
            "required": false,
            "description": "Brain model id tag",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "description": "Channel name substring",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "ISO date",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Text match on title and description",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1-100, default 24",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "default 0",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "VideoList",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoList"
                }
              }
            }
          },
          "400": {
            "description": "Bad robot id or since",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/reports": {
      "post": {
        "operationId": "postReport",
        "summary": "Submit a report",
        "description": "build-report, correction, training-run, bounty-claim, robot (propose a robot for the registry). Stored privately for human review; nothing public changes until reviewed.",
        "tags": [
          "intake"
        ],
        "parameters": [],
        "responses": {
          "201": {
            "description": "Stored. Returns the submission id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntakeReceipt"
                }
              }
            }
          },
          "400": {
            "description": "Invalid JSON or validation failed. details.issues lists each field.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over 64 KB",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type is not application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited. details.retryAfterSeconds says when to retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Storage write failed. Nothing was stored.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Intake storage not configured. Nothing was stored.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntakeRequest"
              },
              "example": {
                "kind": "correction",
                "robot": "unitree/g1",
                "message": "DOF is 23 in the base config",
                "url": "https://www.unitree.com/g1"
              }
            }
          }
        }
      }
    },
    "/api/v1/requests": {
      "post": {
        "operationId": "postRequest",
        "summary": "Submit a request",
        "description": "crew-request, team-application, contact, careers, investor. contact, careers, investor and team-application require email.",
        "tags": [
          "intake"
        ],
        "parameters": [],
        "responses": {
          "201": {
            "description": "Stored. Returns the submission id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntakeReceipt"
                }
              }
            }
          },
          "400": {
            "description": "Invalid JSON or validation failed. details.issues lists each field.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Body over 64 KB",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type is not application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited. details.retryAfterSeconds says when to retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Storage write failed. Nothing was stored.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Intake storage not configured. Nothing was stored.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntakeRequest"
              },
              "example": {
                "kind": "crew-request",
                "robot": "hyperspawn/dropbear",
                "city": "Pune",
                "country": "IN",
                "message": "Need help with actuator bring-up"
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs": {
      "get": {
        "operationId": "listJobs",
        "summary": "GPU training queue",
        "description": "Recent training jobs (public fields) and the GPU workers that polled in the last 2 minutes. A job is queued until a worker claims it; nothing here is simulated.",
        "tags": [
          "training"
        ],
        "parameters": [
          {
            "name": "robot",
            "in": "query",
            "required": false,
            "description": "Only jobs for this robot",
            "schema": {
              "type": "string"
            },
            "example": "unitree/g1"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1-50, default 20",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "{ workers, jobs[], storage }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobList"
                }
              }
            }
          },
          "503": {
            "description": "Job storage not configured",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createJob",
        "summary": "Queue a GPU training job",
        "description": "Humanoids with a sim model only. task: stand | walk | push | imitate (imitate needs a motion library retargeted to the robot). backend: mjlab | isaaclab. Returns the job id and a cancel token. It runs when a GPU worker (hs-train-worker) claims it.",
        "tags": [
          "training"
        ],
        "parameters": [],
        "responses": {
          "201": {
            "description": "Queued. Returns id, spec, cancelToken, url, page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobReceipt"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed (unknown robot, not a humanoid, task not available for it)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited (6 jobs per hour per address)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Job storage not configured. Nothing was stored.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobRequest"
              },
              "example": {
                "robot": "unitree/g1",
                "task": "stand",
                "backend": "mjlab",
                "hyperparams": {
                  "numEnvs": 4096,
                  "maxIterations": 1500,
                  "seed": 42
                },
                "budget": {
                  "gpuMinutes": 30
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{id}": {
      "get": {
        "operationId": "getJob",
        "summary": "One training job",
        "description": "Spec, status, queue position, worker, metric points reported by the worker, log tail, and artifact URLs (policy.onnx, contract.json, eval.json, eval.mp4).",
        "tags": [
          "training"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Job id",
            "schema": {
              "type": "string"
            },
            "example": "20261011T095226-cd52484da6cdb656"
          }
        ],
        "responses": {
          "200": {
            "description": "Job",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Job"
                }
              }
            }
          },
          "404": {
            "description": "No such job",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "workerProgress",
        "summary": "Worker: report progress",
        "description": "Heartbeat (renews a 5-minute lease), progress, metric points, log lines, final status (succeeded | failed). Answers cancel: true once the creator canceled.",
        "tags": [
          "training"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Job id",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "{ ok, status, cancel }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobAck"
                }
              }
            }
          },
          "401": {
            "description": "Missing or wrong worker token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Not this worker's job, or the job is finished",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "workerToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobPatch"
              },
              "example": {
                "progress": {
                  "iteration": 120,
                  "maxIterations": 1500,
                  "elapsedS": 300
                },
                "metrics": [
                  {
                    "t": 300,
                    "it": 120,
                    "reward": 12.4,
                    "episodeS": 8.1,
                    "fps": 98000
                  }
                ],
                "log": [
                  "iteration 120"
                ]
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/next": {
      "get": {
        "operationId": "workerNext",
        "summary": "Worker: claim the next job",
        "description": "For GPU workers. Claims the oldest queued job matching X-Worker-Backends (atomic, one worker per job) and returns it; 204 when the queue is empty. Polling also marks the worker online.",
        "tags": [
          "training"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "{ job: { id, spec } }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobClaim"
                }
              }
            }
          },
          "204": {
            "description": "Queue empty",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobClaim"
                }
              }
            }
          },
          "401": {
            "description": "Missing or wrong worker token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "workerToken": []
          }
        ]
      }
    },
    "/api/v1/jobs/{id}/artifacts": {
      "post": {
        "operationId": "workerArtifact",
        "summary": "Worker: upload an artifact",
        "description": "Raw body, ?name=policy.onnx | contract.json | eval.json | eval.mp4 | metrics.csv. Max 4 MB. Stored privately; served at GET /api/v1/jobs/{id}/artifacts/{name}.",
        "tags": [
          "training"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Job id",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "File name",
            "schema": {
              "type": "string"
            },
            "example": "policy.onnx"
          }
        ],
        "responses": {
          "201": {
            "description": "{ ok, artifact }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArtifactReceipt"
                }
              }
            }
          },
          "401": {
            "description": "Missing or wrong worker token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Over 4 MB",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "workerToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Human-readable message"
          },
          "code": {
            "type": "string",
            "enum": [
              "bad_request",
              "validation_failed",
              "not_found",
              "no_build_package",
              "method_not_allowed",
              "payload_too_large",
              "unsupported_media_type",
              "rate_limited",
              "storage_not_configured",
              "storage_failed",
              "internal"
            ]
          },
          "status": {
            "type": "integer"
          },
          "details": {
            "description": "Code-specific context, e.g. suggestions or validation issues"
          }
        },
        "required": [
          "error",
          "code",
          "status"
        ]
      },
      "Source": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          },
          "label": {
            "type": "string"
          },
          "checked": {
            "type": "string",
            "format": "date"
          }
        },
        "required": [
          "url",
          "label"
        ]
      },
      "Specs": {
        "type": "object",
        "properties": {
          "heightCm": {
            "type": "number"
          },
          "massKg": {
            "type": "number"
          },
          "dof": {
            "type": "integer"
          },
          "payloadKg": {
            "type": "number"
          },
          "speedMps": {
            "type": "number"
          },
          "runtimeMin": {
            "type": "number"
          },
          "batteryWh": {
            "type": "number"
          },
          "priceUsd": {
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "priceNote": {
            "type": "string"
          },
          "actuators": {
            "type": "string"
          },
          "compute": {
            "type": "string"
          },
          "sensors": {
            "type": "string"
          }
        }
      },
      "Openness": {
        "type": "object",
        "properties": {
          "cad": {
            "type": "boolean"
          },
          "bom": {
            "type": "boolean"
          },
          "sim": {
            "type": "boolean"
          },
          "firmware": {
            "type": "boolean"
          },
          "software": {
            "type": "boolean"
          },
          "policies": {
            "type": "boolean"
          }
        },
        "required": [
          "cad",
          "bom",
          "sim",
          "firmware",
          "software",
          "policies"
        ]
      },
      "Verbs": {
        "type": "object",
        "properties": {
          "know": {
            "type": "string",
            "enum": [
              "live",
              "partial",
              "closed"
            ]
          },
          "build": {
            "type": "string",
            "enum": [
              "live",
              "partial",
              "closed"
            ]
          },
          "train": {
            "type": "string",
            "enum": [
              "live",
              "partial",
              "closed"
            ]
          },
          "crew": {
            "type": "string",
            "enum": [
              "live",
              "partial",
              "closed"
            ]
          },
          "map": {
            "type": "string",
            "enum": [
              "live",
              "partial",
              "closed"
            ]
          }
        },
        "required": [
          "know",
          "build",
          "train",
          "crew",
          "map"
        ]
      },
      "RobotSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "hyperspawn/dropbear"
            ]
          },
          "org": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "maker": {
            "type": "string"
          },
          "class": {
            "type": "string",
            "enum": [
              "humanoid",
              "wheeled-humanoid",
              "biped",
              "arm",
              "quadruped",
              "rover",
              "gripper",
              "hand"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "orphaned",
              "discontinued",
              "announced",
              "research"
            ]
          },
          "country": {
            "type": "string",
            "description": "ISO 3166 alpha-2"
          },
          "availability": {
            "type": "string",
            "enum": [
              "kit",
              "buy",
              "diy",
              "research-only",
              "not-for-sale",
              "preorder"
            ]
          },
          "level": {
            "type": "integer"
          },
          "openness": {
            "type": "integer"
          },
          "verbs": {
            "$ref": "#/components/schemas/Verbs"
          },
          "hasBuildPackage": {
            "type": "boolean"
          },
          "href": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "id",
          "org",
          "slug",
          "name",
          "maker",
          "class",
          "status",
          "country",
          "availability",
          "level",
          "openness",
          "verbs",
          "hasBuildPackage",
          "href"
        ]
      },
      "RobotList": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer"
          },
          "offset": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "filters": {
            "type": "object",
            "properties": {
              "class": {
                "oneOf": [
                  {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "open": {
                "oneOf": [
                  {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "verb": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "q": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RobotSummary"
            }
          }
        },
        "required": [
          "total",
          "offset",
          "limit",
          "items"
        ]
      },
      "RobotDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "org": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "maker": {
            "type": "string"
          },
          "class": {
            "type": "string",
            "enum": [
              "humanoid",
              "wheeled-humanoid",
              "biped",
              "arm",
              "quadruped",
              "rover",
              "gripper",
              "hand"
            ]
          },
          "status": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "geo": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "year": {
            "type": "integer"
          },
          "summary": {
            "type": "string"
          },
          "specs": {
            "$ref": "#/components/schemas/Specs"
          },
          "availability": {
            "type": "string"
          },
          "license": {
            "type": "object",
            "properties": {
              "hw": {
                "type": "string"
              },
              "sw": {
                "type": "string"
              }
            }
          },
          "openness": {
            "$ref": "#/components/schemas/Openness"
          },
          "opennessScore": {
            "type": "integer"
          },
          "models": {
            "type": "object",
            "properties": {
              "urdf": {
                "type": "string"
              },
              "mjcf": {
                "type": "string"
              },
              "usd": {
                "type": "string"
              },
              "menagerie": {
                "type": "string"
              }
            }
          },
          "repos": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "links": {
            "type": "object",
            "properties": {
              "site": {
                "type": "string"
              },
              "buy": {
                "type": "string"
              },
              "docs": {
                "type": "string"
              },
              "video": {
                "type": "string"
              }
            }
          },
          "level": {
            "type": "object",
            "properties": {
              "level": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "gate": {
                "type": "string"
              }
            },
            "required": [
              "level",
              "name",
              "gate"
            ]
          },
          "verbs": {
            "$ref": "#/components/schemas/Verbs"
          },
          "verbNotes": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            }
          },
          "note": {
            "type": "string"
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Source"
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "hasBuildPackage": {
            "type": "boolean"
          },
          "suite": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "verb": {
                  "type": "string"
                },
                "domain": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "live",
                    "partial",
                    "closed"
                  ]
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "api": {
            "type": "object",
            "properties": {
              "self": {
                "type": "string"
              },
              "package": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "sourcing": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "openness": {
                "type": "string"
              }
            }
          }
        },
        "required": [
          "id",
          "org",
          "slug",
          "name",
          "maker",
          "class",
          "status",
          "country",
          "summary",
          "specs",
          "availability",
          "openness",
          "opennessScore",
          "repos",
          "links",
          "level",
          "verbs",
          "sources"
        ]
      },
      "Offer": {
        "type": "object",
        "properties": {
          "vendor": {
            "type": "string"
          },
          "region": {
            "type": "string",
            "enum": [
              "IN",
              "US",
              "EU",
              "CN",
              "GLOBAL"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "priceUsd": {
            "type": "number"
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "vendor",
          "region"
        ]
      },
      "BomLine": {
        "type": "object",
        "properties": {
          "part": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "actuator",
              "electronics",
              "structure",
              "fastener",
              "power",
              "compute",
              "sensor",
              "printed",
              "cable",
              "other"
            ]
          },
          "qty": {
            "type": "number"
          },
          "mpn": {
            "type": "string"
          },
          "unitUsd": {
            "type": "number"
          },
          "offers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Offer"
            }
          },
          "alts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "source": {
            "type": "string"
          }
        },
        "required": [
          "part",
          "name",
          "category",
          "qty"
        ]
      },
      "FabPart": {
        "type": "object",
        "properties": {
          "part": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "process": {
            "type": "string",
            "enum": [
              "fdm",
              "sla",
              "sls",
              "cnc",
              "laser",
              "sheet"
            ]
          },
          "material": {
            "type": "string"
          },
          "qty": {
            "type": "number"
          },
          "printHours": {
            "type": "number"
          },
          "grams": {
            "type": "number"
          },
          "profile": {
            "type": "string"
          },
          "source": {
            "type": "string"
          }
        },
        "required": [
          "part",
          "name",
          "process",
          "material",
          "qty"
        ]
      },
      "Step": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "group": {
            "type": "string"
          },
          "partsIn": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tools": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "torqueNm": {
            "type": "number"
          },
          "minutes": {
            "type": "number"
          },
          "body": {
            "type": "string"
          },
          "check": {
            "type": "string"
          },
          "safety": {
            "type": "boolean"
          },
          "dependsOn": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "source": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "group",
          "partsIn",
          "body",
          "check"
        ]
      },
      "BuildPackage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "bom": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BomLine"
            }
          },
          "fabricate": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FabPart"
            }
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Step"
            }
          },
          "firmware": {
            "type": "object",
            "properties": {
              "targets": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "repo": {
                "type": "string"
              },
              "calibrate": {
                "type": "string"
              },
              "notes": {
                "type": "string"
              }
            }
          },
          "policies": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "task": {
                  "type": "string"
                },
                "file": {
                  "type": "string"
                },
                "framework": {
                  "type": "string"
                },
                "source": {
                  "type": "string"
                }
              }
            }
          },
          "caveats": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Source"
            }
          },
          "computed": {
            "type": "object",
            "properties": {
              "bom": {
                "type": "object",
                "properties": {
                  "usd": {
                    "type": "number"
                  },
                  "priced": {
                    "type": "integer"
                  },
                  "lines": {
                    "type": "integer"
                  }
                }
              },
              "fabricateParts": {
                "type": "integer"
              },
              "printHours": {
                "oneOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "steps": {
                "type": "integer"
              },
              "safetySteps": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        },
        "required": [
          "id",
          "version",
          "bom",
          "fabricate",
          "steps",
          "sources",
          "computed"
        ]
      },
      "Sourcing": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "region": {
            "type": "string",
            "enum": [
              "IN",
              "US",
              "EU",
              "CN"
            ]
          },
          "totals": {
            "type": "object",
            "properties": {
              "lines": {
                "type": "integer"
              },
              "resolvedLines": {
                "type": "integer"
              },
              "unpricedLines": {
                "type": "integer"
              },
              "coverage": {
                "type": "number"
              },
              "resolvedUsd": {
                "type": "number"
              },
              "referenceBomUsd": {
                "type": "number"
              },
              "referencePricedLines": {
                "type": "integer"
              },
              "complete": {
                "type": "boolean"
              }
            }
          },
          "resolved": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "part": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "qty": {
                  "type": "number"
                },
                "mpn": {
                  "type": "string"
                },
                "offer": {
                  "$ref": "#/components/schemas/Offer"
                },
                "lineUsd": {
                  "type": "number"
                },
                "alternatives": {
                  "type": "integer"
                }
              }
            }
          },
          "unpriced": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "part": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "qty": {
                  "type": "number"
                },
                "mpn": {
                  "type": "string"
                },
                "reason": {
                  "type": "string",
                  "enum": [
                    "no-offer-in-region",
                    "offer-without-price",
                    "no-offers"
                  ]
                },
                "referenceUnitUsd": {
                  "type": "number"
                },
                "offers": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Offer"
                  }
                }
              }
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "region",
          "totals",
          "resolved",
          "unpriced"
        ]
      },
      "SearchResult": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "total": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/RobotSummary"
                },
                {
                  "type": "object",
                  "properties": {
                    "score": {
                      "type": "number"
                    },
                    "summary": {
                      "type": "string"
                    }
                  }
                }
              ]
            }
          }
        },
        "required": [
          "query",
          "total",
          "items"
        ]
      },
      "Comparison": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "missing": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "robots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RobotSummary"
            }
          },
          "specs": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            },
            "description": "spec key -> robot id -> value or null"
          },
          "openness": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "object",
              "properties": {},
              "additionalProperties": {
                "type": "boolean"
              }
            }
          },
          "opennessScore": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "integer"
            }
          },
          "level": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "integer"
            }
          },
          "verbs": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "object",
              "properties": {},
              "additionalProperties": {
                "type": "string",
                "enum": [
                  "live",
                  "partial",
                  "closed"
                ]
              }
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "ids",
          "robots",
          "specs",
          "openness",
          "opennessScore",
          "level",
          "verbs"
        ]
      },
      "Place": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "maker",
              "lab",
              "build",
              "space"
            ]
          },
          "name": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "geo": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "robots": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "verified": {
            "type": "boolean"
          },
          "source": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "kind",
          "name",
          "city",
          "country",
          "geo",
          "robots",
          "verified"
        ]
      },
      "PlaceList": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Place"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "total",
          "items"
        ]
      },
      "Levels": {
        "type": "object",
        "properties": {
          "levels": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "level": {
                  "type": "integer"
                },
                "name": {
                  "type": "string"
                },
                "gate": {
                  "type": "string"
                },
                "robots": {
                  "type": "integer"
                }
              },
              "required": [
                "level",
                "name",
                "gate",
                "robots"
              ]
            }
          },
          "rule": {
            "type": "string"
          }
        },
        "required": [
          "levels"
        ]
      },
      "OpennessBreakdown": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "score": {
            "type": "integer"
          },
          "max": {
            "type": "integer"
          },
          "method": {
            "type": "string"
          },
          "facets": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "object",
              "properties": {
                "open": {
                  "type": "boolean"
                },
                "weight": {
                  "type": "integer"
                }
              }
            }
          },
          "license": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "hw": {
                    "type": "string"
                  },
                  "sw": {
                    "type": "string"
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "models": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "urdf": {
                    "type": "string"
                  },
                  "mjcf": {
                    "type": "string"
                  },
                  "usd": {
                    "type": "string"
                  },
                  "menagerie": {
                    "type": "string"
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "repos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "verbs": {
            "$ref": "#/components/schemas/Verbs"
          },
          "verbNotes": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "score",
          "max",
          "facets",
          "verbs"
        ]
      },
      "VerifiedBuild": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Intake id of the approved build report"
          },
          "robot": {
            "type": "string",
            "examples": [
              "hyperspawn/dropbear"
            ]
          },
          "robotName": {
            "type": "string"
          },
          "builder": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Public display name set at review"
              },
              "handle": {
                "type": "string",
                "description": "Slug of the display name"
              }
            },
            "required": [
              "name",
              "handle"
            ]
          },
          "city": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "country": {
            "oneOf": [
              {
                "type": "string",
                "description": "ISO 3166 alpha-2"
              },
              {
                "type": "null"
              }
            ]
          },
          "geo": {
            "oneOf": [
              {
                "type": "array",
                "items": {
                  "type": "number"
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "geoPrecision": {
            "const": "city"
          },
          "geoSource": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "open-meteo",
                  "gazetteer",
                  "manual"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "photos": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "date": {
            "type": "string",
            "format": "date",
            "description": "Date the report was received"
          },
          "reviewedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "robot",
          "robotName",
          "builder",
          "city",
          "country",
          "geo",
          "geoPrecision",
          "photos",
          "date",
          "reviewedAt"
        ],
        "description": "An approved build report. City-level location only; no contact data."
      },
      "BuildList": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VerifiedBuild"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "total",
          "generatedAt",
          "items"
        ]
      },
      "RobotBuilds": {
        "type": "object",
        "properties": {
          "robot": {
            "$ref": "#/components/schemas/RobotSummary"
          },
          "total": {
            "type": "integer"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VerifiedBuild"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "robot",
          "total",
          "generatedAt",
          "items"
        ]
      },
      "Company": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "unitree"
            ]
          },
          "name": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "humanoid-maker",
              "robot-maker",
              "foundation-model",
              "component",
              "research-lab",
              "platform"
            ]
          },
          "country": {
            "type": "string",
            "description": "ISO 3166 alpha-2"
          },
          "city": {
            "type": "string"
          },
          "founded": {
            "type": "integer"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "acquired",
              "shut-down"
            ]
          },
          "site": {
            "type": "string",
            "format": "uri"
          },
          "summary": {
            "type": "string"
          },
          "fundingUsd": {
            "type": "number"
          },
          "lastRound": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "amountUsd": {
                "type": "number"
              },
              "date": {
                "type": "string"
              },
              "source": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "name",
              "date",
              "source"
            ]
          },
          "valuationUsd": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "number"
              },
              "date": {
                "type": "string"
              },
              "source": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "amount",
              "date",
              "source"
            ]
          },
          "robots": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "models": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Source"
            }
          },
          "href": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "id",
          "name",
          "kind",
          "country",
          "status",
          "summary",
          "sources"
        ]
      },
      "CompanyList": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Company"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "total",
          "items"
        ]
      },
      "CompanyDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Company"
          },
          {
            "type": "object",
            "properties": {
              "timeline": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/TimelineEvent"
                }
              },
              "brainModels": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BrainModel"
                }
              },
              "feeds": {
                "type": "object",
                "properties": {
                  "news": {
                    "type": "string",
                    "format": "uri"
                  },
                  "videos": {
                    "type": "string",
                    "format": "uri"
                  },
                  "papers": {
                    "type": "string",
                    "format": "uri"
                  }
                }
              }
            }
          }
        ]
      },
      "BrainModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "pi0"
            ]
          },
          "name": {
            "type": "string"
          },
          "company": {
            "type": "string"
          },
          "released": {
            "type": "string",
            "description": "YYYY-MM or YYYY-MM-DD"
          },
          "kind": {
            "type": "string",
            "enum": [
              "vla",
              "world-model",
              "locomotion",
              "wbc",
              "vlm",
              "other"
            ]
          },
          "open": {
            "type": "string",
            "enum": [
              "open-weights",
              "open-code",
              "api",
              "closed"
            ]
          },
          "license": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "embodiments": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "links": {
            "type": "object",
            "properties": {
              "paper": {
                "type": "string",
                "format": "uri"
              },
              "code": {
                "type": "string",
                "format": "uri"
              },
              "weights": {
                "type": "string",
                "format": "uri"
              },
              "site": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Source"
            }
          }
        },
        "required": [
          "id",
          "name",
          "company",
          "kind",
          "open",
          "summary",
          "links",
          "sources"
        ]
      },
      "ModelList": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BrainModel"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "total",
          "items"
        ]
      },
      "TimelineEvent": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "YYYY, YYYY-MM or YYYY-MM-DD"
          },
          "title": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "robot",
              "company",
              "funding",
              "research",
              "open-source",
              "policy",
              "milestone"
            ]
          },
          "robots": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Source"
            }
          }
        },
        "required": [
          "date",
          "title",
          "body",
          "kind",
          "sources"
        ]
      },
      "Timeline": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimelineEvent"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "total",
          "items"
        ]
      },
      "IndustryEvent": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "conference",
              "competition",
              "expo",
              "meetup",
              "hackathon"
            ]
          },
          "start": {
            "type": "string",
            "format": "date"
          },
          "end": {
            "type": "string",
            "format": "date"
          },
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "geo": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Source"
            }
          },
          "state": {
            "type": "string",
            "enum": [
              "past",
              "live",
              "upcoming"
            ]
          }
        },
        "required": [
          "id",
          "name",
          "kind",
          "start",
          "city",
          "country",
          "url",
          "sources",
          "state"
        ]
      },
      "EventList": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer"
          },
          "when": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IndustryEvent"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "total",
          "items"
        ]
      },
      "FeedSource": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "ok": {
            "type": "boolean"
          },
          "items": {
            "type": "integer"
          },
          "error": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "ok",
          "items"
        ]
      },
      "NewsItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "source": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "site": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "name",
              "site"
            ]
          },
          "via": {
            "type": "string",
            "enum": [
              "rss",
              "brave-news"
            ]
          },
          "published": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "robots": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "models": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "title",
          "url",
          "source",
          "via",
          "published",
          "robots",
          "companies",
          "models"
        ]
      },
      "Paper": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "arXiv id without version"
          },
          "arxivId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "authors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "summary": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "published": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "updated": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "primaryCategory": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "pdf": {
            "oneOf": [
              {
                "type": "string",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "comment": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "robots": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "models": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "title",
          "authors",
          "url",
          "robots",
          "companies",
          "models"
        ]
      },
      "Video": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "videoId": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{11}$"
          },
          "title": {
            "type": "string"
          },
          "channel": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "company": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "id",
              "name",
              "company",
              "url"
            ]
          },
          "published": {
            "oneOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "embed": {
            "type": "string",
            "format": "uri"
          },
          "thumbnail": {
            "type": "string",
            "format": "uri"
          },
          "license": {
            "const": "official-embed"
          },
          "robots": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "models": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "videoId",
          "title",
          "channel",
          "url",
          "embed",
          "license",
          "robots",
          "companies",
          "models"
        ]
      },
      "NewsList": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "total": {
            "type": "integer"
          },
          "offset": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NewsItem"
            }
          },
          "sourcesOk": {
            "type": "integer"
          },
          "sourcesFailed": {
            "type": "integer"
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeedSource"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "generatedAt",
          "total",
          "offset",
          "limit",
          "items",
          "sources"
        ]
      },
      "PaperList": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "total": {
            "type": "integer"
          },
          "offset": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Paper"
            }
          },
          "sourcesOk": {
            "type": "integer"
          },
          "sourcesFailed": {
            "type": "integer"
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeedSource"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "generatedAt",
          "total",
          "offset",
          "limit",
          "items",
          "sources"
        ]
      },
      "VideoList": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "total": {
            "type": "integer"
          },
          "offset": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Video"
            }
          },
          "sourcesOk": {
            "type": "integer"
          },
          "sourcesFailed": {
            "type": "integer"
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeedSource"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "generatedAt",
          "total",
          "offset",
          "limit",
          "items",
          "sources"
        ]
      },
      "IntakeRequest": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "build-report",
              "correction",
              "training-run",
              "bounty-claim",
              "robot",
              "crew-request",
              "team-application",
              "contact",
              "careers",
              "investor"
            ]
          },
          "robot": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9._-]*/[a-z0-9][a-z0-9._-]*$",
            "description": "Required for build-report, correction, training-run. For kind robot: the proposed id."
          },
          "name": {
            "type": "string",
            "maxLength": 200,
            "description": "Required for robot"
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Required for team-application, contact, careers, investor"
          },
          "message": {
            "type": "string",
            "maxLength": 10000,
            "description": "Required for correction"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "links": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "bounty": {
            "type": "string",
            "description": "Required for bounty-claim"
          },
          "maker": {
            "type": "string",
            "maxLength": 200
          },
          "class": {
            "type": "string",
            "enum": [
              "humanoid",
              "wheeled-humanoid",
              "biped",
              "arm",
              "quadruped",
              "rover",
              "gripper",
              "hand"
            ]
          },
          "repos": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "license": {
            "type": "string",
            "maxLength": 200
          },
          "photos": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "logs": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2
          },
          "task": {
            "type": "string"
          },
          "policy": {
            "type": "string",
            "format": "uri"
          },
          "hardware": {
            "type": "boolean"
          },
          "field": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "fund": {
            "type": "string"
          }
        },
        "required": [
          "kind"
        ],
        "additionalProperties": true,
        "description": "Body capped at 64 KB. Extra keys are kept for reviewers."
      },
      "IntakeReceipt": {
        "type": "object",
        "properties": {
          "ok": {
            "const": true
          },
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "status": {
            "const": "received"
          },
          "review": {
            "type": "string"
          },
          "receivedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "ok",
          "id",
          "kind",
          "status",
          "receivedAt"
        ]
      },
      "JobRequest": {
        "type": "object",
        "properties": {
          "robot": {
            "type": "string",
            "description": "Registry id of a humanoid with a sim model, e.g. unitree/g1"
          },
          "task": {
            "type": "string",
            "enum": [
              "stand",
              "walk",
              "push",
              "imitate"
            ]
          },
          "backend": {
            "type": "string",
            "enum": [
              "mjlab",
              "isaaclab"
            ]
          },
          "hyperparams": {
            "type": "object",
            "properties": {
              "numEnvs": {
                "type": "integer"
              },
              "maxIterations": {
                "type": "integer"
              },
              "seed": {
                "type": "integer"
              },
              "learningRate": {
                "type": "number"
              },
              "entropyCoef": {
                "type": "number"
              },
              "initNoiseStd": {
                "type": "number"
              }
            }
          },
          "budget": {
            "type": "object",
            "properties": {
              "gpuMinutes": {
                "type": "integer"
              }
            },
            "required": [
              "gpuMinutes"
            ]
          },
          "motion": {
            "type": "object",
            "properties": {
              "library": {
                "type": "string"
              },
              "clip": {
                "type": "string"
              }
            },
            "required": [
              "library"
            ]
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Private; never returned"
          }
        },
        "required": [
          "robot",
          "task"
        ]
      },
      "JobReceipt": {
        "type": "object",
        "properties": {
          "ok": {
            "const": true
          },
          "id": {
            "type": "string"
          },
          "status": {
            "const": "queued"
          },
          "spec": {
            "type": "object"
          },
          "cancelToken": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "page": {
            "type": "string"
          }
        },
        "required": [
          "ok",
          "id",
          "status",
          "cancelToken"
        ]
      },
      "Job": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "succeeded",
              "failed",
              "canceled"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "spec": {
            "type": "object"
          },
          "position": {
            "type": [
              "integer",
              "null"
            ]
          },
          "worker": {
            "type": [
              "object",
              "null"
            ]
          },
          "progress": {
            "type": [
              "object",
              "null"
            ]
          },
          "metrics": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "log": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "artifacts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "contentType": {
                  "type": "string"
                },
                "sha256": {
                  "type": "string"
                },
                "uploadedAt": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "url"
              ]
            }
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "status",
          "spec"
        ]
      },
      "JobList": {
        "type": "object",
        "properties": {
          "workers": {
            "type": "object",
            "properties": {
              "online": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "queued": {
                "type": "integer"
              },
              "running": {
                "type": "integer"
              }
            },
            "required": [
              "online",
              "queued",
              "running"
            ]
          },
          "jobs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Job"
            }
          },
          "storage": {
            "type": "string"
          }
        },
        "required": [
          "workers",
          "jobs"
        ]
      },
      "JobClaim": {
        "type": "object",
        "properties": {
          "job": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "spec": {
                "type": "object"
              },
              "attempts": {
                "type": "integer"
              },
              "createdAt": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "spec"
            ]
          }
        },
        "required": [
          "job"
        ]
      },
      "JobPatch": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "running",
              "succeeded",
              "failed"
            ]
          },
          "progress": {
            "type": "object"
          },
          "metrics": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "log": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "error": {
            "type": "string"
          }
        }
      },
      "JobAck": {
        "type": "object",
        "properties": {
          "ok": {
            "const": true
          },
          "status": {
            "type": "string"
          },
          "cancel": {
            "type": "boolean"
          }
        },
        "required": [
          "ok",
          "status",
          "cancel"
        ]
      },
      "ArtifactReceipt": {
        "type": "object",
        "properties": {
          "ok": {
            "const": true
          },
          "artifact": {
            "type": "object"
          }
        },
        "required": [
          "ok",
          "artifact"
        ]
      }
    },
    "securitySchemes": {
      "workerToken": {
        "type": "http",
        "scheme": "bearer",
        "description": "WORKER_TOKEN, plus X-Worker-Name (and X-Worker-Gpu, X-Worker-Backends) headers"
      }
    }
  }
}